package com.ev3.brick;
import java.io.IOException;
import java.io.StringReader;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.inject.Inject;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import com.ev3.brick.device.BrickClientEndpoint;
@Singleton
@ServerEndpoint("/commands")
public class BrickCommandsEndpoint {
private Session webSession;
private final Set<Session> webSessions = Collections
.synchronizedSet(new HashSet<>());
@Inject
BrickClientEndpoint brickEndpoint;
@PostConstruct
public void addBrickMessageHandler() {
// brickEndpoint.addMessageHandler(new BrickMessages(this));
}
@OnOpen
public void init(Session session) {
this.webSession = session;
webSessions.add(session);
}
@OnClose
public void close(Session session) {
webSessions.remove(session);
}
@OnMessage
public void execute(String json) {
JsonArray jsonValues = Json.createReader(new StringReader(json))
.readArray();
List<JsonObject> jsonObjects = jsonValues.getValuesAs(JsonObject.class);
jsonObjects.stream().forEach(
jsonObject -> {
jsonObject.getString("id");
CommandWrapper command = new CommandWrapper(
"MoveToLocation", "X,Y");
JsonObject jsonCommand = Json.createObjectBuilder()
.add("command", command.getCommand())
.add("data", command.getData()).build();
try {
brickEndpoint.sendCommand(jsonCommand.toString());
} catch (IOException e) {
e.printStackTrace();
}
});
}
public void sendMessage(String message) {
webSessions.stream().forEach(session -> {
try {
session.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
});
}
}