public void HandleClient(object obj) { TcpClient client = (TcpClient)obj; client.ReceiveBufferSize = int.MaxValue; client.SendBufferSize = int.MaxValue; while (client.Connected) { while (client.Available <= 0) { ; } //byte[] data = Encoding.ASCII.GetBytes("Send next data: [enter 'quit' to terminate] "); //client.GetStream().Write(data, 0, data.Length); OTcpServerMessage receivedMessage = Receive(ref client); if (receivedMessage != null) { Guid commandId = new Guid(); string commandString = Commands.GetCommandFromHash(receivedMessage.Header.CommandHash); commandQueue.Add(commandId, client); issuedCommands.Add(commandId, new Tuple <string, object>(commandString, receivedMessage.Message)); CommandEvent?.Invoke(commandId, commandString); } } }
private OTcpServerMessage ReceiveBinary(ref TcpClient client) { var header = ReceiveHeader(ref client); var receivedMessage = new OTcpServerMessage(); if (header == null) { // LOG return(null); } receivedMessage.Header = header; byte[] messageBytes = new byte[header.DataSize]; // Clear the message // Receive the stream of bytes client.GetStream().Read(messageBytes, 0, messageBytes.Length); receivedMessage.Message = ObjectBinarySerialization.ByteArrayToObject(messageBytes); return(receivedMessage); }
private OTcpServerMessage ReceiveJSON(ref TcpClient client) { var header = ReceiveHeader(ref client); var dtype = StringTypeToTypeConverter.Convert(header.ExpectType); var receivedMessage = new OTcpServerMessage(); if (header == null) { // LOG return(null); } receivedMessage.Header = header; byte[] messageBytes = new byte[header.DataSize]; // Clear the message // Receive the stream of bytes client.GetStream().Read(messageBytes, 0, messageBytes.Length); var convertedType = StringTypeToTypeConverter.GetTypeFrom(header.ExpectType); receivedMessage.Message = Convert.ChangeType(JsonConvert.DeserializeObject(Encoding.UTF8.GetString(messageBytes), convertedType), convertedType); return(receivedMessage); }