From 7146f67169d221a987b57c5c986fc594c5012bc8 Mon Sep 17 00:00:00 2001 From: Johannes Wendel Date: Sat, 15 Jun 2019 14:52:42 +0200 Subject: [PATCH] added inputsockethandlerfactory --- FlippR-Driver/CMakeLists.txt | 3 +- FlippR-Driver/cli/CMakeLists.txt | 2 +- FlippR-Driver/networking/CMakeLists.txt | 6 ++-- FlippR-Driver/networking/FlippRServer.cpp | 21 +++++++++--- FlippR-Driver/networking/FlippRServer.h | 1 + .../input/InputSocketHandlerFactory.cpp | 31 +++++++++++++++++ .../input/InputSocketHandlerFactory.h | 33 +++++++++++++++++++ .../networking/output/OutputHTTPServer.cpp | 4 +-- .../networking/output/OutputHTTPServer.h | 2 +- 9 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 FlippR-Driver/networking/input/InputSocketHandlerFactory.cpp create mode 100644 FlippR-Driver/networking/input/InputSocketHandlerFactory.h diff --git a/FlippR-Driver/CMakeLists.txt b/FlippR-Driver/CMakeLists.txt index 38470e2..a297a7c 100644 --- a/FlippR-Driver/CMakeLists.txt +++ b/FlippR-Driver/CMakeLists.txt @@ -16,6 +16,7 @@ set(CMAKE_CXX_STANDARD 14) set(BOOST_COMPONENTS program_options thread timer chrono) +project(FlippR-Driver) ################### CROSS_COMPILING ###################### IF(NOT RPI_ROOT) @@ -74,7 +75,7 @@ file(GLOB_RECURSE SOURCES src/*.cpp) if(BUILD_SHARED_LIB) add_library(${PROJECT_NAME} SHARED ${SOURCES}) else() - add_library(${PROJECT_NAME} STATIC ${SOURCES} cli/OutputInterpreter.cpp cli/OutputInterpreter.h src/output/items/detail/DriverBoardItem.cpp src/output/items/detail/DriverBoardItem.h) + add_library(${PROJECT_NAME} STATIC ${SOURCES} cli/OutputInterpreter.cpp cli/OutputInterpreter.h src/output/items/detail/DriverBoardItem.cpp src/output/items/detail/DriverBoardItem.h include/DriverFactory.h) endif(BUILD_SHARED_LIB) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src) diff --git a/FlippR-Driver/cli/CMakeLists.txt b/FlippR-Driver/cli/CMakeLists.txt index e8fa52e..0c730a4 100644 --- a/FlippR-Driver/cli/CMakeLists.txt +++ b/FlippR-Driver/cli/CMakeLists.txt @@ -5,4 +5,4 @@ set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/${OUTPUT_PATH}/cli) add_executable(${PROJECT_NAME} main.cpp PrintHandler.cpp) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include) -target_link_libraries(${PROJECT_NAME} PRIVATE FlippR-Driver) +target_link_libraries(${PROJECT_NAME} PRIVATE FlippR_Driver) diff --git a/FlippR-Driver/networking/CMakeLists.txt b/FlippR-Driver/networking/CMakeLists.txt index f7b8f0b..9ecf10f 100644 --- a/FlippR-Driver/networking/CMakeLists.txt +++ b/FlippR-Driver/networking/CMakeLists.txt @@ -6,12 +6,14 @@ set(SOURCES input/InputSocketHandler.cpp output/OutputRequestHandler.cpp output/OutputRequestHandlerFactory.cpp - FlippRServer.cpp) + FlippRServer.cpp + input/InputSocketHandlerFactory.cpp) add_executable(${PROJECT_NAME} ${SOURCES}) -target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src) +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include) + target_link_libraries(${PROJECT_NAME} PRIVATE FlippR-Driver) ####################### POCO ############################## diff --git a/FlippR-Driver/networking/FlippRServer.cpp b/FlippR-Driver/networking/FlippRServer.cpp index 54f0f41..c134641 100644 --- a/FlippR-Driver/networking/FlippRServer.cpp +++ b/FlippR-Driver/networking/FlippRServer.cpp @@ -99,8 +99,8 @@ void FlippRServer::initialize_output_driver() exit(EXIT_FAILURE); } - //todo should use DriverFactory from input -// this->input_driver = flippR_driver::get_InputDriver(input_config_stream, matrix_config_stream); + //todo linking errors + this->input_driver = flippR_driver::get_InputDriver(input_config_stream, matrix_config_stream); } int FlippRServer::main(const std::vector& args) @@ -111,7 +111,7 @@ int FlippRServer::main(const std::vector& args) std::unique_ptr output_server(this->build_output_server()); output_server->start(); - std::unique_ptr + std::unique_ptr input_server(this->build_input_server()); waitForTerminationRequest(); this->output_driver->deactivate_all_lamps(); @@ -127,9 +127,20 @@ HTTPServer* FlippRServer::build_output_server() // todo XDG_RUNTIME_DIR SocketAddress address("/tmp/flippR_driver/S.flippR_driver"); - ServerSocket svs(address); + ServerSocket server_socket(address); + + return new HTTPServer(new OutputRequestHandlerFactory(this->output_driver), server_socket, new HTTPServerParams); +} + +TCPServer* FlippRServer::build_input_server() +{ + unsigned short port = (unsigned short) config().getInt("HTTPTimeServer.port", this->output_port); + + //TODO adapt path + SocketAddress address("/tmp/flippR_driver/S.flippR_driver"); + ServerSocket server_socket(address); + - return new HTTPServer(new OutputRequestHandlerFactory(this->output_driver), svs, new HTTPServerParams); } diff --git a/FlippR-Driver/networking/FlippRServer.h b/FlippR-Driver/networking/FlippRServer.h index 0258cee..6f6788b 100644 --- a/FlippR-Driver/networking/FlippRServer.h +++ b/FlippR-Driver/networking/FlippRServer.h @@ -37,6 +37,7 @@ private: void parse_server_config_file(); Poco::Net::HTTPServer* build_output_server(); + Poco::Net::TCPServer* build_input_server(); private: diff --git a/FlippR-Driver/networking/input/InputSocketHandlerFactory.cpp b/FlippR-Driver/networking/input/InputSocketHandlerFactory.cpp new file mode 100644 index 0000000..cadede1 --- /dev/null +++ b/FlippR-Driver/networking/input/InputSocketHandlerFactory.cpp @@ -0,0 +1,31 @@ +// +// Created by johannes on 15.06.19. +// + +#include "InputSocketHandlerFactory.h" + +#include "InputSocketHandler.h" + +namespace flippR_driver +{ +namespace networking +{ +namespace input +{ +using namespace Poco::Net; + +InputSocketHandlerFactory::InputSocketHandlerFactory(std::shared_ptr inputDriver) : + input_driver(inputDriver) +{ + +} + +TCPServerConnection *InputSocketHandlerFactory::createConnection(const Poco::Net::StreamSocket &socket) +{ + return new InputSocketHandler(socket, this->input_driver); +} + +} +} +} + diff --git a/FlippR-Driver/networking/input/InputSocketHandlerFactory.h b/FlippR-Driver/networking/input/InputSocketHandlerFactory.h new file mode 100644 index 0000000..5f505e6 --- /dev/null +++ b/FlippR-Driver/networking/input/InputSocketHandlerFactory.h @@ -0,0 +1,33 @@ +// +// Created by johannes on 15.06.19. +// + +#ifndef FLIPPR_DRIVER_INPUTSOCKETHANDLERFACTORY_H +#define FLIPPR_DRIVER_INPUTSOCKETHANDLERFACTORY_H + +#include +#include + +namespace flippR_driver +{ +namespace networking +{ +namespace input +{ + +class InputSocketHandlerFactory : Poco::Net::TCPServerConnectionFactory +{ +public: + explicit InputSocketHandlerFactory(std::shared_ptr inputDriver); + + Poco::Net::TCPServerConnection* createConnection(const Poco::Net::StreamSocket &socket) override; + +private: + std::shared_ptr input_driver; +}; + +} +} +} + +#endif //FLIPPR_DRIVER_INPUTSOCKETHANDLERFACTORY_H diff --git a/FlippR-Driver/networking/output/OutputHTTPServer.cpp b/FlippR-Driver/networking/output/OutputHTTPServer.cpp index 6402332..207102b 100644 --- a/FlippR-Driver/networking/output/OutputHTTPServer.cpp +++ b/FlippR-Driver/networking/output/OutputHTTPServer.cpp @@ -9,12 +9,12 @@ namespace flippR_driver { -namespace utility +namespace networking { using namespace Poco::Net; OutputHTTPServer::OutputHTTPServer(std::shared_ptr output_driver, Socket &socket) : -HTTPServer(new OutputRequestHandlerFactory(output_driver), socket, new HTTPServerParams()) + HTTPServer(new OutputRequestHandlerFactory(output_driver), socket, new HTTPServerParams()) {} } diff --git a/FlippR-Driver/networking/output/OutputHTTPServer.h b/FlippR-Driver/networking/output/OutputHTTPServer.h index c0e2110..513e6e5 100644 --- a/FlippR-Driver/networking/output/OutputHTTPServer.h +++ b/FlippR-Driver/networking/output/OutputHTTPServer.h @@ -12,7 +12,7 @@ namespace flippR_driver { -namespace utility +namespace networking { class OutputHTTPServer : public Poco::Net::HTTPServer