Esempio n. 1
0
    // Read a packet from a connection
    // DataAvailable flag must be true before calling
    private void ReadPacket(RobotConnection conn)
    {
        NetworkStream stream = conn.tcpClient.GetStream();

        // Read Header
        int bytesRead = stream.Read(recvBuf, 0, 5);

        // Check the read is successful
        if (bytesRead != 5)
        {
            // If failed, flush the read buffer
            Debug.Log("Failed to read packet header");
            EyesimLogger.instance.Log("Server: Packet read failure");
            while (stream.DataAvailable)
            {
                stream.Read(recvBuf, 0, recvBuf.Length);
            }
            return;
        }
        uint dataSize = BitConverter.ToUInt32(recvBuf, 1);

        if (BitConverter.IsLittleEndian)
        {
            dataSize = RobotFunction.ReverseBytes(dataSize);
        }
        int packetType = recvBuf[0];

        // Read Body
        if (dataSize > 0)
        {
            bytesRead = stream.Read(recvBuf, 0, (int)dataSize);
        }
        switch (packetType)
        {
        case PacketType.CLIENT_HANDSHAKE:
            if (conn.robot == null)
            {
            }
            break;

        case PacketType.CLIENT_MESSAGE:
            interpreter.ReceiveCommand(recvBuf, conn);
            break;

        case PacketType.CLIENT_DISCONNECT:
            Debug.Log("Client requested disconnect");
            CloseConnection(conn);
            break;

        default:
            break;
        }
    }
Esempio n. 2
0
    internal void WritePacket(RobotConnection conn, Packet packet)
    {
        byte[] sendBuf = new byte[packet.dataSize + 5];
        UInt32 size    = packet.dataSize;

        if (BitConverter.IsLittleEndian)
        {
            size = RobotFunction.ReverseBytes(size);
        }

        sendBuf[0] = Convert.ToByte(packet.packetType);
        BitConverter.GetBytes(size).CopyTo(sendBuf, 1);
        if (packet.dataSize > 0)
        {
            packet.data.CopyTo(sendBuf, 5);
        }

        NetworkStream stream = conn.tcpClient.GetStream();

        stream.Write(sendBuf, 0, ((int)packet.dataSize) + 5);
    }