public async Task sendMessageAsync(Packet packet, TcpClient client) { if (!client.Connected) { //Server.WriteLine("Client Disconnected"); return; } string stringPacket = JsonConvert.SerializeObject(packet); ///Server.WriteLine("Sending: " + stringPacket); byte[] bytePacket = UnicodeEncoding.Unicode.GetBytes(stringPacket); byte[] messageLength = BitConverter.GetBytes((Int64)bytePacket.Length); ByteAssembler assembler = new ByteAssembler(bytePacket.Length + messageLength.Length); assembler.AddByteArray(messageLength, messageLength.Length); assembler.AddByteArray(bytePacket, bytePacket.Length); byte[] message = assembler.Create(); await client.GetStream().WriteAsync(message, 0, message.Length); //await client.GetStream().WriteAsync(Encoding.Unicode.GetBytes("hello from the other sideee"), 0, 8); //Server.WriteLine("Sent. (from sendMessage()) " + message.Length); }
public async Task <Packet> readMessageAsync(TcpClient client) { ByteAssembler assembler = new ByteAssembler(8); if (!client.Connected) { //Server.WriteLine("Client Disconnected"); return(new Packet(false)); } while (!assembler.isFull) { //Server.WriteLine("iteration"); byte[] readingBytes = new byte[8]; int usingInt = client.GetStream().Read(readingBytes, 0, 8); //Debug.LogError(usingInt + ": Using Int"); assembler.AddByteArray(readingBytes, usingInt); } byte[] byteMessageLength = assembler.Create(); //Debug.LogError(byteMessageLength.Length); Int64 messageLength = (Int64)BitConverter.ToInt64(byteMessageLength, 0); //Server.WriteLine("Reading " + messageLength.ToString() + " bytes of data"); assembler.Clear(messageLength); while (client.Available < messageLength) { } while (!assembler.isFull) { byte[] byteMessage = new byte[messageLength]; int usingInt = client.GetStream().Read(byteMessage, 0, byteMessage.Length); assembler.AddByteArray(byteMessage, usingInt); } string stringMessage = UnicodeEncoding.Unicode.GetString(assembler.Create()); //Server.WriteLine("Read."); return(JsonConvert.DeserializeObject <Packet>(stringMessage)); }