// 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; } }
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)); }
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); }