private void Accept(DTLSSession session, byte[] message) { try { session.Accept(_udpChannel, message); } catch (Exception e) { lock (_sessionList) { _sessionList.Remove(session); } } }
private void ReceiveData(Object sender, DataReceivedEventArgs e) { lock (_sessionList) { foreach (DTLSSession session in _sessionList) { if (e.EndPoint.Equals(session.EndPoint)) { session.ReceiveData(sender, e); return; } } DTLSSession sessionNew = new DTLSSession((IPEndPoint)e.EndPoint, DataReceived, _serverKeys, _userKeys); _sessionList.Add(sessionNew); new Thread(() => Accept(sessionNew, e.Data)).Start(); } }
public void Send(byte[] data, System.Net.EndPoint ep) { try { IPEndPoint ipEP = (IPEndPoint)ep; DTLSSession session = FindSession(ipEP); if (session == null) { session = new DTLSSession(ipEP, DataReceived, _serverKeys, _userKeys); AddSession(session); session.Connect(_udpChannel); } session.Queue.Enqueue(new QueueItem(null, data)); session.WriteData(); } catch (Exception e) { Console.WriteLine("Error in DTLSClientChannel Sending - " + e.ToString()); } }
private static void AddSession(DTLSSession session) { lock (_sessionList) { _sessionList.Add(session); } }