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; }
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; } }
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; } } }