static void CommandSerialize(Scenarios.CommandType cmd, string Data, out byte[] headerBuffer, out byte[] dataBuffer) { headerBuffer = new byte[2 + 5]; byte[] dataBytes = Encoding.UTF8.GetBytes(Data); dataBuffer = new byte[2 + dataBytes.Length]; // Seperators: // ============================================ headerBuffer[0] = headerBuffer[6] = CMD_SEPERATOR; dataBuffer[0] = dataBuffer[1 + dataBytes.Length] = CMD_SEPERATOR; // Dataheader: // ============================================ headerBuffer[1] = (byte)cmd; byte[] datalengthBytes = BitConverter.GetBytes(dataBytes.Length); for (int i = 0; i < 4; i++) { headerBuffer[2 + i] = datalengthBytes[i]; } // Data: // ============================================ for (int i = 0; i < dataBytes.Length; i++) { dataBuffer[1 + i] = dataBytes[i]; } }
// ========= ========= ========= High level public static async Task <TaskInfo> SendCommand(Scenarios.CommandType cmd, string Data, TcpClient client) { TaskInfo result; try { byte[] headerBytes, commandBytes; CommandSerialize(cmd, Data, out headerBytes, out commandBytes); await client.GetStream().WriteAsync(headerBytes, 0, headerBytes.Length); await client.GetStream().WriteAsync(commandBytes, 0, commandBytes.Length); result = TaskInfo.Success("Command sent."); } catch (Exception ex) { result = TaskInfo.Fail(ex.ToString()); } return(result); }