Пример #1
0
    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);
    }
Пример #2
0
    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));
    }