public void TryDelete(SynchronousSocketSession session) { if (sockList.Contains(session.Socket)) { sockList.Remove(session.Socket); } }
public void Put(SynchronousSocketSession session) { // Already locked here btw from the Add call sessions.Add(session.Socket, session); sockList.Add(session.Socket); socketAvailable.Set(); }
private void Add(SynchronousSocketSession session) { lock (workerLock) { bool needNewWorker = true; foreach (var worker in workerList) { lock (worker.SockListLock) { // Worker full if (worker.Sessions.Count > 250) { continue; } // Socket already disconnected before we got here if (!session.Socket.Connected) { return; } session.OnClose += worker.OnClose; worker.Put(session); } needNewWorker = false; break; } if (needNewWorker) { var newWorker = new TcpWorker(); workerList.Add(newWorker); session.OnClose += newWorker.OnClose; newWorker.Put(session); newWorker.Start(); } var packet = new Packet(Command.OnConnect); ThreadPool.QueueUserWorkItem(session.ProcessEvent, packet); } }