Skip to content
Snippets Groups Projects
Select Git revision
  • 2cad7c8fd0e13d4b53f67c00fd2e4c43c194a045
  • master default protected
2 results

gradle.properties

Blame
  • JavaHandler.jadd 3.51 KiB
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.function.Consumer;
    
    aspect JavaHandler {
    
        /**
         * Singleton class providing routing functionality for byte[] based message calls.
         */
        public class JavaHandler {
    
            public static JavaHandler JAVA_HANDLER_INSTANCE = null;
    
            private final org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(JavaHandler.class);
    
            private Map<String, List<org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>>>> callbackList = new ConcurrentHashMap<>();
    
            private JavaHandler() {
    
            }
    
            public synchronized static JavaHandler getInstance() {
                if(JAVA_HANDLER_INSTANCE == null) {
                    JAVA_HANDLER_INSTANCE = new JavaHandler();
                }
                return JAVA_HANDLER_INSTANCE;
            }
    
            public String registerCallback(String topic, Consumer<byte[]> callback) {
    
                logger.debug("[JAVA_HANDLER] Registering new callback.");
    
                String callbackUUID = java.util.UUID.randomUUID().toString();
    
                List<org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>>> registeredCallbacks = getAllCallbacks().get(topic);
    
                if(registeredCallbacks == null){
                    List<org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>>> newCallbackList = Collections.synchronizedList(new ArrayList<>());
                    newCallbackList.add(new org.apache.commons.lang3.tuple.MutablePair<>(callbackUUID, callback));
                    callbackList.put(topic, newCallbackList);
                } else {
                    registeredCallbacks.add(new org.apache.commons.lang3.tuple.MutablePair<>(callbackUUID, callback));
                }
    
                return callbackUUID;
            }
    
            public boolean unregisterCallback(String path, String uuid){
    
                logger.debug("[JAVA_HANDLER] Unregistering callback with uuid: " + uuid + " on path: " + path);
    
                List<org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>>> callbacks = getAllCallbacks().get(path);
    
                int count = 0;
    
                if(callbacks != null){
                    for(org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>> callbackPair : callbacks){
                        if(callbackPair.getLeft().equals(uuid)){
                            callbacks.remove(count);
                            return true;
                        }else{
                            count++;
                        }
                    }
                }
                return false;
            }
    
            public void close(){};
    
            public boolean push(String topic, byte[] data) {
    
                logger.debug("[JAVA_HANDLER] Pushing a message.");
    
                List<org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>>> callbacks = getAllCallbacks().get(topic);
    
                if(callbacks == null){
                    logger.error("[JAVA_HANDLER] Could not publish message. No callback registered for topic " + topic);
                    return false;
                }
    
                for(org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>> callbackPair : callbacks){
                    logger.debug("[JAVA_HANDLER] Calling callback: " + callbackPair.getLeft());
                    callbackPair.getRight().accept(data);
                }
    
                return true;
            }
    
            public Map<String, List<org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>>>> getAllCallbacks() {
                return callbackList;
            }
        }
    }