88 lines
2.7 KiB
C++
88 lines
2.7 KiB
C++
/*
|
||
Менеджер открытия и закрытия пула сокетов.
|
||
Каждый сокет в своём потоке для прослушивания ответов с сервера.
|
||
Пришедние ответы накапливаются в отдельном списке для отправке дальше в терминал через (сокет, порт)
|
||
*/
|
||
#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 <pthread.h>
|
||
#include <thread>
|
||
#include <mutex>
|
||
//---------------------------------------------------------------------------
|
||
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<THSocket*>* 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
|
||
<ADDRESS> : [0..255][0..255][0..255][0..255] : SOCKET ADDRESS
|
||
<PORT> : [PORT HIGH][PORT LOW] : SOCKET PORT
|
||
<TIMEOUT> : [TIMEOUT HIGH][TIMEOUT LOW] : TIMEOUT IN SECONDS
|
||
*/
|
||
|
||
};
|
||
|
||
//---------------------------------------------------------------------------
|
||
#endif |