• #by-own #raspberrypi #developRobot

Kapitel 17: Der Base Controller - Anbieten der Website

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();
		}
	}

}

 

© 2019 by-own