первый
This commit is contained in:
BIN
devices/Acquiring/BluePad.zip
Normal file
BIN
devices/Acquiring/BluePad.zip
Normal file
Binary file not shown.
2694
devices/Acquiring/BluePad/BluePad.cpp
Normal file
2694
devices/Acquiring/BluePad/BluePad.cpp
Normal file
File diff suppressed because it is too large
Load Diff
195
devices/Acquiring/BluePad/BluePad.h
Normal file
195
devices/Acquiring/BluePad/BluePad.h
Normal file
@ -0,0 +1,195 @@
|
||||
/*
|
||||
* BluePad.h
|
||||
*
|
||||
* Created on: 19 января 2022 г.
|
||||
* Author: Igor
|
||||
*/
|
||||
|
||||
#ifndef BLUEPAD_H_
|
||||
#define BLUEPAD_H_
|
||||
|
||||
#include "ComPort.h"
|
||||
#include "SocketPort.h"
|
||||
#include "DataToSend.h"
|
||||
#include "Sockets.h"
|
||||
|
||||
#define HAVE_STRUCT_TIMESPEC
|
||||
#include <thread>
|
||||
#include <mutex>
|
||||
|
||||
#define fcDisplayClear 0x21 //(33)Очистка дисплея
|
||||
|
||||
//Свои коды ошибок
|
||||
#define ERRCRC 100000 // RCR Error
|
||||
#define ERRIO 100001 // ERR_IO
|
||||
#define ERRSOCK 100002 // Ошибка закрытия сокета
|
||||
#define ERRSOCKSND 100003 // Ошибка закрытия сокета
|
||||
#define ERRTIMEOUT 100004 // Ошибка закрытия сокета
|
||||
|
||||
//#define ERRActivation 100050 //Ошибка изза не активации программы
|
||||
//#define ERRDiscounts 100051 //Ошибка если прентер не поддерживает скидки
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//Виды транзакций
|
||||
#define BOR_CMD_TRANS_TYPE_PURCH 0x01 //1 Оплата
|
||||
#define BOR_CMD_TRANS_TYPE_PURCH_CASH 0x02
|
||||
#define BOR_CMD_TRANS_TYPE_PURCH_REF 0x03
|
||||
#define BOR_CMD_TRANS_TYPE_CASH 0x04
|
||||
#define BOR_CMD_TRANS_TYPE_AUTH 0x05
|
||||
#define BOR_CMD_TRANS_TYPE_PURCH_CODE 0x06
|
||||
#define BOR_CMD_TRANS_TYPE_VOID_PURCH 0x07
|
||||
#define BOR_CMD_TRANS_TYPE_VOID_CASH 0x08
|
||||
#define BOR_CMD_TRANS_TYPE_VOID_AUTH 0x09
|
||||
#define BOR_CMD_TRANS_TYPE_END_OF_DAY 10
|
||||
#define BOR_CMD_TRANS_TYPE_LOYALTY_BALANCE 11
|
||||
#define BOR_CMD_TRANS_TYPE_LOYALTY_SPEND 0x12
|
||||
#define BOR_CMD_TRANS_TYPE_VOID_LOYALTY_SPEND 13
|
||||
#define BOR_CMD_TRANS_TYPE_TEST_CONN 0x0E //14 Проверить соединение с сервером
|
||||
#define BOR_CMD_TRANS_TYPE_TMS_UPDATE 15
|
||||
|
||||
#define BOR_CMD_TRANS_TYPE_PURCH_RET 0x16 //22 Возвратить продажу
|
||||
//---------------------------------------------------------------------------
|
||||
#define BOR_CMD_TAG_AMOUNT 0x81 //- [HEX BIG ENDIAN - 4 bytes]
|
||||
#define BOR_CMD_TAG_CASHBACK 0x9F04 // - [HEX BIG ENDIAN - 4 bytes]
|
||||
#define BOR_CMD_TAG_RRN 0xDF01 // - [STRING]
|
||||
#define BOR_CMD_TAG_AUTH_ID 0xDF02 // - [STRING]
|
||||
#define BOR_CMD_TAG_REF 0xDF03 // ~not used
|
||||
#define BOR_CMD_TAG_DF04_AMOUNT_EUR 0xDF04 //[HEX]
|
||||
#define BOR_CMD_TAG_TIP 0xDF63 // - [HEX BIG ENDIAN - 4 bytes]
|
||||
|
||||
#define BOR_CMD_TAG_RN 0xDF13 // - [STRING]
|
||||
//---------------------------------------------------------------------------
|
||||
#define PAY_CL_UI_NOT_WORKING 0x0000 //– Не працює
|
||||
#define PAY_CL_UI_APPROVED 0x0003 //- Затверджено
|
||||
#define PAY_CL_UI_DECLINED 0x0007 //- Відхилено
|
||||
#define PAY_CL_UI_ENTER_PIN 0x0009 //– Введіть PIN
|
||||
#define PAY_CL_UI_ERROR_PROCESSING 0x000F //– Обробка помилки
|
||||
#define PAY_CL_UI_REMOVE_CARD 0x0010 //– Заберіть картку
|
||||
#define PAY_CL_UI_IDLE 0x0014 //- Бездіяльний
|
||||
#define PAY_CL_UI_PRESENT_CARD 0x0015 //– ППрикладть картку
|
||||
#define PAY_CL_UI_PROCESSING 0x0016 //- Обробка
|
||||
#define PAY_CL_UI_CARD_READ_OK_REMOVE 0x0017 //- Зчитування картки видалено
|
||||
#define PAY_CL_UI_TRY_OTHER_INTERFACE 0x0018 //– Спробуйте інший інтерфейс
|
||||
#define PAY_CL_UI_CARD_COLLISION 0x0019 //- Зіткнення карт
|
||||
#define PAY_CL_UI_SIGN_APPROVED 0x001A //– Підпис підтверджено
|
||||
#define PAY_CL_UI_ONLINE_AUTHORISATION 0x001B //– Онлайн авторизація
|
||||
#define PAY_CL_UI_TRY_OTHER_CARD 0x001C //- Спробуйте іншу картку
|
||||
#define PAY_CL_UI_INSERT_CARD 0x001D //– Вставте картку
|
||||
#define PAY_CL_UI_CLEAR_DISPLAY 0x001E //– Очистити дисплей
|
||||
#define PAY_CL_UI_SEE_PHONE 0x0020 //– Подивитися на телефон
|
||||
#define PAY_CL_UI_PRESENT_CARD_AGAIN 0x0021 //– Прикладіть картку ще раз
|
||||
#define PAY_CL_UI_CARD_ERROR 0x0022 //– Помилка карти
|
||||
#define PAY_CL_UI_CARD_BLOCKED 0x0081 //– Картку заблоковано
|
||||
#define PAY_CL_UI_CARD_NUMBER 0x0082 //– Номер картки
|
||||
#define PAY_CL_UI_INVALID_NUMBER 0x0083 //- Недійсний номер
|
||||
#define PAY_CL_UI_EXPIRATION_DATE 0x0084 //- Термін придатності
|
||||
#define PAY_CL_UI_ENTER_CVV 0x0085 //– Введіть cvv
|
||||
#define PAY_CL_UI_MANUAL_BUTTON 0x0086 //- Ручне введення
|
||||
#define PAY_CL_UI_MAGNETIC_BUTTON 0x0087 //– Магнітна кнопка
|
||||
#define PAY_CL_UI_SWIPE_MAGNETIC_CARD 0x0088 //– Магнітна картка
|
||||
#define EMV_UI_TRY_AGAIN 0x0013 //– Спробуйте ще раз
|
||||
//---------------------------------------------------------------------------
|
||||
#define TAGSLEN 100
|
||||
//---------------------------------------------------------------------------
|
||||
class Sockets;
|
||||
//---------------------------------------------------------------------------
|
||||
struct MyError
|
||||
{
|
||||
int ErrorCode;
|
||||
std::string ErrorMessage;
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
class Tags {
|
||||
public:
|
||||
int tag;
|
||||
std::string data;
|
||||
Tags() {
|
||||
tag = 0;
|
||||
data = "";
|
||||
}
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
class BluePad
|
||||
{
|
||||
private:
|
||||
int m_cnt; //Для наблюдения за тем сколько пакетов было прочитанно в потоке
|
||||
int m_length; //Каким количеством данных заполнен массив
|
||||
char m_ans[65535]; //Буфер для приёма ответа в поток
|
||||
|
||||
//Нижэ всё для отдельных потоков
|
||||
|
||||
DataToSend* m_sendData; //FIFO буффер для потока отправки данных
|
||||
std::mutex m_mutex; // Для защиты связанного списка "m_sendData"
|
||||
|
||||
bool m_execute_thread_read = false; //По умолчанию потоки отправки и приёма не работают
|
||||
std::thread* m_threadid_read;
|
||||
static void thread_func_read(void *d); //Для чтения из порта
|
||||
|
||||
bool m_execute_thread_write = false; //По умолчанию потоки отправки и приёма не работают
|
||||
std::thread* m_threadid_write;
|
||||
static void thread_func_write(void *d); //Для записи в порт
|
||||
|
||||
Tags tags[TAGSLEN]; //для хранения последних тегов
|
||||
int m_tagsInCnt; //Сколько раз прочитали все теги
|
||||
public:
|
||||
Sockets* sockets;
|
||||
|
||||
bool existsData(int id); //Проверяем не отправились ли данные в пинпад
|
||||
bool addData(DataToSend* data); //Добавляем данные в конец списка на отправку
|
||||
|
||||
|
||||
Port* csPort;
|
||||
bool m_open; //Открыт и настроен ли порт или сокет
|
||||
|
||||
bool m_SaveLog; ///<Сохранять ли в лог файл
|
||||
std::string m_LogFilePath; ///<Куда сохранять лог файл
|
||||
int TimeOut;
|
||||
int m_LastErrorCode; ///<Код ошибки 0 без ошибок
|
||||
std::string m_LastErrorDescription; ///<Описание последней ошибки
|
||||
std::string PrinterNumber;
|
||||
|
||||
BluePad(std::string path);
|
||||
virtual ~BluePad();
|
||||
|
||||
void ReadingError(int Code, std::string& ErrorMessage);
|
||||
MyError OpenSerialPort(std::string ComNumber, int BaudRate);
|
||||
MyError CloseSerialPort();
|
||||
//int SendPMessage(char* answer);
|
||||
MyError Ping();
|
||||
MyError getInfo(std::string& model, std::string& serial, std::string& ver, std::string& id, int* menu);
|
||||
MyError getRTC(std::string& date);
|
||||
MyError getStatus(std::string& reversal, std::string& endday);
|
||||
MyError setEventStatus(bool val);
|
||||
bool getLastTag(int id, std::string& tag);
|
||||
bool waitTags(int timeout); //Подождать появления новых тегов
|
||||
MyError getReportTags(int type,std::string tags, std::string& tag); //Прочитать из пинпада 04: GET REPORT TAGS
|
||||
|
||||
//MyError setData(char* data, int length); //Отправить долученные данные через интернет на пинпад
|
||||
MyError getMaxLenData(int* length); //Запросить сколько байт можно передать в пинпад за 1 пакет
|
||||
MyError SocketOpen(); // Открываю сокет в отдельном потоке для коммуникации с сервером
|
||||
MyError SocketClose(); // Закрыть сокет по ID
|
||||
MyError SocketSend(); // Отправить данные полученные от пинпада на сокет
|
||||
|
||||
//Функции для транзакции
|
||||
MyError startPurchase(double amount,int timeout); //Начало транзакции для оплаты
|
||||
MyError voidPurchase(double amount,std::string RRN); //Отменить оплату
|
||||
MyError startRetPurchase(double amount, std::string RRN); //Вернуть оплату
|
||||
|
||||
MyError startAuthorization(double amount); //Начало авторизации оплаты
|
||||
MyError voidAuthorization(double amount, std::string RRN, std::string auth); //Отменить авторизацию //09 - VOID OF AUTHORIZATION
|
||||
MyError confirmAuthorization(double amount, std::string RRN, std::string auth);
|
||||
MyError cancelCheck(double amount, unsigned int num); // Отменить оплату по чеку в рамках одного дня
|
||||
MyError testConnection(); //Начало транзакции для проверки соединения
|
||||
MyError transactionEnd(char val);
|
||||
MyError endOfDay(); //Завершить день (Z - отчёт)
|
||||
|
||||
|
||||
|
||||
MyError getStatus(unsigned short& status); //Прочитать статус терминала
|
||||
void ReadingStatus(int Status, std::string& Message); //Получить описание статуса
|
||||
|
||||
void parseEMVTLV(unsigned char* data, int length);
|
||||
int readTag(unsigned char* data, int length, int& tag, std::string& tagData);
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
74
devices/Acquiring/BluePad/DataToSend.cpp
Normal file
74
devices/Acquiring/BluePad/DataToSend.cpp
Normal file
@ -0,0 +1,74 @@
|
||||
#include "DataToSend.h"
|
||||
//---------------------------------------------------------------------------
|
||||
int DataToSend::uid = 0;
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CRC <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
void DataToSend::calcCRC()
|
||||
{
|
||||
mas[len - 1] = 0x00;
|
||||
for (int i = 0; i < len - 1; i++) {
|
||||
mas[len - 1] = mas[len - 1] ^ mas[i];
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int DataToSend::addStringTag(int tag, std::string data) {
|
||||
if (tag < 255) {
|
||||
mas[pos] = tag;
|
||||
pos++;
|
||||
}else {
|
||||
mas[pos] = ((char*)&tag)[0];
|
||||
pos++;
|
||||
mas[pos] = ((char*)&tag)[1];
|
||||
pos++;
|
||||
}
|
||||
mas[pos] = data.length();
|
||||
pos++;
|
||||
|
||||
for (int i = 0; i < data.length(); i++) {
|
||||
mas[pos] = data[i];
|
||||
pos++;
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
int DataToSend::addUIntTag(int tag, unsigned int data) {
|
||||
if (tag < 255) {
|
||||
mas[pos] = tag;
|
||||
pos++;
|
||||
}
|
||||
else {
|
||||
mas[pos] = ((char*)&tag)[1];
|
||||
pos++;
|
||||
mas[pos] = ((char*)&tag)[0];
|
||||
pos++;
|
||||
}
|
||||
mas[pos] = 4;
|
||||
pos++;
|
||||
|
||||
mas[pos] = ((char*)&data)[3];
|
||||
pos++;
|
||||
mas[pos] = ((char*)&data)[2];
|
||||
pos++;
|
||||
mas[pos] = ((char*)&data)[1];
|
||||
pos++;
|
||||
mas[pos] = ((char*)&data)[0];
|
||||
pos++;
|
||||
|
||||
return pos;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
int DataToSend::addChar(char ch) {
|
||||
mas[pos] = ch;
|
||||
pos++;
|
||||
|
||||
return pos;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
int DataToSend::addUChar(unsigned char ch) {
|
||||
mas[pos] = ch;
|
||||
pos++;
|
||||
|
||||
return pos;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
45
devices/Acquiring/BluePad/DataToSend.h
Normal file
45
devices/Acquiring/BluePad/DataToSend.h
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* DataToSend.h
|
||||
*
|
||||
* Created on: 19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2022 <20>.
|
||||
* Author: Igor
|
||||
*/
|
||||
//---------------------------------------------------------------------------
|
||||
#ifndef DATATOSEND_H_
|
||||
#define DATATOSEND_H_
|
||||
//---------------------------------------------------------------------------
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
class DataToSend
|
||||
{
|
||||
public:
|
||||
static int uid;
|
||||
|
||||
int id; //
|
||||
char mas[65535]; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int len; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mas
|
||||
int pos; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
DataToSend* child;
|
||||
std::string log_text; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
DataToSend() {
|
||||
id = uid++;
|
||||
memset(mas, 0, sizeof(mas));
|
||||
len = 0;
|
||||
pos = 0;
|
||||
child = NULL;
|
||||
};
|
||||
|
||||
int addStringTag(int tag, std::string data); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int addUIntTag(int tag, unsigned int data);
|
||||
int addChar(char ch);
|
||||
int addUChar(unsigned char ch);
|
||||
|
||||
void calcCRC(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CRC <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (len - 1)
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
251
devices/Acquiring/BluePad/Sockets.cpp
Normal file
251
devices/Acquiring/BluePad/Sockets.cpp
Normal file
@ -0,0 +1,251 @@
|
||||
#include "Sockets.h"
|
||||
#include "SocketPort.h"
|
||||
#include "BluePad.h"
|
||||
#include "stdTools.h"
|
||||
|
||||
#include <sstream>
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
THSocket::THSocket() {
|
||||
parent = NULL;
|
||||
id = -1;
|
||||
sp = NULL;
|
||||
m_exe_thread_read = true;
|
||||
m_threadid_read = NULL;
|
||||
m_exe_thread_write = true;
|
||||
m_threadid_write = NULL;
|
||||
|
||||
|
||||
length_write = 0;
|
||||
memset(data_write, 0, sizeof(data_write));
|
||||
|
||||
len_read = 0;
|
||||
memset(data_read, 0, sizeof(data_read));
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
THSocket::~THSocket() {
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
m_exe_thread_read = false;
|
||||
m_threadid_read->join();
|
||||
delete m_threadid_read;
|
||||
|
||||
Sleep(10);
|
||||
m_exe_thread_write = false;
|
||||
Sleep(10);
|
||||
m_threadid_write->join();
|
||||
delete m_threadid_write;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
sp->Close();
|
||||
delete sp;
|
||||
sp = NULL;
|
||||
|
||||
id = -1;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void THSocket::thread_func_read(void *pData)
|
||||
{
|
||||
THSocket* sock = (THSocket*)pData;
|
||||
|
||||
char data[65500];
|
||||
while (sock->m_exe_thread_read) { //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Read <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
|
||||
int size = sock->sp->Read(data, sizeof(data));
|
||||
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (size > 0) {
|
||||
|
||||
sock->parent->m_mutexList.lock();
|
||||
for (int i = 0; i < size; i++) {
|
||||
if (sock->len_read + i >= sizeof(sock->data_read))
|
||||
break;
|
||||
sock->data_read[sock->len_read + i] = data[i];
|
||||
}
|
||||
sock->len_read += size;
|
||||
sock->parent->m_mutexList.unlock();
|
||||
|
||||
std::stringstream ss;
|
||||
ss << "--------------------------------------------------Read from soket = " << size;
|
||||
Utility::logrotate(sock->m_LogFilePath + Utility::sp3() + "log.txt", ss.str()); //TODO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
//TODO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (sock->m_SaveLog) {
|
||||
std::stringstream ss;
|
||||
ss << "========== END SOCK READ THREAD ID = " << sock->id << " ==========";
|
||||
Utility::logrotate(sock->m_LogFilePath + Utility::sp3() + "log.txt", ss.str());
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
void THSocket::thread_func_write(void *pData)
|
||||
{
|
||||
THSocket* sock = (THSocket*)pData;
|
||||
char data[65535];
|
||||
int len = 0;
|
||||
while (sock->m_exe_thread_write) {
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sock->parent->m_mutexList.lock();
|
||||
for (int i = 0; i < sock->length_write; i++) {
|
||||
data[i] = sock->data_write[i];
|
||||
}
|
||||
len = sock->length_write;
|
||||
sock->parent->m_mutexList.unlock();
|
||||
|
||||
if (len > 0) {
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
int size = sock->sp->Write(data, len);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sock->parent->m_mutexList.lock();
|
||||
for (int i = 0; i < sock->length_write - size; i++) {
|
||||
sock->data_write[i] = sock->data_write[i + size];
|
||||
}
|
||||
sock->length_write -= size;
|
||||
sock->parent->m_mutexList.unlock();
|
||||
|
||||
std::stringstream ss;
|
||||
ss << "--------------------------------------------------Write to soket = " << size << " from = " << len;
|
||||
Utility::logrotate(sock->m_LogFilePath + Utility::sp3() + "log.txt", ss.str()); //TODO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
//TODO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (sock->m_SaveLog) {
|
||||
std::stringstream ss;
|
||||
ss << "========== END SOCK WRITE THREAD ID = " << sock->id << " ==========";
|
||||
Utility::logrotate(sock->m_LogFilePath + Utility::sp3() + "log.txt", ss.str());
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//---------------------------------------------------------------------------
|
||||
//---------------------------------------------------------------------------
|
||||
Sockets::Sockets(BluePad* bp)
|
||||
{
|
||||
m_bp = bp;
|
||||
m_LogFilePath = m_bp->m_LogFilePath;
|
||||
|
||||
m_list = new TSimpleList<THSocket*>(10, true); //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
Sockets::~Sockets()
|
||||
{
|
||||
delete m_list;
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//timeout - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>?)
|
||||
bool Sockets::openSoket(int id, std::string address, int port, int timeout)
|
||||
{
|
||||
bool result = true;
|
||||
|
||||
SocketPort* sp = new SocketPort();
|
||||
sp->Open(address.c_str(), port);
|
||||
if (sp->isOpen()) {
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
THSocket* ths = new THSocket();
|
||||
ths->m_LogFilePath = m_LogFilePath;
|
||||
ths->id = id;
|
||||
ths->sp = sp;
|
||||
ths->parent = this;
|
||||
ths->m_threadid_read = new std::thread(THSocket::thread_func_read, (void*)ths);
|
||||
ths->m_threadid_write = new std::thread(THSocket::thread_func_write, (void*)ths);
|
||||
|
||||
m_mutexList.lock();
|
||||
m_list->add(ths);
|
||||
m_mutexList.unlock();
|
||||
|
||||
|
||||
std::stringstream ss;
|
||||
ss << "========== OPEN SOCK THREAD ID = " << id << " ==========";
|
||||
Utility::logrotate(m_LogFilePath + Utility::sp3() + "log.txt", ss.str());
|
||||
}
|
||||
else {
|
||||
result = false;
|
||||
delete sp;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool Sockets::closeSoket(int id) {
|
||||
TSimpleList<THSocket*>* list = new TSimpleList<THSocket*>(10,true);
|
||||
|
||||
m_mutexList.lock();
|
||||
for (int i = 0; i<m_list->count(); i++) {
|
||||
if (m_list->get(i)->id == id) {
|
||||
list->add(m_list->get(i));
|
||||
m_list->rem(i);
|
||||
i--;
|
||||
// break <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> id
|
||||
}
|
||||
}
|
||||
m_mutexList.unlock();
|
||||
|
||||
delete list; //<2F><> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>-<2D><> join <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool Sockets::sendData(int id, char* data, int len) {
|
||||
|
||||
std::lock_guard<std::mutex> lock(m_mutexList);
|
||||
|
||||
for (int i = 0; i<m_list->count(); i++) {
|
||||
if (m_list->get(i)->id == id) {
|
||||
|
||||
THSocket* ths = m_list->get(i);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (int i = 0; i < len; i++) {
|
||||
if (ths->length_write + i >= sizeof(ths->data_write))
|
||||
break;
|
||||
ths->data_write[ths->length_write + i] = data[i];
|
||||
}
|
||||
ths->length_write += len;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DataToSend* Sockets::getDataToSend() {
|
||||
|
||||
std::lock_guard<std::mutex> lock(m_mutexList);
|
||||
|
||||
DataToSend* result = NULL;
|
||||
|
||||
for (int i = 0; i<m_list->count(); i++) {
|
||||
if (m_list->get(i)->len_read > 0) {
|
||||
|
||||
m_list->get(i)->len_read += 1;
|
||||
|
||||
result = new DataToSend();
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 01: RECEIVE DATA <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
result->mas[0] = 0x3E; // '>': start paket (ASCII symbol '>')
|
||||
result->mas[1] = 0x40; // EXTERNAL INTERNET COMMANDS
|
||||
result->mas[2] = 0x00; // 00
|
||||
result->mas[3] = ((char*)&m_list->get(i)->len_read)[1]; //LH length of DATA (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
result->mas[4] = ((char*)&m_list->get(i)->len_read)[0]; //LL length of DATA
|
||||
result->mas[5] = 0x01; //SUBCMD: 01: RECEIVE DATA
|
||||
for (int j = 0; j < m_list->get(i)->len_read; j++) {
|
||||
result->mas[6+j] = m_list->get(i)->data_read[j];
|
||||
}
|
||||
result->len = 6 + m_list->get(i)->len_read;
|
||||
result->calcCRC();
|
||||
result->log_text = "getDataToSend()";
|
||||
|
||||
m_list->get(i)->len_read = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
88
devices/Acquiring/BluePad/Sockets.h
Normal file
88
devices/Acquiring/BluePad/Sockets.h
Normal file
@ -0,0 +1,88 @@
|
||||
/*
|
||||
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>)
|
||||
*/
|
||||
#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 - <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> false - <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
std::thread* m_threadid_read;
|
||||
bool m_exe_thread_write; //true - <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> false - <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
std::thread* m_threadid_write;
|
||||
|
||||
SocketPort* sp;
|
||||
char data_write[65535]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
int length_write; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 0)
|
||||
char data_read[65535]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
unsigned short len_read; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 0)
|
||||
|
||||
bool m_SaveLog; ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
std::string m_LogFilePath; ///<<3C><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
THSocket();
|
||||
~THSocket();
|
||||
|
||||
static void thread_func_read(void *pData);
|
||||
static void thread_func_write(void *pData);
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
class BluePad;
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
class Sockets
|
||||
{
|
||||
private:
|
||||
BluePad* m_bp;
|
||||
|
||||
TSimpleList<THSocket*>* m_list;
|
||||
public:
|
||||
std::mutex m_mutexList; //<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "socket"
|
||||
|
||||
bool m_SaveLog; ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
std::string m_LogFilePath; ///<<3C><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
Sockets(BluePad* bp);
|
||||
~Sockets();
|
||||
|
||||
|
||||
bool openSoket(int id,std::string address,int port,int timeout); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool closeSoket(int id); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool sendData(int id, char* data, int len); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
DataToSend* getDataToSend(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
/*
|
||||
[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
|
||||
Reference in New Issue
Block a user