package com.dronecontrol.socketcontrol.entry; import com.dronecontrol.droneapi.DroneController; import com.dronecontrol.droneapi.data.Config; import com.dronecontrol.droneapi.listeners.ErrorListener; import com.dronecontrol.socketcontrol.control.DroneInputController; import com.dronecontrol.socketcontrol.input.SocketController; import com.dronecontrol.socketcontrol.ui.FxController; import com.dronecontrol.socketcontrol.ui.FxWindow; import com.dronecontrol.socketcontrol.ui.data.UIAction; import com.dronecontrol.socketcontrol.ui.listeners.UIActionListener; import com.google.inject.Inject; import javafx.stage.Stage; import org.apache.log4j.Logger; public class Main implements ErrorListener, UIActionListener { private final Logger logger = Logger.getLogger(ErrorListener.class); private final FxWindow fxWindow; private final DroneController droneController; private final SocketController socketController; private final DroneInputController droneInputController; private FxController fxController; @Inject public Main(FxWindow fxWindow, DroneController droneController, SocketController socketController, DroneInputController droneInputController) { this.fxWindow = fxWindow; this.droneController = droneController; this.socketController = socketController; this.droneInputController = droneInputController; } public void start(Stage primaryStage) { startWindow(primaryStage); addEventListeners(); startComponents(); } private void startWindow(Stage primaryStage) { fxController = fxWindow.start(primaryStage); } private void addEventListeners() { droneController.addErrorListener(this); fxController.addUIActionListener(this); droneController.addVideoDataListener(fxController); droneController.addNavDataListener(fxController); droneController.addNavDataListener(droneInputController); droneController.addNavDataListener(socketController); droneController.addReadyStateChangeListener(droneInputController); socketController.addMovementDataListener(droneInputController); socketController.addMovementDataListener(fxController); socketController.addPilotActionListener(droneInputController); fxController.addUIActionListener(droneInputController); } private void startComponents() { droneController.startAsync(new Config("com.dronecontrol.leap-drone", "myProfile", 2)); socketController.start(); } public void stop() { droneController.stop(); socketController.stop(); System.exit(0); } @Override public void onError(Throwable e) { logger.error("There was an error", e); System.exit(1); } @Override public void onAction(UIAction action) { if (action == UIAction.CLOSE_APPLICATION) { stop(); } } }