import java.lang.reflect.Method; import java.util.HashMap; import java.util.concurrent.ConcurrentLinkedQueue; // public class Agent extends AbstractAgent{ Agent () {codeName = "DefaultAgent";} // public MissionDetails missionDetails; // public AgentReport agentReport; // public ConcurrentLinkedQueue<AgentMessage> messages = new ConcurrentLinkedQueue<>(); @Override public AgentMessage ReadMessage() {return messages.poll();}; @Override public void AddMessage(AgentMessage message) {messages.offer(message);}; // ... public HashMap<String, Method> agentMethods = new HashMap<> (); // Replicator tools = new Replicator(); }
import java.util.concurrent.ConcurrentHashMap; // ( ) public class Agency { String agencyName = "defaultAgencyName"; // public ConcurrentHashMap<String, AbstractAgent> agentReference = new ConcurrentHashMap<> (); }
import java.lang.reflect.InvocationTargetException; import java.util.concurrent.LinkedBlockingQueue; import java.util.logging.Level; import java.util.logging.Logger; // : public class AgentThread extends AbstractAgentThread { // public LinkedBlockingQueue<MissionCard> missionCards = new LinkedBlockingQueue<>(); @Override public void run() { MissionCard missionCard = null; Scenarios scenario = new Scenarios(); Agent agent = null; Agency agency = null; while (true) { try { sleep(1000); } catch (InterruptedException ex) { Logger.getLogger(AgentThread.class.getName()).log(Level.SEVERE, null, ex); } System.out.println(" ."); missionCard = missionCards.poll(); if (missionCard != null) { agent = (Agent) missionCard.agent; agency = missionCard.agency; // try { missionCard.mission.invoke(scenario, agent, agency); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { Logger.getLogger(AgentThread.class.getName()).log(Level.SEVERE, null, ex); } } // if (agent.missionDetails.details.equals("kill")) {System.out.println("Thread "+ this.threadName + " killed"); break;} } } // @Override public void AddMissionCardTask(MissionCard missionCard) { try { missionCards.put(missionCard); } catch (InterruptedException ex) { Logger.getLogger(AgentThread.class.getName()).log(Level.SEVERE, null, ex); } } }
Source: https://habr.com/ru/post/358850/
All Articles