예제 #1
0
        private async void ListenAnyAddrData()
        {
            while (!Token.IsCancellationRequested)
            {
                try
                {
                    var UdpReceiveResult = await UdpC.ReceiveAsync();

                    if (UdpReceiveResult != null)
                    {
                        string IpPortStr = $"UDP:{UdpReceiveResult.RemoteEndPoint.Address.ToString()}:{UdpReceiveResult.RemoteEndPoint.Port}";
                        if (!ClientList.ContainsKey(IpPortStr))
                        {
                            var RmClient = new RemoteClient();
                            RmClient.RemoteEndPoint = UdpReceiveResult.RemoteEndPoint;
                            RmClient.ActiveTime     = DateTime.Now;
                            ClientList.TryAdd(IpPortStr, RmClient);
                            if (iConnectedFDback != null)
                            {
                                Task unwait = Task.Run(() => iConnectedFDback(IpPortStr));
                            }
                        }
                        else
                        {
                            RemoteClient RmClient;
                            ClientList.TryGetValue(IpPortStr as string, out RmClient);
                            RmClient.ActiveTime = DateTime.Now;
                        }
                        byte[] data = UdpReceiveResult.Buffer;
                        if (iDataReceivedFDback != null)
                        {
                            Task unwait = Task.Run(() => iDataReceivedFDback(IpPortStr, data));
                        }
                    }
                }
                catch (Exception)
                {
                    this.Dispose();
                }
            }
            return;
        }
예제 #2
0
 private void CilentConnectPrompt(string IpPortStr, IPEndPoint RemoteEndPoint, IntPtr ssl)
 {
     if (!ClientList.ContainsKey(IpPortStr))
     {
         var RmClient = new RemoteClient();
         RmClient.RemoteEndPoint = RemoteEndPoint;
         RmClient.Ssl            = ssl;
         RmClient.ActiveTime     = DateTime.Now;
         ClientList.TryAdd(IpPortStr, RmClient);
         if (iConnectedFDback != null)
         {
             Task unwait = Task.Run(() => iConnectedFDback(IpPortStr));
         }
     }
     else
     {
         RemoteClient RmClient;
         ClientList.TryGetValue(IpPortStr as string, out RmClient);
         RmClient.ActiveTime = DateTime.Now;
     }
 }
예제 #3
0
        private void DataReceivedHandler(IntPtr ssl)
        {
            RemoteClient RmClient = null;

            wolfssl.DTLS_con con       = wolfssl.get_dtls_fd(ssl);
            string           IpPortStr = $"DTLS:{con.ep.Address.ToString()}:{con.ep.Port.ToString()}";
            var RemoteEndPoint         = new IPEndPoint(con.ep.Address, con.ep.Port);

            CilentConnectPrompt(IpPortStr, RemoteEndPoint, ssl);

            byte[] buff = new byte[2048];
            while (true)
            {
                try
                {
                    Console.WriteLine("Begin read message");
                    var recvd = wolfssl.read(ssl, buff, 2048);
                    if (recvd <= 0)
                    {
                        throw new Exception("Error reading message");
                    }
                    Console.WriteLine($"Read {recvd} bytes data");
                    ClientList.TryGetValue(IpPortStr, out RmClient);
                    RmClient.ActiveTime = DateTime.Now;
                    byte[] data = new byte[recvd];
                    Array.Copy(buff, data, recvd);
                    if (iDataReceivedFDback != null)
                    {
                        Task unwait = Task.Run(() => iDataReceivedFDback(IpPortStr, data));
                    }
                }
                catch (Exception)
                {
                    Disconnect(IpPortStr);
                    return;
                }
            }
        }