private void ReadThread(object state) { var login = Schemas.CreateAssignSessionId(this.id); this.networkStream.Write(login, 0, login.Length); Console.WriteLine("AssignSessionId #{0}", this.id); var frames = this.manager.FetchTotalFrames(); this.SynchronizeCommandFrame(frames); Console.WriteLine("Synchronize initial frames: {0}", frames.Length); var queue = new MessageQueue(Schemas.ServerSchema); var buffer = new byte[this.tcpClient.ReceiveBufferSize]; while (this.networkStream.CanRead) { int readSize; try { readSize = this.networkStream.Read(buffer, 0, buffer.Length); } catch (Exception ex) { Console.WriteLine("Disconnected: {0}", ex.GetType()); break; } Console.WriteLine("Received {0} bytes", readSize); var bytes = new byte[readSize]; Array.Copy(buffer, bytes, readSize); queue.Enqueue(bytes); foreach (var message in queue.DequeueAll()) { ProcessMessage(message); } } }