first working version with event reception in kanban
This commit is contained in:
@@ -1,21 +1,26 @@
|
||||
/* © SRSoftware 2025 */
|
||||
package de.srsoftware.umbrella.messagebus;
|
||||
|
||||
import de.srsoftware.umbrella.core.model.UmbrellaUser;
|
||||
import static de.srsoftware.umbrella.core.Constants.USER;
|
||||
|
||||
public abstract class Event<Payload> {
|
||||
import de.srsoftware.tools.Mappable;
|
||||
import de.srsoftware.umbrella.core.model.UmbrellaUser;
|
||||
import java.util.Map;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public abstract class Event<Payload extends Mappable> {
|
||||
|
||||
public enum EventType {
|
||||
CREATE,
|
||||
UPDATE,
|
||||
DELETE;
|
||||
}
|
||||
|
||||
}
|
||||
private UmbrellaUser initiator;
|
||||
|
||||
private String realm;
|
||||
private Payload payload;
|
||||
private EventType eventType;
|
||||
|
||||
public Event(UmbrellaUser initiator, String realm, Payload payload, EventType type){
|
||||
this.initiator = initiator;
|
||||
this.realm = realm;
|
||||
@@ -27,7 +32,21 @@ public abstract class Event<Payload> {
|
||||
return eventType.toString();
|
||||
}
|
||||
|
||||
public abstract String json();
|
||||
public abstract boolean isIntendedFor(UmbrellaUser user);
|
||||
|
||||
public String json(){
|
||||
Class<?> clazz = payload.getClass();
|
||||
{ // get the highest superclass that is not object
|
||||
Class<?> parent = clazz.getSuperclass();
|
||||
|
||||
while (parent != null && parent != Object.class) {
|
||||
clazz = parent;
|
||||
parent = clazz.getSuperclass();
|
||||
}
|
||||
}
|
||||
var map = Map.of(USER,initiator.toMap(),clazz.getSimpleName().toLowerCase(),payload.toMap());
|
||||
return new JSONObject(map).toString();
|
||||
}
|
||||
|
||||
public Payload payload(){
|
||||
return payload;
|
||||
|
||||
@@ -5,7 +5,6 @@ import static de.srsoftware.umbrella.messagebus.MessageBus.messageBus;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Objects;
|
||||
|
||||
public class EventQueue extends LinkedList<Event> implements AutoCloseable, EventListener {
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ package de.srsoftware.umbrella.messagebus;
|
||||
import static de.srsoftware.umbrella.core.Constants.*;
|
||||
import static de.srsoftware.umbrella.core.ModuleRegistry.userService;
|
||||
import static java.lang.System.Logger.Level.*;
|
||||
import static java.lang.Thread.sleep;
|
||||
import static java.net.HttpURLConnection.HTTP_OK;
|
||||
|
||||
import com.sun.net.httpserver.HttpExchange;
|
||||
@@ -13,7 +14,6 @@ import de.srsoftware.tools.SessionToken;
|
||||
import de.srsoftware.umbrella.core.BaseHandler;
|
||||
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
|
||||
import de.srsoftware.umbrella.core.model.Token;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.net.InetSocketAddress;
|
||||
@@ -42,14 +42,16 @@ public class MessageApi extends BaseHandler{
|
||||
LOG.log(INFO,"{0} opened event stream.",addr);
|
||||
var counter = 0;
|
||||
while (!stream.checkError()){
|
||||
Thread.sleep(100);
|
||||
sleep(100);
|
||||
if (eventQueue.isEmpty()){
|
||||
if (++counter > 300) counter = sendBeacon(addr,stream);
|
||||
} else {
|
||||
var elem = eventQueue.remove(0);
|
||||
LOG.log(DEBUG,"sending event to {0}",addr);
|
||||
sendEvent(stream,elem);
|
||||
counter = 0;
|
||||
var event = eventQueue.removeFirst();
|
||||
//if (event.isIntendedFor(user.get())) {
|
||||
LOG.log(DEBUG, "sending event to {0}", addr);
|
||||
sendEvent(stream, event);
|
||||
counter = 0;
|
||||
//}
|
||||
}
|
||||
}
|
||||
LOG.log(INFO,"{0} disconnected from event stream.",addr);
|
||||
|
||||
@@ -5,15 +5,18 @@ import static de.srsoftware.umbrella.core.Constants.TASK;
|
||||
|
||||
import de.srsoftware.umbrella.core.model.Task;
|
||||
import de.srsoftware.umbrella.core.model.UmbrellaUser;
|
||||
import org.json.JSONObject;
|
||||
|
||||
|
||||
public class TaskEvent extends Event<Task>{
|
||||
public TaskEvent(UmbrellaUser initiator, Task task, EventType type){
|
||||
super(initiator,TASK, task, type);
|
||||
super(initiator, TASK, task, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String json() {
|
||||
return new JSONObject(payload().toMap()).toString();
|
||||
public boolean isIntendedFor(UmbrellaUser user) {
|
||||
for (var member : payload().members().values()){
|
||||
if (member.user().equals(user)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user