Пример #1
0
 public wheel(byte[] DataStream)
 {
     Buffer.BlockCopy(DataStream, 0, wheel_base_O, 0, 44);
     Buffer.BlockCopy(DataStream, 44, wheel_ext_E, 0, 60);
     this.wheel_O = new wheel_o(wheel_base_O);
     this.wheel_E = new wheel_e(wheel_ext_E);
 }
Пример #2
0
            public Packet Parse(byte[] DataStream, int[] lens)
            {
                Packet pkt;

                wheel_o[] myWheel_O = new wheel_o[4];
                b = Split(DataStream, lens);
                header_c _header_C  = new header_c(b[0]);
                header_m _header_M0 = new header_m(b[1]);
                header_m _header_M1 = new header_m(b[2]);
                state    _state     = new state(b[3]);
                header_m _header_M2 = new header_m(b[4]);

                myWheel_O[0] = new wheel_o(b[5]);
                myWheel_O[1] = new wheel_o(b[6]);
                myWheel_O[2] = new wheel_o(b[7]);
                myWheel_O[3] = new wheel_o(b[8]);
                header_m _header_M3 = new header_m(b[9]);

                pkt = new Packet(_header_C, _header_M0, _header_M1, _state, _header_M2, myWheel_O, _header_M3);
                return(pkt);
            }
Пример #3
0
            public byte[] Serialize(wheel_o wheel_O)
            {
                List <byte> DataStream = new List <byte>();

                DataStream.AddRange(BitConverter.GetBytes(wheel_O.playerId));
                DataStream.AddRange(BitConverter.GetBytes(wheel_O.id));
                DataStream.AddRange(BitConverter.GetBytes(wheel_O.flags));
                DataStream.AddRange(wheel_O.spare0);
                DataStream.AddRange(BitConverter.GetBytes(wheel_O.radiusStatic));
                DataStream.AddRange(BitConverter.GetBytes(wheel_O.springCompression));
                DataStream.AddRange(BitConverter.GetBytes(wheel_O.rotAngle));
                DataStream.AddRange(BitConverter.GetBytes(wheel_O.slip));
                DataStream.AddRange(BitConverter.GetBytes(wheel_O.steeringAngle));
                DataStream.AddRange(BitConverter.GetBytes(wheel_O.spare1[0]));
                DataStream.AddRange(BitConverter.GetBytes(wheel_O.spare1[1]));
                DataStream.AddRange(BitConverter.GetBytes(wheel_O.spare1[2]));
                DataStream.AddRange(BitConverter.GetBytes(wheel_O.spare1[3]));
                DataStream.RemoveAt(5);
                DataStream.RemoveAt(6);
                return(DataStream.ToArray());
            }
Пример #4
0
            public Packet Parse(byte[] DataStream)
            {
                Packet pkt;
                int    offset         = 0;
                int    entry_hdr_size = 16;

                byte[]    b = new byte[4096];
                byte[]    filtered_packet = new byte[4096];
                byte[]    wheel_pkg       = new byte[512];
                byte[]    state_pkg       = new byte[512];
                wheel_o[] myWheel         = new wheel_o[4];
                state     _state          = new state(new byte[1024]);
                header_m  _header_M0      = new header_m(0, 0, 1, 0); // RDB_PKG_ID_START_OF_FRAME
                header_m  _header_M1      = new header_m(0, 0, 0, 0); // Object state
                header_m  _header_M2      = new header_m(0, 0, 0, 0); // Wheel frame
                header_m  _header_M3      = new header_m(0, 0, 2, 0); // RDB_PKG_ID_END_OF_FRAME

                // Read main header
                header_c _header_C = new header_c(DataStream);

                // Move past header. Data segment is the first entry header.
                offset += (int)_header_C.headerSize;

                Console.WriteLine("Frame no: " + _header_C.frameNo);

                // Then check reamining sub packages
                while (offset < (int)_header_C.headerSize + (int)_header_C.dataSize)
                {
                    // Read entry header
                    Buffer.BlockCopy(DataStream, offset, b, 0, entry_hdr_size);
                    header_m entry_header = new header_m(b);


                    // Move ahead passed entry header, read data
                    offset += (int)entry_header.headerSize;
                    if (entry_header.dataSize > 0)
                    {
                        Buffer.BlockCopy(DataStream, offset, b, 0, (int)entry_header.dataSize);

                        if (entry_header.pkgId == 9)  // RDB_PKG_ID_OBJECT_STATE
                        {
                            _header_M1 = entry_header;
                            for (int i = 0; i < entry_header.dataSize / entry_header.elementSize; i++)
                            {
                                Buffer.BlockCopy(b, i * (int)entry_header.elementSize, state_pkg, 0, (int)entry_header.elementSize);
                                state state_tmp = new state(state_pkg);
                                Console.WriteLine("state :" + state_tmp.state_base.id);
                                if (state_tmp.state_base.id == 1)
                                {
                                    _state = state_tmp;
                                    Console.WriteLine("------Storing state pos (" +
                                                      _state.state_base.pos.x + ", " +
                                                      _state.state_base.pos.y + ", " +
                                                      _state.state_base.pos.z + ")");
                                }
                            }
                        }
                        else if (entry_header.pkgId == 14)  // RDB_PKG_ID_WHEEL
                        {
                            _header_M2 = entry_header;
                            for (int i = 0; i < entry_header.dataSize / entry_header.elementSize; i++)
                            {
                                Buffer.BlockCopy(b, i * (int)entry_header.elementSize, wheel_pkg, 0, (int)entry_header.elementSize);
                                wheel_o tmp_wheel = new wheel_o(wheel_pkg);
                                Console.WriteLine("wheel: " + tmp_wheel.playerId);
                                if (tmp_wheel.playerId == 1)
                                {
                                    Console.WriteLine("------Storing wheel no " + i + " steering: " + tmp_wheel.steeringAngle);
                                    myWheel[tmp_wheel.id] = new wheel_o(wheel_pkg);
                                }
                            }
                        }
                        else
                        {
                            Console.WriteLine("Discarded package id: " + entry_header.pkgId);
                        }
                        offset += (int)entry_header.dataSize;
                    }
                }

                if (_header_M1.pkgId == 0 | _header_M2.pkgId == 0)
                {
                    Console.WriteLine("Did not get start and/or end frame!\n");
                }
                pkt = new Packet(_header_C, _header_M0, _header_M1, _state, _header_M2, myWheel, _header_M3);
                return(pkt);
            }
Пример #5
0
 public wheel(wheel_o wheel_O, wheel_e wheel_E)
 {
     this.wheel_O = wheel_O;
     this.wheel_E = wheel_E;
 }