Im Base-Controller werden die Endpunkte für die Anwendung definiert und die Website an den Client ausgespielt. Zudem wird hier noch beim starten der Anwendung alle Threads und eine Verbindung zum Python-Websocket Server hergestellt.
package diy.robot.controller;
import diy.robot.domain.KeyMap;
import diy.robot.domain.SocketMessage;
import diy.robot.python.KeyMapValuesSenderToPython;
import diy.robot.websocketClients.PythonWebSocketClient;
import diy.robot.websocketClients.StompWebSocketClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessageSendingOperations;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.net.URI;
import javax.annotation.PostConstruct;
@Controller
@Slf4j
public class BaseController {
private static PythonWebSocketClient client;
@Autowired
private SimpMessageSendingOperations messagingTemplate;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index(Model model) {
StompWebSocketClient.setMessagingTemplate(messagingTemplate);
if (client.isClosed()) {
connectWSClientToPythonWebsocket();
}
return "index";
}
@MessageMapping("/stompMessage") // "/app/direction"
@SendTo("/topic/stompMessage")
public void stompMessenger(SocketMessage msg) throws Exception {
String[] keyEvent = msg.getContent().split(":");
log.info("Recieving data from WebClient: " + msg.getContent());
KeyMap.setKey(keyEvent[0], keyEvent[1].equals("pressed"));
KeyMapValuesSenderToPython.sendPythonCommand(KeyMap.getDirection(), 50); //
}
public static void sendMessageOnPythonWS(String msg) {
if (client.isClosed()) {
connectWSClientToPythonWebsocket();
}
log.info("Sending Command to Python Websocket Server");
log.info("Client isOpen: " + client.isOpen());
client.send(msg);
}
@PostConstruct
private static void connectWSClientToPythonWebsocket() {
try {
log.error("Try new Connsection!!!");
if (client == null) {
client = new PythonWebSocketClient(new URI("ws://localhost:9000"));
client.connectBlocking();
} else {
client.reconnectBlocking();
}
client.setConnectionLostTimeout(7);
client.send("Name:Java");
} catch (Exception e) {
e.printStackTrace();
}
}
}