Skip to content
Snippets Groups Projects

Feature: JavaHandler

Merged René Schöne requested to merge feature/java-handler into dev
5 files
+ 40
41
Compare changes
  • Side-by-side
  • Inline
Files
5
@@ -3,7 +3,8 @@
*/
public class JavaHandler {
public static JavaHandler JAVA_HANDLER_INSTANCE = null;
private java.util.Map<String, java.util.List<Pair<String, java.util.function.BiConsumer<String, byte[]>>>> callbackList = new java.util.concurrent.ConcurrentHashMap<>();
private java.util.Map<String, java.util.List<java.util.function.BiConsumer<String, byte[]>>> callbackList = new java.util.concurrent.ConcurrentHashMap<>();
private final java.util.Map<RagConnectToken, java.util.function.BiConsumer<String, byte[]>> tokensForRemoval = new java.util.HashMap<>();
private String name;
private JavaHandler() {
@@ -21,68 +22,58 @@ public class JavaHandler {
return JAVA_HANDLER_INSTANCE;
}
public String registerCallback(String topic, java.util.function.BiConsumer<String, byte[]> callback) {
{{logInfo}}("[JAVA_HANDLER] Registering new callback for {{log_}}.", topic);
private static String extractPath(java.net.URI uri) {
String path = uri.getPath();
if (path.charAt(0) == '/') {
path = path.substring(1);
}
return path;
}
String callbackUUID = java.util.UUID.randomUUID().toString();
public boolean registerCallback(RagConnectToken connectToken, java.util.function.BiConsumer<String, byte[]> callback) {
String path = extractPath(connectToken.uri);
{{logInfo}}("[JAVA_HANDLER] Registering new callback for {{log_}}.", path);
java.util.List<Pair<String, java.util.function.BiConsumer<String, byte[]>>> registeredCallbacks = getAllCallbacks().get(topic);
java.util.List<java.util.function.BiConsumer<String, byte[]>> registeredCallbacks = callbackList.get(path);
if (registeredCallbacks == null) {
java.util.List<Pair<String, java.util.function.BiConsumer<String, byte[]>>> newCallbackList = java.util.Collections.synchronizedList(new java.util.ArrayList<>());
newCallbackList.add(new Pair<>(callbackUUID, callback));
callbackList.put(topic, newCallbackList);
} else {
registeredCallbacks.add(new Pair<>(callbackUUID, callback));
registeredCallbacks = java.util.Collections.synchronizedList(new java.util.ArrayList<>());
callbackList.put(path, registeredCallbacks);
}
registeredCallbacks.add(callback);
tokensForRemoval.put(connectToken, callback);
return callbackUUID;
return true;
}
public boolean unregisterCallback(String path, String uuid) {
{{logInfo}}("[JAVA_HANDLER] Unregistering callback with uuid: {{log_}}", uuid + " on path: {{log_}}", path);
java.util.List<Pair<String, java.util.function.BiConsumer<String, byte[]>>> callbacks = getAllCallbacks().get(path);
public boolean unregisterCallback(RagConnectToken connectToken) {
String path = extractPath(connectToken.uri);
java.util.function.BiConsumer<String, byte[]> callback = tokensForRemoval.get(connectToken);
{{logInfo}}("[JAVA_HANDLER] Unregistering callback with uuid: on path: {{log_}}", path);
int count = 0;
if (callbacks != null) {
for (Pair<String, java.util.function.BiConsumer<String, byte[]>> callbackPair : callbacks) {
if (callbackPair._1.equals(uuid)) {
callbacks.remove(count);
return true;
} else {
count++;
}
}
}
return false;
return callbackList.get(path).remove(callback);
}
public void close() {
}
public boolean push(String topic, byte[] data) {
public boolean push(String path, byte[] data) {
{{logDebug}}("[JAVA_HANDLER] Pushing a message.");
String dataString = new String(data);
{{logDebug}}("[JAVA_HANDLER] Data: {{log_}}", dataString);
java.util.List<Pair<String, java.util.function.BiConsumer<String, byte[]>>> callbacks = getAllCallbacks().get(topic);
java.util.List<java.util.function.BiConsumer<String, byte[]>> callbacks = callbackList.get(path);
if (callbacks == null) {
{{logError}}("[JAVA_HANDLER] Could not publish message. No callback registered for topic {{log_}}", topic);
{{logError}}("[JAVA_HANDLER] Could not publish message. No callback registered for path {{log_}}", path);
return false;
}
for (Pair<String, java.util.function.BiConsumer<String, byte[]>> callbackPair : callbacks) {
{{logDebug}}("[JAVA_HANDLER] Calling callback: {{log_}}", callbackPair._1);
callbackPair._2.accept(topic, data);
for (java.util.function.BiConsumer<String, byte[]> callback : callbacks) {
callback.accept(path, data);
}
return true;
}
public java.util.Map<String, java.util.List<Pair<String, java.util.function.BiConsumer<String, byte[]>>>> getAllCallbacks() {
return callbackList;
}
}
Loading