Skip to content
Snippets Groups Projects

Merge/dev to fork master merge

2 files
+ 71
1
Compare changes
  • Side-by-side
  • Inline
Files
2
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
Loading