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