final void handleSynchroMessage(SynchroMessage m) { if (connectedWith(m.community)) { if (!organizations.containsKey(m.community)) { kernelAgent.callHooks(Kernel.NEW_COMMUNITY, m.community); organizations.put(m.community, new Organization()); } Organization localOrg = (Organization) organizations.get(m.community); switch (m.code) { case Kernel.CREATE_GROUP: localOrg.createGroup( m.initiator, true, m.groupName, m.newGroup.getDescription(), m.newGroup.getGroupIdentifier()); kernelAgent.callHooks( Kernel.CREATE_GROUP, new AGRTrio(m.initiator, m.community, m.groupName, null)); break; case Kernel.ADD_MEMBER_ROLE: localOrg.requestRole(m.initiator, m.groupName, m.roleName, m.memberCard); kernelAgent.callHooks( Kernel.ADD_MEMBER_ROLE, new AGRTrio(m.initiator, m.community, m.groupName, m.roleName)); break; case Kernel.LEAVE_GROUP: if (localOrg.leaveGroup(m.initiator, m.groupName)) removeCommunity(m.community); kernelAgent.callHooks( Kernel.LEAVE_GROUP, new AGRTrio(m.initiator, m.community, m.groupName, null)); break; case Kernel.NEW_COMMUNITY: establishConnectionWith(m.getSender(), true); break; case Kernel.DELETE_COMMUNITY: localOrg.removeAgentsFromKernel(m.getSender().getKernel()); if (localOrg.isEmpty()) { removeCommunity(m.community); kernelAgent.callHooks(Kernel.DELETE_COMMUNITY, m.community); } break; case Kernel.REMOVE_MEMBER_ROLE: if (localOrg.leaveRole(m.initiator, m.groupName, m.roleName)) { removeCommunity(m.community); } kernelAgent.callHooks( Kernel.REMOVE_MEMBER_ROLE, new AGRTrio(m.initiator, m.community, m.groupName, m.roleName)); break; case Kernel.MIGRATION: if (getDebug()) System.err.println("receiving a migration " + m.ref.toString()); getCurrentKernel().receiveAgent(m.ref); System.gc(); System.runFinalization(); break; } } else switch (m.code) { case Kernel.NEW_COMMUNITY: kernelAgent.callHooks(Kernel.NEW_COMMUNITY, m.community); System.err.println("new community detected"); if (gui != null) gui.refreshCommunities(); // establishConnectionWith(m.getSender(), true); break; case Kernel.DELETE_COMMUNITY: kernelAgent.callHooks(Kernel.DELETE_COMMUNITY, m.community); System.err.println("a community has been deleted "); // +organizations); if (gui != null) gui.refreshCommunities(); // establishConnectionWith(m.getSender(), true); break; } }