Files
PhotonVision/Main/src/main/java/com/chameleonvision/web/Server.java

66 lines
2.2 KiB
Java
Raw Normal View History

package com.chameleonvision.web;
import com.chameleonvision.settings.SettingsManager;
import com.chameleonvision.vision.Pipeline;
import io.javalin.Javalin;
2019-09-11 20:28:56 +03:00
import io.javalin.websocket.WsContext;
2019-09-15 01:55:29 +03:00
import java.lang.reflect.Field;
2019-09-11 20:28:56 +03:00
import java.util.ArrayList;
import java.util.List;
2019-09-15 01:55:29 +03:00
import org.json.JSONArray;
2019-09-11 20:28:56 +03:00
import org.json.JSONObject;
2019-09-15 01:55:29 +03:00
import org.springframework.beans.BeanUtils;
2019-09-11 20:28:56 +03:00
public class Server {
2019-09-11 20:28:56 +03:00
private static List<WsContext> users = new ArrayList<WsContext>();
public static void main(int port) {
2019-09-11 20:28:56 +03:00
Javalin app = Javalin.create();
app.config.addStaticFiles("web");
app.ws("/websocket", ws ->{
ws.onConnect(ctx -> {
users.add(ctx);
System.out.println("Socket Connected");
});
ws.onClose(ctx -> {
users.remove(ctx);
System.out.println("Socket Disconnected");
SettingsManager.getInstance().SaveSettings();
2019-09-11 20:28:56 +03:00
});
ws.onMessage(ctx -> {
broadcastMessage(ctx, ctx.message());
2019-09-15 01:55:29 +03:00
JSONObject jsonObject = new JSONObject(ctx.message());
String key =jsonObject.keySet().toArray()[0].toString();
Object value = jsonObject.get(key);
System.out.println("Key: "+key+" Value: "+value);
Field[] fields = Pipeline.class.getFields();
for (Field f : fields)
{//TODO: check calibration in output tab for crashes
if(f.getName().equals(key))
{
if(BeanUtils.isSimpleValueType(value.getClass()))
f.set(SettingsManager.getInstance().GetCurrentPipeline(),value);
else
if(value.getClass()==JSONArray.class){
f.set(SettingsManager.getInstance().GetCurrentPipeline(),((JSONArray)value).toList());
}
}
}
2019-09-11 20:28:56 +03:00
});
});
app.start(port);
}
private static void broadcastMessage(WsContext sendingUser, String message){
for (var user : users)
{
if (user != sendingUser){
user.send(message);
}
}
}
2019-09-11 20:28:56 +03:00
2019-09-15 01:55:29 +03:00
}