private void RemoveClient(ClientRt rt) { register.Run(() => { Logger.Trace("Client {0} disconnected", rt.EndPoint); clients.Remove(rt.EndPoint.ToString()); rt.Dispose(); }); }
private void AcceptLoop() { while (true) { var client = server.AcceptTcpClient(); register.Run(() => { using (var disposer = new Disposer()) { disposer.Push(client); var rt = new ClientRt(client, certificate, factory); disposer.Push(rt.Dispose); //ensure cleanup order clients.Add(rt.EndPoint.ToString(), rt); rt.Run(() => RemoveClient(rt)); Logger.Trace("Client {0} connected", rt.EndPoint); disposer.Clear(); } }); } }