Exemplo 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;
        }
    }
Exemplo n.º 2
0
        public void robotFunctionTest()
        {
            var r = new RobotFunction();

            Assert.AreEqual(8, r.robotFunction(3, 5));
            Assert.AreEqual(12, r.robotFunction(9, 10));
            Assert.AreEqual(13, r.robotFunction(6, 8));
            Assert.AreEqual(1593, r.robotFunction(1, 100));
            Assert.AreEqual(2801, r.robotFunction(100, 200));
            Assert.AreEqual(3601, r.robotFunction(239, 344));
            Assert.AreEqual(178377796, r.robotFunction(1, 1000000));
            Assert.AreEqual(189792020, r.robotFunction(30, 1048575));
            Assert.AreEqual(189459234, r.robotFunction(1016, 1047552));
            Assert.AreEqual(189789966, r.robotFunction(126, 1048575));
            Assert.AreEqual(189789966, r.robotFunction(1, 10000000000000));
        }
Exemplo n.º 3
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);
    }