Exemple #1
0
        public static SimEnt ReadNext(BinaryReader reader)
        {
            SimEnt result = null;

            // read common values for all entities
            byte   shapeID  = reader.ReadByte();
            UInt16 entityID = (UInt16)IPAddress.NetworkToHostOrder(reader.ReadInt16());
            bool   movable  = (reader.ReadByte() == 1);
            UInt32 weight   = (UInt32)IPAddress.NetworkToHostOrder(reader.ReadInt32());

            switch (shapeID)
            {
            case SimEnt.CIRCLE_ID:
                result = ReadCircle(reader, entityID, movable, weight);
                break;

            case SimEnt.RECTANGLE_ID:
                result = ReadRectangle(reader, entityID, movable, weight);
                break;

            case SimEnt.KHEPERA_ROBOT_ID:
                result = ReadKheperaRobot(reader, entityID, movable, weight);
                break;

            case SimEnt.LINE_ID:
                result = ReadLinearEnt(reader, entityID);
                break;

            default:
                System.Windows.MessageBox.Show("Unknown shape ID");
                break;
            }

            return(result);
        }
Exemple #2
0
        public SimulationWorld ReciveWorldDesc()
        {
            SimulationWorld result = new SimulationWorld();

            BinaryReader reader = new BinaryReader(_tcpClient.GetStream());

            result.WorldWidth  = (UInt32)IPAddress.NetworkToHostOrder(reader.ReadInt32());
            result.WorldHeight = (UInt32)IPAddress.NetworkToHostOrder(reader.ReadInt32());
            result.Time        = reader.ReadDouble();
            bool hasBounds       = reader.ReadBoolean(); // information not used in visualisation
            int  numberOfEntites = (UInt16)IPAddress.NetworkToHostOrder(reader.ReadInt16());

            for (int i = 0; i < numberOfEntites; i++)
            {
                SimEnt entity = EntityReceiver.ReadNext(reader);
                entity.VertFunc = x => result.WorldHeight - x;
                result.Entities.Add(entity.ID, entity);
            }

            byte numberOfControllers = reader.ReadByte();

            for (int i = 0; i < numberOfControllers; i++)
            {
                UInt16 robotId = (UInt16)IPAddress.NetworkToHostOrder(reader.ReadInt16());
                String port    = ((UInt16)IPAddress.NetworkToHostOrder(reader.ReadInt16())).ToString();
                String ip      = reader.ReadByte().ToString() + '.';
                ip += reader.ReadByte().ToString() + '.';
                ip += reader.ReadByte().ToString() + '.';
                ip += reader.ReadByte().ToString();
                SimEnt entity = null;
                if (result.Entities.TryGetValue(robotId, out entity))
                {
                    entity.ControllerAddr = String.Concat(ip, ':', port);
                }
            }

            return(result);
        }