Files
Tron.io/server/src/main/java/gltronic/tronio/web/SocketHandler.java
2020-09-03 16:13:04 +02:00

66 lines
2.0 KiB
Java

package gltronic.tronio.web;
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import gltronic.tronio.business.IGameManager;
import gltronic.tronio.business.SocketUtils;
import gltronic.tronio.model.Player;
@Component
public class SocketHandler extends TextWebSocketHandler {
@Autowired
IGameManager gameManager;
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message)
throws InterruptedException, IOException {
// System.err.println("[WS] message :" + message.getPayload());
String payload = message.getPayload();
JSONObject rootObject = new JSONObject(payload);
String type = rootObject.getString("type");
switch (type) {
case "login":
gameManager.login(session, rootObject.getString("message"));
break;
case "respawn":
gameManager.respawn(session);
break;
case "update":
Player player = new ObjectMapper().readValue(rootObject.get("message").toString(), Player.class);
gameManager.updatePlayer(session, player);
break;
default:
SocketUtils.sendMessage(session, "error", "unknow command");
}
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
System.err.println("[WS] new connection " + this);
// gameManager.login(session);
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) {
System.err.println("[WS] connection closed");
try {
gameManager.leave(session);
} catch (InterruptedException | IOException e) {
e.printStackTrace();
}
}
}