Fix selective send (#90)

* Move VisionSettingsChangeSubscriber to own class

* Use selective sending on simple PSCs

* Fix origin context skip logic
This commit is contained in:
Banks T
2020-08-17 16:20:36 -04:00
committed by GitHub
parent b3436765e1
commit 832d8413e1
11 changed files with 264 additions and 278 deletions

View File

@@ -47,7 +47,7 @@ public abstract class DataChangeSubscriber {
this(DataChangeSource.AllSources, wantedDestinations);
}
public abstract void onDataChangeEvent(DataChangeEvent event);
public abstract void onDataChangeEvent(DataChangeEvent<?> event);
@Override
public int hashCode() {

View File

@@ -21,28 +21,24 @@ import io.javalin.websocket.WsContext;
import java.util.HashMap;
import org.photonvision.common.dataflow.DataChangeDestination;
import org.photonvision.common.dataflow.DataChangeSource;
import org.photonvision.server.UIUpdateType;
public class OutgoingUIEvent<T> extends DataChangeEvent<T> {
public final UIUpdateType updateType;
public final WsContext originContext;
public OutgoingUIEvent(
UIUpdateType updateType, String propertyName, T newValue, WsContext originContext) {
public OutgoingUIEvent(String propertyName, T newValue) {
this(propertyName, newValue, null);
}
public OutgoingUIEvent(String propertyName, T newValue, WsContext originContext) {
super(DataChangeSource.DCS_WEBSOCKET, DataChangeDestination.DCD_UI, propertyName, newValue);
this.updateType = updateType;
this.originContext = originContext;
}
public static OutgoingUIEvent<HashMap<String, Object>> wrappedOf(
UIUpdateType uiUpdateType,
String commandName,
String propertyName,
Object value,
WsContext originContext) {
String commandName, String propertyName, Object value, WsContext originContext) {
HashMap<String, Object> data = new HashMap<>();
data.put(propertyName, value);
return new OutgoingUIEvent<>(uiUpdateType, commandName, data, originContext);
return new OutgoingUIEvent<>(commandName, data, originContext);
}
}

View File

@@ -23,7 +23,6 @@ import org.photonvision.common.dataflow.events.OutgoingUIEvent;
import org.photonvision.common.logging.LogGroup;
import org.photonvision.common.logging.Logger;
import org.photonvision.common.util.TimedTaskManager;
import org.photonvision.server.UIUpdateType;
public class MetricsPublisher {
private final HashMap<String, Double> metrics;
@@ -57,8 +56,7 @@ public class MetricsPublisher {
metrics.put("ramUtil", ramMetrics.getUsedRam());
DataChangeService.getInstance()
.publishEvent(
new OutgoingUIEvent<>(UIUpdateType.BROADCAST, "metrics", metrics, null));
.publishEvent(new OutgoingUIEvent<>("metrics", metrics));
},
1000);
}

View File

@@ -30,7 +30,6 @@ import org.photonvision.common.dataflow.DataChangeService;
import org.photonvision.common.dataflow.events.OutgoingUIEvent;
import org.photonvision.common.util.TimedTaskManager;
import org.photonvision.server.SocketHandler;
import org.photonvision.server.UIUpdateType;
@SuppressWarnings("unused")
public class Logger {
@@ -239,8 +238,7 @@ public class Logger {
messageMap.put("logLevel", level.code);
var superMap = new SocketHandler.UIMap();
superMap.put("logMessage", messageMap);
DataChangeService.getInstance()
.publishEvent(new OutgoingUIEvent<>(UIUpdateType.BROADCAST, "log", superMap, null));
DataChangeService.getInstance().publishEvent(new OutgoingUIEvent<>("log", superMap));
}
}