• #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
Wir benutzen Cookies

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.