@Override
 public void buddyChat(int[] recipientCharacterIds, int cidFrom, String nameFrom, String chattext)
     throws RemoteException {
   for (ChannelWorldInterface cwi : WorldRegistryImpl.getInstance().getAllChannelServers()) {
     cwi.buddyChat(recipientCharacterIds, cidFrom, nameFrom, chattext);
   }
 }
예제 #2
0
파일: MapleGuild.java 프로젝트: opencat/Nin
  // multi-purpose function that reaches every member of guild (except the character with
  // exceptionId) in all channels with as little access to rmi as possible
  public final void broadcast(final MaplePacket packet, final int exceptionId, final BCOp bcop) {
    final WorldRegistryImpl wr = WorldRegistryImpl.getInstance();
    final Set<Integer> chs = wr.getChannelServer();

    lock.lock();
    try {
      buildNotifications();

      try { // now call the channelworldinterface
        for (final Integer ch : chs) {
          final ChannelWorldInterface cwi = wr.getChannel(ch);
          if (notifications.get(ch).size() > 0) {
            if (bcop == BCOp.DISBAND) {
              cwi.setGuildAndRank(notifications.get(ch), 0, 5, exceptionId);
            } else if (bcop == BCOp.EMBLEMCHANGE) {
              cwi.changeEmblem(id, notifications.get(ch), new MapleGuildSummary(this));
            } else {
              cwi.sendPacket(notifications.get(ch), packet, exceptionId);
            }
          }
        }
      } catch (RemoteException re) {
        System.err.println("Failed to contact channel(s) for broadcast." + re);
      }
    } finally {
      lock.unlock();
    }
  }
 // TODO only notify channels where partymembers are?
 public void updateParty(int partyid, PartyOperation operation, MaplePartyCharacter target)
     throws RemoteException {
   MapleParty party = WorldRegistryImpl.getInstance().getParty(partyid);
   if (party == null) {
     throw new IllegalArgumentException("no party with the specified partyid exists");
   }
   switch (operation) {
     case JOIN:
       party.addMember(target);
       break;
     case EXPEL:
     case LEAVE:
       party.removeMember(target);
       break;
     case DISBAND:
       WorldRegistryImpl.getInstance().disbandParty(partyid);
       break;
     case SILENT_UPDATE:
     case LOG_ONOFF:
       party.updateMember(target);
       break;
     default:
       throw new RuntimeException("Unhandeled updateParty operation " + operation.name());
   }
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       cwi.updateParty(party, operation, target);
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
 }
 public void declineChat(String target, String namefrom) throws RemoteException {
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       cwi.declineChat(target, namefrom);
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
 }
 public void broadcastMessage(String sender, byte[] message) throws RemoteException {
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       cwi.broadcastMessage(sender, message);
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
 }
 public void loggedOn(String name, int characterId, int channel, int[] buddies)
     throws RemoteException {
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       cwi.loggedOn(name, characterId, channel, buddies);
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
 }
 public void whisper(String sender, String target, int channel, String message)
     throws RemoteException {
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       cwi.whisper(sender, target, channel, message);
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
 }
 public void messengerInvite(String sender, int messengerid, String target, int fromchannel)
     throws RemoteException {
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       cwi.messengerInvite(sender, messengerid, target, fromchannel);
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
 }
 public void serverReady() throws RemoteException {
   ready = true;
   for (LoginWorldInterface wli : WorldRegistryImpl.getInstance().getLoginServer()) {
     try {
       wli.channelOnline(cb.getChannelId(), cb.getIP());
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterLoginServer(wli);
     }
   }
   log.info("Channel {} is online.", cb.getChannelId());
 }
 @Override
 public CharacterIdChannelPair[] multiBuddyFind(int charIdFrom, int[] characterIds)
     throws RemoteException {
   List<CharacterIdChannelPair> foundsChars =
       new ArrayList<CharacterIdChannelPair>(characterIds.length);
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     for (int charid : cwi.multiBuddyFind(charIdFrom, characterIds)) {
       foundsChars.add(new CharacterIdChannelPair(charid, i));
     }
   }
   return foundsChars.toArray(new CharacterIdChannelPair[foundsChars.size()]);
 }
 public String getIP(int channel) throws RemoteException {
   ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(channel);
   if (cwi == null) {
     return "0.0.0.0:0";
   } else {
     try {
       return cwi.getIP();
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(channel);
       return "0.0.0.0:0";
     }
   }
 }
 public boolean isConnected(String charName) throws RemoteException {
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       if (cwi.isConnected(charName)) {
         return true;
       }
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
   return false;
 }
 public List<CheaterData> getCheaters() throws RemoteException {
   List<CheaterData> allCheaters = new ArrayList<CheaterData>();
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       allCheaters.addAll(cwi.getCheaters());
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
   Collections.sort(allCheaters);
   return CollectionUtil.copyFirst(allCheaters, 10);
 }
 public WorldLocation getLocation(String charName) throws RemoteException {
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       if (cwi.isConnected(charName)) {
         return new WorldLocation(cwi.getLocation(charName), cwi.getChannelId());
       }
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
   return null;
 }
  public void updateMessenger(int messengerid, String namefrom, int fromchannel)
      throws RemoteException {
    MapleMessenger messenger = WorldRegistryImpl.getInstance().getMessenger(messengerid);
    int position = messenger.getPositionByName(namefrom);

    for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
      ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
      try {
        cwi.updateMessenger(messenger, namefrom, position, fromchannel);
      } catch (RemoteException e) {
        WorldRegistryImpl.getInstance().deregisterChannelServer(i);
      }
    }
  }
 // can we generify this
 @Override
 public int find(int characterId) throws RemoteException {
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       if (cwi.isConnected(characterId)) {
         return cwi.getChannelId();
       }
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
   return -1;
 }
 public void messengerChat(int messengerid, String chattext, String namefrom)
     throws RemoteException {
   MapleMessenger messenger = WorldRegistryImpl.getInstance().getMessenger(messengerid);
   if (messenger == null) {
     throw new IllegalArgumentException("No messenger with the specified messengerid exists");
   }
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       cwi.messengerChat(messenger, chattext, namefrom);
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
 }
 @Override
 public void partyChat(int partyid, String chattext, String namefrom) throws RemoteException {
   MapleParty party = WorldRegistryImpl.getInstance().getParty(partyid);
   if (party == null) {
     throw new IllegalArgumentException("no party with the specified partyid exists");
   }
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       cwi.partyChat(party, chattext, namefrom);
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
 }
 public Map<Integer, Integer> getConnected() throws RemoteException {
   Map<Integer, Integer> ret = new HashMap<Integer, Integer>();
   int total = 0;
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       int curConnected = cwi.getConnected();
       ret.put(i, curConnected);
       total += curConnected;
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
   ret.put(0, total);
   return ret;
 }
 public void shutdown(int time) throws RemoteException {
   for (LoginWorldInterface lwi : WorldRegistryImpl.getInstance().getLoginServer()) {
     try {
       lwi.shutdown();
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterLoginServer(lwi);
     }
   }
   for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
     ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
     try {
       cwi.shutdown(time);
     } catch (RemoteException e) {
       WorldRegistryImpl.getInstance().deregisterChannelServer(i);
     }
   }
 }
  public void joinMessenger(
      int messengerid, MapleMessengerCharacter target, String from, int fromchannel)
      throws RemoteException {
    MapleMessenger messenger = WorldRegistryImpl.getInstance().getMessenger(messengerid);
    if (messenger == null) {
      throw new IllegalArgumentException("No messenger with the specified messengerid exists");
    }
    messenger.addMember(target);

    for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
      ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
      try {
        cwi.addMessengerPlayer(messenger, from, fromchannel, target.getPosition());
      } catch (RemoteException e) {
        WorldRegistryImpl.getInstance().deregisterChannelServer(i);
      }
    }
  }
  public void leaveMessenger(int messengerid, MapleMessengerCharacter target)
      throws RemoteException {
    MapleMessenger messenger = WorldRegistryImpl.getInstance().getMessenger(messengerid);
    if (messenger == null) {
      throw new IllegalArgumentException("No messenger with the specified messengerid exists");
    }
    int position = messenger.getPositionByName(target.getName());
    messenger.removeMember(target);

    for (int i : WorldRegistryImpl.getInstance().getChannelServer()) {
      ChannelWorldInterface cwi = WorldRegistryImpl.getInstance().getChannel(i);
      try {
        cwi.removeMessengerPlayer(messenger, position);
      } catch (RemoteException e) {
        WorldRegistryImpl.getInstance().deregisterChannelServer(i);
      }
    }
  }