2019-09-15 15:03:44 -04:00
|
|
|
package com.chameleonvision.web;
|
2019-09-10 23:47:06 +03:00
|
|
|
|
2019-09-15 15:03:44 -04:00
|
|
|
import com.chameleonvision.settings.SettingsManager;
|
2019-09-15 15:22:52 -04:00
|
|
|
import com.chameleonvision.vision.Pipeline;
|
2019-09-10 23:47:06 +03:00
|
|
|
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
|
|
|
|
2019-09-10 23:47:06 +03:00
|
|
|
public class Server {
|
2019-09-11 20:28:56 +03:00
|
|
|
private static List<WsContext> users = new ArrayList<WsContext>();
|
2019-09-10 23:47:06 +03:00
|
|
|
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");
|
2019-09-14 12:45:00 +03:00
|
|
|
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-10 23:47:06 +03:00
|
|
|
}
|
2019-09-11 20:28:56 +03:00
|
|
|
|
2019-09-15 01:55:29 +03:00
|
|
|
|
2019-09-10 23:47:06 +03:00
|
|
|
}
|