コード例 #1
0
        private static async Task ManyAcceptConnections(CancellationToken token)
        {
            while (!token.IsCancellationRequested)
            {
                try
                {
                    var client = await ManyListener.AcceptTcpClientAsync();

                    Logger.Warn($"设备已连接,IP:{client.Client.RemoteEndPoint}");
                    var md = new ManyMetadata(client);
                    Clients.TryAdd(client.Client.RemoteEndPoint.ToString(), md);

                    Logger.Info($"设备连接数:{Clients.Count}");

#pragma warning disable 4014
                    Task.Run(() => ManyDataReceiver(md), md.Token);
#pragma warning restore 4014
                }
                catch (Exception e)
                {
                    Logger.Info(e.Message);
                }
            }
        }
コード例 #2
0
        private static async Task ManyDataReceiver(ManyMetadata md)
        {
            var header = "[" + md.TcpClient.Client.RemoteEndPoint.ToString() + "]";

            Logger.Info($"{header} many data receiver started");

            try
            {
                while (true)
                {
                    if (!IsClientConnected(md.TcpClient))
                    {
                        Logger.Error(header + $" client no longer connected[{md.LinkId}]");
                        break;
                    }

                    if (Token.IsCancellationRequested)
                    {
                        Logger.Info(header + " cancellation requested");
                        break;
                    }

                    var data = await DataReadAsync(md.TcpClient, Token);

                    if (data == null || data.Length < 1)
                    {
                        Thread.Sleep(100);
                        continue;
                    }

                    Logger.Info($"[M-1][{md.TcpClient.Client.RemoteEndPoint}]:{StringHelper.BytesToHexString(data)}");


                    var length = data.Length;

                    var linkId = 0;

                    if (data.Length > 3)
                    {
                        var linkIdHigh = data[2];
                        var linkIdLow  = data[3];

                        linkId = (linkIdHigh << 8) | (linkIdLow);

                        switch (data[1])
                        {
                        case 0xC7:

                            Logger.Info($"收到连接[4][{Clients.Count}][{linkId}]注册包");

                            break;

                        case 0xC8:

                            Logger.Info($"收到连接[4][{Clients.Count}][{linkId}]心跳包");

                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Info(
                    Environment.NewLine +
                    header +
                    " ManyDataReceiver Exception: " +
                    Environment.NewLine +
                    e.ToString() +
                    Environment.NewLine +
                    e.StackTrace
                    );
            }

            Logger.Info(header + " data receiver terminating");

            Clients.TryRemove(md.TcpClient.Client.RemoteEndPoint.ToString(), out _);
            md.Dispose();
        }