Beispiel #1
0
 public void TryDelete(SynchronousSocketSession session)
 {
     if (sockList.Contains(session.Socket))
     {
         sockList.Remove(session.Socket);
     }
 }
Beispiel #2
0
        public void Put(SynchronousSocketSession session)
        {
            // Already locked here btw from the Add call

            sessions.Add(session.Socket, session);

            sockList.Add(session.Socket);

            socketAvailable.Set();
        }
Beispiel #3
0
        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);
            }
        }