using System; using System.Net.Sockets; using System.Text; namespace LobbyServer { class CommandStream { private NetworkStream _stream; public CommandStream(NetworkStream stream) { _stream = stream; } public CommandPacket Receive() { // Length byte[] buffer = new byte[4]; _stream.Read(buffer, 0, buffer.Length); uint length = BitConverter.ToUInt32(buffer, 0); // Data buffer = new byte[length]; _stream.Read(buffer, 0, buffer.Length); string[] packet = Encoding.UTF8.GetString(buffer).Split('\n'); if (!Enum.TryParse(packet[0], true, out Command command)) { command = Command.Invalid; } return new CommandPacket(command, packet[1]); } public void Send(CommandPacket command) { string packet = command.ToString(); byte[] data = Encoding.UTF8.GetBytes(packet); _stream.Write(BitConverter.GetBytes((uint)data.Length), 0, 4); _stream.Write(data, 0, data.Length); } } }