/* Менеджер открытия и закрытия пула сокетов. Каждый сокет в своём потоке для прослушивания ответов с сервера. Пришедние ответы накапливаются в отдельном списке для отправке дальше в терминал через (сокет, порт) */ #ifndef SOKETS_H_ #define SOKETS_H_ #include "ComPort.h" #include "SocketPort.h" #include "BluePad.h" #include "DataToSend.h" #include "structs.h" #define HAVE_STRUCT_TIMESPEC //#include #include #include //--------------------------------------------------------------------------- class Sockets; //--------------------------------------------------------------------------- class THSocket { public: Sockets* parent; int id; bool m_exe_thread_read; //true - то нужно продолжать выволнение false - то выйти из потоков (не защищаю мютексом думаю это приемлеммо) std::thread* m_threadid_read; bool m_exe_thread_write; //true - то нужно продолжать выволнение false - то выйти из потоков (не защищаю мютексом думаю это приемлеммо) std::thread* m_threadid_write; SocketPort* sp; char data_write[65535]; //Данные для отправки (после отправки удалятся) int length_write; //Длина данных для отправки (после отправки в 0) char data_read[65535]; //Данные которые были получены (после чтения удаляются) unsigned short len_read; //Длина полученных данных (после чтения в 0) bool m_SaveLog; ///<Сохранять ли в лог файл std::string m_LogFilePath; ///<Куда сохранять лог файл THSocket(); ~THSocket(); static void thread_func_read(void *pData); static void thread_func_write(void *pData); }; //--------------------------------------------------------------------------- class BluePad; //--------------------------------------------------------------------------- //Класс для обслуживания списка сокетов (и их потоков команд) class Sockets { private: BluePad* m_bp; TSimpleList* m_list; public: std::mutex m_mutexList; //Для доступа к массиву "socket" bool m_SaveLog; ///<Сохранять ли в лог файл std::string m_LogFilePath; ///<Куда сохранять лог файл Sockets(BluePad* bp); ~Sockets(); bool openSoket(int id,std::string address,int port,int timeout); //Открыть сокет и запустить потоки bool closeSoket(int id); //Закрыть удалить сокет и остановить связанные с ним потоки bool sendData(int id, char* data, int len); //Отправить данные в сокет DataToSend* getDataToSend(); //Получить данные для последующей отправки /* [ID]: [0..255] : SOCKET ID [TYPE] : [01] : TCP [02] : UDP [03] : TCP TLS [04] : UDP TLS
: [0..255][0..255][0..255][0..255] : SOCKET ADDRESS : [PORT HIGH][PORT LOW] : SOCKET PORT : [TIMEOUT HIGH][TIMEOUT LOW] : TIMEOUT IN SECONDS */ }; //--------------------------------------------------------------------------- #endif