Skip to content

Commit

Permalink
gamalistener, try with json format standardized
Browse files Browse the repository at this point in the history
  • Loading branch information
hqn88 authored and hqn88 committed Apr 29, 2022
1 parent 05324c1 commit b47e22b
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 54 deletions.
23 changes: 21 additions & 2 deletions msi.gama.headless/SimpleWebGIS.html
Expand Up @@ -127,7 +127,17 @@

// socket.send("launch@C:\\GAMA\\configuration\\org.eclipse.osgi\\400\\0\\.cp\\models\\Toy Models\\Traffic\\models\\Simple Traffic Model.gaml@traffic");
// socket.send("launch@C:\\git\\PROJECT\\COMOKIT-Model\\COMOKIT\\Macro\\Models\\Experiments\\LockDown.gaml@lockdown");
socket.send("launch@C:\\git\\PROJECT\\COMOKIT-Model\\COMOKIT\\Meso\\Models\\Experiments\\Lockdown\\LockDown.gaml@Lockdown");
// socket.send("launch@C:\\git\\PROJECT\\COMOKIT-Model\\COMOKIT\\Meso\\Models\\Experiments\\Lockdown\\LockDown.gaml@Lockdown");

// socket.send("launch@/Users/hqn88/git/COMOKIT-Model/COMOKIT/Meso/Models/Experiments/Lockdown/LockDown.gaml@Lockdown");
var cmd = {
'type': 'launch',
'model': '/Users/hqn88/git/COMOKIT-Model/COMOKIT/Meso/Models/Experiments/Lockdown/LockDown.gaml',
'experiment':'Lockdown',
'auto-export':'true'
};

socket.send(JSON.stringify(cmd));
socket.onmessage = function (event) {
exp_compiled = event.data;
if (exp_compiled.startsWith("exp@")) {
Expand All @@ -139,7 +149,16 @@
essential: true,
zoom: 15
});
socket.send("play@" + exp_id);
cmd = {
'type': 'play',
'model': '/Users/hqn88/git/COMOKIT-Model/COMOKIT/Meso/Models/Experiments/Lockdown/LockDown.gaml',
'experiment':'Lockdown',

'id_exp': exp_id,
};
//socket.send("play@" + exp_id);

socket.send(JSON.stringify(cmd));
updateSource = setInterval(() => {
sk.send("output@" + socket_id + "@" + exp_id + "@Individual");
sk.onmessage = function (event) {
Expand Down
131 changes: 79 additions & 52 deletions msi.gama.headless/src/msi/gama/headless/listener/LaunchEndPoint.java
Expand Up @@ -25,6 +25,7 @@
import org.java_websocket.WebSocket;

import msi.gama.common.GamlFileExtension;
import msi.gama.common.interfaces.IKeyword;
import msi.gama.headless.common.Globals;
import msi.gama.headless.core.GamaHeadlessException;
import msi.gama.headless.job.ExperimentJob;
Expand All @@ -34,6 +35,10 @@
import msi.gama.headless.script.ExperimentationPlanFactory;
import msi.gama.metamodel.agent.IAgent;
import msi.gama.metamodel.shape.IShape;
import msi.gama.util.GamaMapFactory;
import msi.gama.util.IMap;
import msi.gama.util.file.json.DeserializationException;
import msi.gama.util.file.json.Jsoner;
import msi.gaml.operators.Spatial;
import ummisco.gama.dev.utils.DEBUG;
import ummisco.gama.network.websocket.Endpoint;
Expand Down Expand Up @@ -152,7 +157,8 @@ public void launchGamlSimulation(final IGamaWebSocketServer server, WebSocket so
((GamaWebSocketServer) server).get_listener().getAllExperiments().put("" + socket.hashCode(), exps);

}
((GamaWebSocketServer) server).get_listener().getExperimentsOf("" + socket.hashCode()).put(selectedJob.getExperimentID(), selectedJob);
((GamaWebSocketServer) server).get_listener().getExperimentsOf("" + socket.hashCode())
.put(selectedJob.getExperimentID(), selectedJob);

final int size = selectedJob.getListenedVariables().length;
// String lst_out = "";
Expand All @@ -179,59 +185,80 @@ public void onMessage(final IGamaWebSocketServer server, final WebSocket socket,
// server.get_listener().broadcast(message);
final String socket_id = "" + socket.hashCode();
System.out.println(socket + ": " + message);
String[] args = message.split("@");
String id_exp = args[1];
switch (args[0]) {
case "launch":
try {
launchGamlSimulation(server, socket, Arrays.asList("-gaml", ".", args[2], args[1]),
args.length > 3 ? false : true);
} catch (IOException | GamaHeadlessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case "play":
System.out.println("play " + id_exp);
if (((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp) != null
&& ((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).getSimulation() != null) {
((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).userStart();
}
break;
case "step":
System.out.println("step " + id_exp);
if (((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp) != null
&& ((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).getSimulation() != null) {
((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).userStep();
}
break;
case "pause":
System.out.println("pause " + id_exp);
if (((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp) != null
&& ((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).getSimulation() != null) {
((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).directPause();
}
break;
case "stop":
System.out.println("stop " + id_exp);
if (((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp) != null
&& ((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).getSimulation() != null) {
((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).directPause();
((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).dispose();
final IMap<String, Object> map;
try {
System.out.println(socket + ": " + Jsoner.deserialize(message));
final Object o = Jsoner.deserialize(message);
if (o instanceof IMap) {
map = (IMap<String, Object>) o;
} else {
map = GamaMapFactory.create();
map.put(IKeyword.CONTENTS, o);
}
break;
case "exit":
System.exit(0);
break;
case "compile":
try {
Globals.IMAGES_PATH = "C:\\GAMA\\headless\\samples\\toto\\snapshot";
compileGamlSimulation(socket, Arrays.asList("-gaml", ".", args[2], args[1]));
} catch (IOException | GamaHeadlessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(map.get("type"));
System.out.println(map.get("model"));
System.out.println(map.get("experiment"));
String id_exp = map.get("id_exp")!=null?map.get("id_exp").toString():"";
switch (map.get("type").toString()) {
case "launch":
try {
launchGamlSimulation(server, socket, Arrays.asList("-gaml", ".", map.get("experiment").toString(), map.get("model").toString()),
Boolean.parseBoolean(map.get("auto-export").toString()) ? false : true);
} catch (IOException | GamaHeadlessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case "play":
System.out.println("play " + id_exp);
if (((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp) != null
&& ((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp)
.getSimulation() != null) {
((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).userStart();
}
break;
case "step":
System.out.println("step " + id_exp);
if (((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp) != null
&& ((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp)
.getSimulation() != null) {
((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).userStep();
}
break;
case "pause":
System.out.println("pause " + id_exp);
if (((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp) != null
&& ((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp)
.getSimulation() != null) {
((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).directPause();
}
break;
case "stop":
System.out.println("stop " + id_exp);
if (((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp) != null
&& ((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp)
.getSimulation() != null) {
((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).directPause();
((GamaWebSocketServer) server).get_listener().getExperiment(socket_id, id_exp).dispose();
}
break;
case "exit":
System.exit(0);
break;
case "compile":
try {
Globals.IMAGES_PATH = "C:\\GAMA\\headless\\samples\\toto\\snapshot";
compileGamlSimulation(socket, Arrays.asList("-gaml", ".", map.get("model").toString(), map.get("experiment").toString()));
} catch (IOException | GamaHeadlessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
break;
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
socket.send(e1.getMessage());
}
}

Expand Down

0 comments on commit b47e22b

Please sign in to comment.