public void AddSession(Session session)
 {
     lock (this.sessionsLock)
     {
         this.sessions.Add(session);
     }
 }
        private void WorkThread(object state)
        {
            var sessionManager = new SessionManager();

            while (!this.isClosed)
            {
                try
                {
                    var tcpClient = this.tcpListener.AcceptTcpClient();

                    var session = new Session(sessionManager, tcpClient);

                    sessionManager.AddSession(session);

                    Console.WriteLine("New session #{0} created", session );
                }
                catch (SocketException)
                {
                    Console.WriteLine("Accept failure");
                    break;
                }
            }

            sessionManager.RemoveAllSessions();
        }
        public void RemoveSession(Session session)
        {
            lock (this.sessionsLock)
            {
                this.sessions.Remove(session);

                this.isEnded = true;
            }
        }