diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fb3a5ccb5f43a8339f349324f764d3648b58f1e7..893df192c063bb957d18edd52c7eed8465a934ca 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,7 +3,7 @@ variables: stages: - build -- publish +# - publish before_script: - export GRADLE_USER_HOME=`pwd`/.gradle diff --git a/ragconnect.base/src/main/resources/JavaHandler.jadd b/ragconnect.base/src/main/resources/JavaHandler.jadd new file mode 100644 index 0000000000000000000000000000000000000000..86a81b7b9ca7aede273612d8fd737829f2a632ea --- /dev/null +++ b/ragconnect.base/src/main/resources/JavaHandler.jadd @@ -0,0 +1,70 @@ +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 CallBackRouter { + + public static org.jastadd.ragconnect.jrouter.CallBackRouter ROUTER_INSTANCE = null; + + private final org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(org.jastadd.ragconnect.jrouter.CallBackRouter.class); + + private Map<String, List<Consumer<byte[]>>> callbackList = new ConcurrentHashMap<>(); + + private CallBackRouter() { + + } + + public synchronized static org.jastadd.ragconnect.jrouter.CallBackRouter getInstance() { + if(ROUTER_INSTANCE == null) { + ROUTER_INSTANCE = new org.jastadd.ragconnect.jrouter.CallBackRouter(); + } + return ROUTER_INSTANCE; + } + + public void registerCallback(Consumer<byte[]> callback, String topic) { + + logger.debug("[ROUTER] Registering new callback."); + + List<Consumer<byte[]>> registeredCallbacks = getAllCallbacks().get(topic); + + if(registeredCallbacks == null){ + List<Consumer<byte[]>> newCallbackList = Collections.synchronizedList(new ArrayList<>()); + newCallbackList.add(callback); + callbackList.put(topic, newCallbackList); + } else { + registeredCallbacks.add(callback); + } + } + + public boolean push(String topic, byte[] data) { + + logger.debug("[ROUTER] Pushing a message."); + + List<Consumer<byte[]>> callbacks = getAllCallbacks().get(topic); + + if(callbacks == null){ + logger.error("[ROUTER] Could not publish message. No callback registered for topic " + topic); + return false; + } + + for(Consumer<byte[]> callback : callbacks){ + logger.debug("[ROUTER] Calling callback: " + callback.toString()); + callback.accept(data); + } + + return true; + } + + public Map<String, List<Consumer<byte[]>>> getAllCallbacks() { + return callbackList; + } + } +} \ No newline at end of file