Files
2024-11-01 12:23:13 +05:00

88 lines
2.7 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Менеджер открытия и закрытия пула сокетов.
Каждый сокет в своём потоке для прослушивания ответов с сервера.
Пришедние ответы накапливаются в отдельном списке для отправке дальше в терминал через (сокет, порт)
*/
#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