示例#1
0
            /// <inheritdoc />
            protected override async void HandleClient(object obj)
            {
                var client = (TcpClient)obj;

                var networkStream = client.GetStream();

                while (client.Connected)
                {
                    if (networkStream.DataAvailable)
                    {
                        byte[] messageByteArray;
                        await using (var memStream = new MemoryStream())
                        {
                            // Read message size
                            var dataSize = new byte[4];
                            networkStream.Read(dataSize, 0, 4);
                            var messageSize = BitConverter.ToInt32(dataSize);

                            // Read message
                            var numBytesRead = 0;
                            while (numBytesRead != messageSize)
                            {
                                var data = new byte[messageSize];
                                numBytesRead = networkStream.Read(data, 0, messageSize - numBytesRead);
                                memStream.Write(data, 0, numBytesRead);
                            }
                            messageByteArray = memStream.ToArray();
                        }

                        // Parse message
                        var jsonString = Encoding.UTF8.GetString(messageByteArray);
                        var message    = (Message)JsonConvert.DeserializeObject(jsonString, typeof(Message));

                        var incomingMessage = new IncomingMessage(message);
                        var returnData      = incomingMessage.ExecuteMessage(client);

                        if (returnData != null)
                        {
                            SendMessage(client, returnData);
                        }
                    }
                    Thread.Sleep(500);
                }
            }