public async Task WriteToStreamAsync(NetworkStream stream)
{
byte[] packet = new byte[TotalPacketSize];
BitConverter.GetBytes(PacketSize).CopyTo(packet, 0);
BitConverter.GetBytes((int)Opcode).CopyTo(packet, 4);
BitConverter.GetBytes((int)Type).CopyTo(packet, 8);
Data.CopyTo(packet, 12);
packet[packet.Length - 1] = ((byte)0x00);
Console.WriteLine("Sent {0}", DataAsString());
await stream.WriteAsync(packet, 0, TotalPacketSize);
}