Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ProxyMessageProcessor {
- private static HashMap<Integer, Class<? extends ProxyMessage>> messages = new HashMap<>();
- private static HashMap<Integer, Class<? extends ProxyMessageHandler>> handlers = new HashMap<>();
- public static void register(int id, Class<? extends ProxyMessage> msg, Class<? extends ProxyMessageHandler> handler){
- messages.put(id, msg);
- handlers.put(id, handler);
- }
- public static void process(int id, ByteArrayDataInput message){
- Class msgClass = messages.get(id);
- Class hClass = handlers.get(id);
- try {
- ProxyMessageHandler handler = (ProxyMessageHandler) hClass.newInstance();
- ProxyMessage msg = (ProxyMessage) msgClass.newInstance();
- msg.fromBytes(message);
- handler.onMessage(msg); // Unchecked call
- } catch (InstantiationException | IllegalAccessException e) {
- e.printStackTrace();
- }
- }
- public static byte[] toBytes(ProxyMessage msg){
- ByteArrayDataOutput out = ByteStreams.newDataOutput();
- out.writeInt(getMessageId(msg));
- msg.toBytes(out);
- return out.toByteArray();
- }
- private static int getMessageId(ProxyMessage msg){
- for(Map.Entry<Integer, Class<? extends ProxyMessage>> entry : messages.entrySet()){
- if(entry.getValue() == msg.getClass()){
- return entry.getKey();
- }
- }
- return -1;
- }
- public static void sendMessage(String proxy, ProxyMessage message){
- byte[] messageBytes = toBytes(message);
- if(proxy == null || proxy.equalsIgnoreCase("")){
- BungeeManager.instance.communicator.sendToAll(messageBytes);
- }
- else if(proxy.equalsIgnoreCase("master")){
- BungeeManager.instance.communicator.sendToMaster(messageBytes);
- } else {
- BungeeManager.instance.communicator.sendToProxy(proxy, messageBytes);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment