![JAR search and dependency download from the Maven repository](/logo.png)
org.bdware.doip.NaiveBroker Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of doip-audit-tool Show documentation
Show all versions of doip-audit-tool Show documentation
doip audit tool developed by bdware
package org.bdware.doip;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import org.bdware.doip.audit.AuditDoaClient;
import org.bdware.doip.audit.client.AuditDoipClient;
import org.bdware.doip.codec.doipMessage.DoipMessage;
import org.bdware.doip.codec.doipMessage.DoipMessageFactory;
import org.bdware.doip.codec.doipMessage.DoipResponseCode;
import org.bdware.doip.endpoint.event.EventBroker;
import java.util.HashSet;
import java.util.Set;
public class NaiveBroker implements EventBroker {
RocksDBUtil storage;
AuditDoaClient doaClient;
public NaiveBroker(String path, AuditDoaClient client) {
this.storage = RocksDBUtil.loadDB(path, false);
this.doaClient = client;
}
private JsonElement getAsJson(String key, JsonElement defaultValue) {
String content = storage.get(key);
try {
if (null != content && !content.isEmpty()) {
return JsonParser.parseString(content);
}
} catch (Exception e) {
e.printStackTrace();
}
return defaultValue;
}
@Override
public DoipMessage publish(DoipMessage request) {
String topicId = request.header.parameters.attributes.get("topicId").getAsString();
JsonArray subscribers = getAsJson(topicId, new JsonArray()).getAsJsonArray();
Set sent = new HashSet<>();
subscribers.forEach(je -> {
String id = je.getAsString();
AuditDoipClient client = getOrCreateConnection(id);
if (!sent.contains(id)) {
sent.add(id);
client.sendMessage(request, null);
}
});
DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder();
builder.createResponse(DoipResponseCode.Success, request);
return builder.create();
}
private AuditDoipClient getOrCreateConnection(String subscriberId) {
return doaClient.convertDoidToRepo(subscriberId);
}
@Override
public DoipMessage subscribe(DoipMessage request) {
String topicId = request.header.parameters.attributes.get("topicId").getAsString();
String subscriberId = request.header.parameters.attributes.get("subscriberId").getAsString();
boolean isSubscribe = request.header.parameters.attributes.has("subscribe") &&
request.header.parameters.attributes.get("subscribe").getAsBoolean();
addOrRemoveSubscribers(topicId, subscriberId, isSubscribe);
DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder();
builder.createResponse(DoipResponseCode.Success, request);
return builder.create();
}
synchronized private void addOrRemoveSubscribers(String topicId, String subscriberId, boolean isAdded) {
JsonArray subscribers = getAsJson(topicId, new JsonArray()).getAsJsonArray();
JsonPrimitive sid = new JsonPrimitive(subscriberId);
if (isAdded) {
if (!subscribers.contains(sid)) {
subscribers.add(sid);
storage.put(topicId, subscribers.toString());
}
} else {
if (subscribers.contains(sid)) {
subscribers.remove(sid);
storage.put(topicId, subscribers.toString());
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy