From 89a65ec6b3308fd7b40822ae40a6d2ba4dbd679c Mon Sep 17 00:00:00 2001 From: "Querejeta Lomas, Leire" <leire.querejeta@tecnalia.com> Date: Tue, 30 Aug 2022 09:40:36 +0200 Subject: [PATCH] Subir nuevo archivo --- .../include/class_server/class_server.hpp | 178 ++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 src/class_server/include/class_server/class_server.hpp diff --git a/src/class_server/include/class_server/class_server.hpp b/src/class_server/include/class_server/class_server.hpp new file mode 100644 index 0000000..dc45e07 --- /dev/null +++ b/src/class_server/include/class_server/class_server.hpp @@ -0,0 +1,178 @@ +/** + * @file class_server.hpp + * @author Alfonso Dominguez <alfonso.dominguez@tecnalia.com> + * @date 2020 + * + * Copyright 2020 Tecnalia Research & Innovation. + * Distributed under the GNU GPL v3. + * For full terms see https://www.gnu.org/licenses/gpl.txt + * + * @brief Class for server which connects to CLASS device and waits for client connections + */ + +#ifndef CLASSSERVER_HPP +#define CLASSSERVER_HPP + +#include <string> +#include <sstream> +#include <thread> +#include <memory> +#include <mutex> +#include <fstream> + +#include <logger/logger.hpp> +//#include <communication/serial.hpp> +#include <communication/async_serial.hpp> +#include <communication/udp_server.hpp> +#include <communication/udp_client.hpp> + + +#if defined(_WIN32) || defined(WIN32) + #include <windows.h> +#endif + +class ClassServer: public UdpServerListener, public SerialListener +{ +public: + //! Basic constructor + ClassServer(); + //! Basic destructor + ~ClassServer(); + + /*! + \brief Connects to the CLASS and starts the server + \param port CLASS COM port to connect with. + \param listening_port Port in which server listens for connections. + \return Integer indicating the success of the connection (0-success, <0 error) + */ + int start(const std::string & port, const int & listening_port, boost::asio::io_service *io_service); + + /*! + \brief Disconnects from the CLASS and stops the server + \return Integer indicating the success of the connection (0-success, <0 error) + */ + int stop(); + + /*! + \brief Handles the reception of an UDP msg from a client + \param msg Msg + \param ip IP the message comes from + */ + void udpMsgReceived(std::string msg, std::string client_ip); + + /*! + \brief Handles the reception of a msg comming from serial + \param msg Msg + */ + void serialMsgReceived(std::string msg); + +private: + + //! thread for looking after variables + std::thread *wait_thread_; + //! function called by thread + void waitThreadFunction(); + + //! serial port for communication with CLASS + //Serial serial_; + AsyncSerial *serial_; + //! thread for sending msgs to CLASS + std::thread *serial_send_thread_; + //! function called by thread + void serialSendThreadFunction(); + //! list of msgs to be send to CLASS + std::vector<std::string> msgs_to_class_; + //! mutex for accessing msg list + std::mutex msgs_to_class_mutex_; + //! list of msgs received from CLASS + std::vector<std::string> msgs_from_class_; + //! mutex for accessing msg list + std::mutex msgs_from_class_mutex_; + + //! UDP server + UDPServer *udp_server_; + //! List of the ips connected to the server + std::vector<std::string> udp_client_ips_; + //! List of the ips connected to the server + std::vector<UDPClient*> udp_clients_; + //! thread for sending msgs to client + std::thread *udp_send_thread_; + //! function called by thread + void udpSendThreadFunction(); + //! mutex for upd_clients access + std::mutex udp_mutex_; + + //! indicates whether turn of has been received + bool turn_off_; + //! mutex for upd_clients access + std::mutex turn_off_mutex_; + //! indicates whether udp thread is running + bool continue_udp_; + //! indicates whether serial thread is running + bool continue_serial_; + + + // !external io_service + boost::asio::io_service *io_service_; + + // ! file where msgs are stored + //std::ofstream myfile_; + + + /*! + \brief Connects to the CLASS + \param port CLASS COM port to connect with. + \return Integer indicating the success of the connection (0-success, <0 error) + */ + int connectToSerial(const std::string & port); + + /*! + \brief Disconnects from the CLASS + \return Integer indicating the success of the connection (0-success, <0 error) + */ + int disconnectFromSerial(); + + /*! + \brief Starts listening fro UDP connections + \param port Port in which the server is listening. + \return Integer indicating the success of the connection (0-success, <0 error) + */ + int startUDPServer(const int & listening_port); + + /*! + \brief Stops listening + \param port Port in which the server is listening. + \return Integer indicating the success of the connection (0-success, <0 error) + */ + int stopUDPServer(); + + /*! + \brief Replaces substr in a string by another + \param str Original stringl + \param from substr to be replaced + \param to substr to replace + \return True if found and done + */ + bool replace(std::string& str, const std::string& from, const std::string& to); + + /*! + \brief Trims a string + \param str Original stringl + \return The trimmed string + */ + std::string trim(std::string str); + + //! log function + #define log_stream_(x) log_(std::stringstream() << x); + #define log_warn_stream_(x) log_warn_(std::stringstream() << x); + #define log_error_stream_(x) log_err_(std::stringstream() << x); + void log_(const std::string &text); + void log_(const std::stringstream &text); + void log_(std::ostream & text); + void log_err_(const std::string &text); + void log_err_(std::ostream & text); + void log_warn_(const std::string &text); + void log_warn_(std::ostream & text); +}; + +#endif // CLASSSERVER_HPP \ No newline at end of file -- GitLab