// Event Handlers private void Socket_OnReceive(IAsyncResult result) { IPEndPoint endpoint = null; byte[] data = Listener.EndReceive(result, ref endpoint); if (!Disposing && Started) { LastAsyncReceiveOp = Listener.BeginReceive(Socket_OnReceive, null); lock (Clients) { Client c; UdpClientBackend backend; if (ClientMapping.TryGetValue(endpoint, out c)) { backend = c.Backend as UdpClientBackend; backend?.OnRx(data); } else { backend = new UdpClientBackend(Listener, endpoint); c = new Client(backend); Clients.Add(c); ClientMapping.Add(endpoint, c); backend.OnRx(data); } } } }
public Client(IPAddress address, ushort port, bool udpBackend = false) { NetstClientBackend backend; Outgoing = true; if (udpBackend) { backend = new UdpClientBackend(address, port); } else { backend = new TcpClientBackend(address, port); } Backend = backend; }