mrkirby153

Untitled

Dec 29th, 2015
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.98 KB | None | 0 0
  1. public class ProxyMessageProcessor {
  2.  
  3.     private static HashMap<Integer, Class<? extends ProxyMessage>> messages = new HashMap<>();
  4.     private static HashMap<Integer, Class<? extends ProxyMessageHandler>> handlers = new HashMap<>();
  5.  
  6.     public static void register(int id, Class<? extends ProxyMessage> msg, Class<? extends ProxyMessageHandler> handler){
  7.         messages.put(id, msg);
  8.         handlers.put(id, handler);
  9.     }
  10.  
  11.     public static void process(int id, ByteArrayDataInput message){
  12.         Class msgClass = messages.get(id);
  13.         Class hClass = handlers.get(id);
  14.         try {
  15.             ProxyMessageHandler handler = (ProxyMessageHandler) hClass.newInstance();
  16.             ProxyMessage msg = (ProxyMessage) msgClass.newInstance();
  17.             msg.fromBytes(message);
  18.             handler.onMessage(msg); // Unchecked call
  19.         } catch (InstantiationException | IllegalAccessException e) {
  20.             e.printStackTrace();
  21.         }
  22.     }
  23.  
  24.     public static byte[] toBytes(ProxyMessage msg){
  25.         ByteArrayDataOutput out = ByteStreams.newDataOutput();
  26.         out.writeInt(getMessageId(msg));
  27.         msg.toBytes(out);
  28.         return out.toByteArray();
  29.     }
  30.  
  31.     private static int getMessageId(ProxyMessage msg){
  32.         for(Map.Entry<Integer, Class<? extends ProxyMessage>> entry : messages.entrySet()){
  33.             if(entry.getValue() == msg.getClass()){
  34.                 return entry.getKey();
  35.             }
  36.         }
  37.         return -1;
  38.     }
  39.  
  40.     public static void sendMessage(String proxy, ProxyMessage message){
  41.         byte[] messageBytes = toBytes(message);
  42.         if(proxy == null || proxy.equalsIgnoreCase("")){
  43.             BungeeManager.instance.communicator.sendToAll(messageBytes);
  44.         }
  45.         else if(proxy.equalsIgnoreCase("master")){
  46.             BungeeManager.instance.communicator.sendToMaster(messageBytes);
  47.         } else {
  48.             BungeeManager.instance.communicator.sendToProxy(proxy, messageBytes);
  49.         }
  50.     }
Advertisement
Add Comment
Please, Sign In to add comment