AFSIM - #003 使用c#接收warlock的数据

在这里插入图片描述

使用c#接收warlock的数据

1 目标

本文的目的是使用c#接收warlock的数据。

2 代码

2.1 添加必要的 NuGet 包

dotnet add package Grpc.Net.Client
dotnet add package Google.Protobuf
dotnet add package Grpc.Tools

2.2 添加 .proto 文件

将您的 afsim_service.proto 文件添加到项目中,并在 .csproj 文件中进行如下配置,以生成所需的 C# 类

<ItemGroup>
  <Protobuf Include="afsim_service.proto" GrpcServices="Client" />
</ItemGroup>

2.3 在 .proto 文件中添加命名空间

syntax = "proto3";
option csharp_namespace = "Isim.Grpc"; // ← 自定义的 C# 命名空间

2.4 主程序

using System;
using System.Threading;
using System.Threading.Tasks;
using Grpc.Net.Client;
using Isim.Grpc;
//using af_service;

using Google.Protobuf;
using System.Collections.Generic;
using System.Reflection;
using Grpc.Core;

namespace GrpcClientApp
{
   
    class Program
    {
   
        private const string ServerAddress = "http://127.0.0.1:5005";
        private const int MaxRetries = 3;
        private const int RetryDelaySeconds = 2;

        static async Task Main(string[] args)
        {
   
            int retries = 0;
            while (retries < MaxRetries)
            {
   
                try
                {
   
                    Console.WriteLine($"尝试连接 {
     ServerAddress}...");
                    using var channel = GrpcChannel.ForAddress(ServerAddress);
                    var client = new AFDataCollectService.AFDataCollectServiceClient(channel);

                    var entityTask = Task.Run(async () =>
                    {
   
                        var entityStream = client.GetEntityInfo(new Request());
                        await foreach (var entityData in entityStream.ResponseStream.ReadAllAsync())
                        {
   
                            //ProcessEntityData(entityData);
                        }
                    });

                    var eventTask = Task.Run(async () =>
                    {
   
                        var eventStream = client.GetEventsInfo(new Request());
                        await foreach (var eventData in eventStream.ResponseStream.ReadAllAsync())
                        {
   
                            ProcessEventData(eventData);
                        }
                    });

                    await Task.WhenAll(entityTask, eventTask);
                    break;
                }
                catch (Exception ex)
                {
   
                    Console.WriteLine($"连接失败: {
     ex.Message}{
     RetryDelaySeconds}秒后重试...");
                    retries++;
                    await Task.Delay(RetryDelaySeconds * 1000);
                }
            }

            if (retries >= MaxRetries)
            {
   
                Console.WriteLine("超过最大重试次数,客户端退出。");
            }
        }

        private static void ProcessEntityData(StatusData statusData
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满天飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值