📄 basemessagemanager.java
字号:
protected void log(String message) { try { fw.write(message); fw.flush(); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } protected void parseMessage(byte[] message, int time, RealObject sender, boolean isCenter) { log("\n ----- TIME = " + time + " ----- importMessage from = " + sender.id); char[] messageArray = byteArrayToCharArray(message); boolean fromCenter = sender instanceof MotionlessObject; pointer = 0; while (true) { int header = Util.charArrayToint(readMessage(messageArray, HEADER_SIZE), 0, HEADER_SIZE); int length = 0; if (header != HEADER_NULL) { length = Util.charArrayToint(readMessage(messageArray, LENGTH_SIZE), 0, LENGTH_SIZE); } Message m = null; switch (header) { case HEADER_NULL: { //log (" end ===\n"); //;//System.out.println(""); return; } case HEADER_CLEAR: { // log(" " + Type.CLEAR_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new ClearMessage(readMessage(messageArray, ClearMessage.staticLength()), virtualIdToId); m.updateWorld(world, time); log(", ClearMessage " + m.obj.id); // System.out.print(Type.CLEAR_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedClears, centerReportedClears, true); } break; } case HEADER_CIVILIAN: { // log(" " + Type.CIVILIAN_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new VictimMessage(readMessage(messageArray, VictimMessage.staticLength()), virtualIdToId); m.updateWorld(world, time); log(", CivilianMessage " + m.obj.id); // System.out.print(Type.CIVILIAN_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedVictims, centerReportedVictims, true); } break; } case HEADER_FIRE: { // log(" " + Type.FIRE_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new FireMessage(readMessage(messageArray, FireMessage.staticLength()), virtualIdToId); m.updateWorld(world, time); log(", FireMessage " + m.obj.id); // System.out.print(Type.FIRE_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedFires, centerReportedFires, true); Building b = (Building) world.get(((FireMessage) m).getBuildingId()); log("\nFire Report received Building Id = " + b.id + " virtual Id = " + ((Integer) (idToVirtualId.get(new Integer(b.id)))).toString() + "\n"); } break; } case HEADER_POSITION: { // log(" " + Type.POSITION_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new PositionMessage(readMessage(messageArray, PositionMessage.staticLength()), virtualIdToId); m.updateWorld(world, time); Collections.sort(world.agents, yab.agent.Util.idComparator); log(", Position(" + ((PositionMessage) m).index + "=" + ((Humanoid) (world.agents.get(((PositionMessage) m).index))).id + ") " + ((PositionMessage) m).positionId); // System.out.print(Type.POSITION_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedPositions, centerReportedPositions, true); } break; } case HEADER_UNCLEAR: { // log(" " + Type.UNCLEAR_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new UnClearMessage(readMessage(messageArray, UnClearMessage.staticLength()), virtualIdToId); m.updateWorld(world, time); log(", UnClear " + ((UnClearMessage) m).obj.id); // System.out.print(Type.UNCLEAR_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedUnClears, centerReportedUnClears, true); } break; } case HEADER_BLOCK: { // log(" " + Type.BLOCK_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new BlockMessage(readMessage(messageArray, BlockMessage.staticLength()), virtualIdToId); m.updateWorld(world, time); log(", Block " + ((BlockMessage) m).obj.id); // System.out.print(Type.BLOCK_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedBlocks, centerReportedBlocks, true); } break; } case HEADER_EMPTYBUILDING: { // log(" " + Type.EMPTYBUILDING_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new EmptyBuildingMessage(readMessage(messageArray, EmptyBuildingMessage.staticLength()), virtualIdToId); m.updateWorld(world, time); log(", EmptyBuilding " + m.obj.id); // System.out.print(Type.EMPTYBUILDING_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedEmptyBuildings, centerReportedEmptyBuidings, true); } break; } case HEADER_HEARDCIVILIAN: { // log(" " + Type.HEARDCIVILIAN_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new HeardCivilianMessage(readMessage(messageArray, HeardCivilianMessage.staticLength()), virtualIdToId); m.updateWorld(world, time); log(", HeardCivilian: " + m.obj.id + "in Position: "+((HeardCivilianMessage)m).posId); // System.out.print(Type.HEARDCIVILIAN_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedHeardCivilians, centerReportedHeardCivilians, true); } break; } case HEADER_LOCKEDBYBLOCKADE: { // log(" " + Type.LOCKEDBYBLOCKADE_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new LockedByBlockadeMessage(readMessage(messageArray, LockedByBlockadeMessage.staticLength()), virtualIdToId); m.updateWorld(world, time); Collections.sort(world.agents, yab.agent.Util.idComparator); log(", LockedByBlockade(" + ((LockedByBlockadeMessage) m).index + "=" + ((Humanoid) (world.agents.get(((LockedByBlockadeMessage) m).index))).id + ") " + ((LockedByBlockadeMessage) m).positionId);// System.out.print(Type.LOCKEDBYBLOCKADE_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedLockedByBlockades, centerReportedLockedByBlockades, true); } break; } case HEADER_REQUESTPARTITIONCHANGING: { // log(" " + Type.REQUESTPARTITIONCHANGING_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new RequestPartitionChangingMessage(readMessage(messageArray, RequestPartitionChangingMessage.staticLength())); m.updateWorld(world, time); Collections.sort(world.policeForces, yab.agent.Util.idComparator); log(", requestPartitionChanging: " + ((RequestPartitionChangingMessage)m).index); // System.out.print(Type.REQUESTPARTITIONCHANGING_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedRequestPartitionChangings, centerReportedRequestPartitionChangings, true); } break; } case HEADER_PARTITIONFINISHED: { // log(" " + Type.PARTITIONFINISHED_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new PartitionFinishedMessage(readMessage(messageArray, PartitionFinishedMessage.staticLength())); m.updateWorld(world, time); Collections.sort(world.policeForces, yab.agent.Util.idComparator); log(", partitionFinished: " + ((PartitionFinishedMessage)m).index); // System.out.print(Type.PARTITIONFINISHED_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedPartitionFinisheds, centerReportedPartitionFinisheds, true); } break; } case HEADER_SETPARTITION: { // log(" " + Type.SETPARTITION_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new SetPartitionMessage(readMessage(messageArray, SetPartitionMessage.staticLength())); m.updateWorld(world, time); Collections.sort(world.policeForces, yab.agent.Util.idComparator); log(", setPartition( Police: " + ((SetPartitionMessage)m).policeIdx + ", partition: " + ((SetPartitionMessage)m).partId + ")"); // System.out.print(Type.SETPARTITION_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedSetPartitions, centerReportedSetPartitions, true); } break; } case HEADER_CLEAREDPATH: { // log(" " + Type.CLEAREDPATH_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new ClearedPathMessage(readMessage(messageArray, ClearedPathMessage.staticLength())); m.updateWorld(world, time); log(", clearedPathIndex: " + ((ClearedPathMessage)m).pathIndex ); // System.out.print(Type.CLEAREDPATH_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedClearedPaths, centerReportedClearedPaths, true); } break; } case HEADER_TARGET: { //log(" " + Type.TARGET_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new TargetMessage(readMessage(messageArray, TargetMessage.staticLength())); m.updateWorld(world, time); log(", tagert: " + ((TargetMessage)m).targetId + ", index:"+((TargetMessage)m).index); //System.out.print(Type.TARGET_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedTargets, centerReportedTargets, true); } break; } case HEADER_REQUESTTARGET: { //log(" " + Type.REQUESTTARGET_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new RequestTargetMessage(readMessage(messageArray, RequestTargetMessage.staticLength())); m.updateWorld(world, time); log(",Request tagert: " + ((RequestTargetMessage)m).index); //System.out.print(Type.REQUESTTARGET_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedRequestTargets, centerReportedRequestTargets, false); } break; } case HEADER_TASK: { //log(" " + Type.REQUESTTARGET_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new TaskMessage(readMessage(messageArray, TaskMessage.staticLength())); m.updateWorld(world, time); log(",Pol : " + ((TaskMessage)m).polIndex + ",Task : " + ((TaskMessage)m).task); //System.out.print(Type.REQUESTTARGET_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedTasks, centerReportedTasks, false); } break; } case HEADER_TASK_FINISHED: { //log(" " + Type.REQUESTTARGET_REPORT.toString() + length); for (int i = 0; i < length; i++) { m = new TaskFinishedMessage(readMessage(messageArray, TaskFinishedMessage.staticLength())); m.updateWorld(world, time); log(",Pol : " + ((TaskFinishedMessage)m).index); //System.out.print(Type.REQUESTTARGET_REPORT.toString()); addToLists(fromCenter, m, isCenter, reportedFinishedTasks, centerReportedFinishedTasks, false); } break; } } } } private void addToLists(boolean fromCenter, Message m, boolean isCenter, Collection agentList, Collection centerList, boolean sendToCenters) { if (fromCenter) { centerList.add(m); } else { agentList.add(m); } if (isCenter) { messagesToAgents.add(m); if (!fromCenter && sendToCenters) { messagesToCenters.add(m); } } } private char[] readMessage(char[] message, int length) { char[] result = new char[length]; if (!Util.copyArray(message, result, pointer, 0, length)) ; //;//System.out.println ("copyArray is false"); pointer += length; return result; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -