コード例 #1
0
ファイル: SiteAgent.java プロジェクト: Ooya/Robot-Sapiens
 final synchronized void deconnection(String id) {
   for (Iterator i = distantKernels.iterator(); i.hasNext(); ) {
     AgentAddress distantK = (AgentAddress) i.next();
     if (distantK.getKernel().getID().equals(id)) {
       debug("disconnected from " + id);
       for (Iterator j = organizations.entrySet().iterator(); j.hasNext(); ) {
         Map.Entry e = (Map.Entry) j.next();
         Organization org = (Organization) e.getValue();
         if (org.removeAgentsFromKernel(distantK.getKernel())) {
           leaveGroup("communities", (String) e.getKey());
           sendAll(
               new SynchroMessage(
                   Kernel.LEAVE_GROUP,
                   getAddress(),
                   COMMUNITIES,
                   (String) e.getKey(),
                   null,
                   null));
           sendAll(new SynchroMessage(Kernel.DELETE_COMMUNITY, (String) e.getKey()));
           j.remove();
         }
       }
       kernelAgent.callHooks(Kernel.DISCONNECTED_FROM, distantK.getKernel());
       kernelAgent.callHooks(Kernel.REMOVE_MEMBER_ROLE, distantK, COMMUNITIES, PUBLIC, SITE);
       i.remove();
       System.gc();
       System.runFinalization();
       break;
     }
   }
   if (gui != null) gui.refreshCommunities();
 }
コード例 #2
0
ファイル: SiteAgent.java プロジェクト: Ooya/Robot-Sapiens
 final synchronized void tryMigration(KernelAddress destination, AgentAddress traveler) {
   AbstractAgent ref = Kernel.getReference(traveler);
   Message message = new SynchroMessage(ref);
   for (Iterator i = distantKernels.iterator(); i.hasNext(); ) {
     AgentAddress potentialReceiver = (AgentAddress) i.next();
     if (potentialReceiver.getKernel().equals(destination)) {
       message.setReceiver(potentialReceiver);
       break;
     }
   }
   if (message.getReceiver() != null && ref != null) {
     // kernelAgent.callshook 	...  updateDistantOrgs(Kernel.MIGRATION,traveler,null,null,null);
     if (ref instanceof Agent) {
       ((Agent) ref).getAgentThread().stop();
       ref.setCurrentKernel(null);
       // ref.messageBox=null;
     }
     getCurrentKernel().removeAgentFromOrganizations(traveler);
     getCurrentKernel().removeReferenceOf(traveler);
     message.setSender(getAddress());
     sendDistantMessage(message);
   }
 }
コード例 #3
0
ファイル: SiteAgent.java プロジェクト: Ooya/Robot-Sapiens
 final synchronized void handleNetworkRequest(NetworkRequest m) {
   switch (m.getRequestCode()) {
     case NetworkRequest.INJECT_MESSAGE:
       try {
         Message m2 = (Message) m.getArgument();
         getCurrentKernel().sendLocalMessage(m2);
         if (!(m2 instanceof PrivateMessage))
           kernelAgent.callHooks(Kernel.SEND_MESSAGE, m2.clone());
       } catch (MessageException me) {
         if (getDebug()) System.err.println(me);
       }
       break;
     case NetworkRequest.CONNECTION_REQUEST:
       if (m.getSender().equals(myCommunicator)) {
         establishConnectionWith((AgentAddress) m.getArgument(), true);
         // distantKernels.add(m.getArgument());
       }
       break;
     case NetworkRequest.DECONNECTED_FROM:
       distantKernels.remove(m.getArgument());
       deconnection((String) m.getArgument());
       break;
     case NetworkRequest.BE_COMMUNICATOR:
       if (myCommunicator == null) {
         redisplayMyGUI();
         myCommunicator = m.getSender();
       }
       break;
     case NetworkRequest.STOP_COMMUNICATOR:
       if (myCommunicator != null && myCommunicator.equals(m.getSender())) {
         disposeMyGUI();
         myCommunicator = null;
         for (Iterator i = organizations.entrySet().iterator(); i.hasNext(); ) {
           Map.Entry e = (Map.Entry) i.next();
           Organization org = (Organization) e.getValue();
           if (org.removeDistantAgents()) {
             // communities.leaveGroup(getAddress(), (String) e.getKey());
             leaveGroup("communities", (String) e.getKey());
             i.remove();
           }
         }
         distantKernels.clear();
         System.gc();
         System.runFinalization();
       }
       break;
     case NetworkRequest.GET_AVAILABLE_DESTINATIONS:
       KernelAddress[] destinations = new KernelAddress[distantKernels.size()];
       int j = 0;
       for (Iterator i = distantKernels.iterator(); i.hasNext(); j++)
         destinations[j] = ((AgentAddress) i.next()).getKernel();
       sendMessage(
           m.getSender(),
           new NetworkRequest(NetworkRequest.GET_AVAILABLE_DESTINATIONS, destinations));
       break;
     case NetworkRequest.REQUEST_MIGRATION:
       if (getDebug()) println("receiving a migration request of " + m.getSender());
       // kernelAgent.callsHook(Kernel.MIGRATION...	à rajouter
       tryMigration((KernelAddress) m.getArgument(), m.getSender());
       break;
   }
 }