Exemple #1
0
        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);
                }
            }
        }