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 Session(SessionManager manager, TcpClient tcpClient)
        {
            this.manager = manager;
            this.id = manager.GetNextSessionId();
            this.tcpClient = tcpClient;
            this.networkStream = tcpClient.GetStream();

            ThreadPool.QueueUserWorkItem(ReadThread);
        }