Files
2024-05-18 23:53:26 +08:00

102 lines
3.7 KiB
C++

#ifndef HD_FINSTCP_MODULE_H
#define HD_FINSTCP_MODULE_H
#include <QtCore/qglobal.h>
#include <QByteArray>
#include <QThread>
#include <iostream>
#include <QTcpSocket>
#include <QHostAddress>
#include <QMutex>
#include <QObject>
#include <QQueue>
#include <QDebug>
#include <Windows.h>
#include "base.h"
class MyThread;
class writeThread;
class Hd_FinsTcp_module :public Base
{
Q_OBJECT
public:
Hd_FinsTcp_module();
virtual ~Hd_FinsTcp_module();
bool sendData(std::vector<cv::Mat>&,QByteArray&);
bool reciveData(std::vector<cv::Mat>&,QByteArray&);
bool initParas(QByteArray&);
bool run();
public:
QString UShortToHex(int value); // 只转 ushort 类型
QString ShortToHex(int value); // 只转 short 类型
QString IntToHex(int value);
void setSleepTimeAndReadNum(int time,int num);
bool writeCommond(QString DM,QString Num); // 写入单个值
bool writeCommondInt(QString DM, QString Num);
bool readCommond(QString DM,QString Num);
bool readAllCommond(QString DM,QString Num); // 写入连续的值
bool writeAllCommond(QString DM,QString write_Num,QVector<int> vec_value);
bool writeResultCommond(QString DM,QString write_Num,QVector<QString> vec_value); // 写入起始位结果值,要做解析再写入
bool writeStringCommond(QString DM, QString write_num, QString vec_value);
bool decodeWriteResult(QByteArray resultByte,QVector<QString> &vec_ret);
bool tcpServer(QByteArray cmd, QByteArray& resultPack);
void decodePack(QByteArray resultArray);
private:
int m_sleepTime = 100; // 延迟时间
int m_readPackNum = 50; // 接受50个数据包的长度 为 122 ,加包头一起为 130
QString m_host;
QString m_IP;
QString m_pos; // 位置 100 110
QString hex_ip_lastpos; // 获取ip 最后一位
QString m_writeType = "ushort"; // 初始化时候 设置 传输的类型是 sort 还是int 类型,还是ushort 类型, 默认ushort 类型
QString m_posName;
QString socketIp;
int readPackValue = 0;
//MyThread *m_Thread = nullptr;
//QTcpSocket* tcpsocket = nullptr; //tcp通信的socket
QMutex* m_Mutex = nullptr;
MyThread* m_Thread = nullptr;
};
//自己创建线程
class MyThread : public QThread
{
Q_OBJECT
public:
QString socketIp;
explicit MyThread(QObject *parent = nullptr):QThread(parent){}
~MyThread();
bool setIpAndPort(QString ip,QString port);
void run();
void readSocketData(); //读取数据
void writeSocketData(); //写入数据
void decodePack();
void setMutexLock(QMutex* lock) { m_mutex_lock = lock; }
void setRunStop(){ init_flag = 2;}
void setReadPackValue(int value);
void closeSocket();
bool getInitSuccessFlag(){return init_success;}
bool disReconnects();
void setSocketIp(QString m_socketIp) { socketIp = m_socketIp; }
private:
QString m_IP;
QString m_Port;
QMutex m_Mutex;
QByteArray reciveData;
bool init_success = true; // 初始化成功 返回true;失败返回false
int init_flag = 0; // false为完整数据包,true为非完整数据包
int m_readPackValue = 122; // 接受50个数据包的长度 为 122 ,加包头一起为 130, 如果是 100的话就是 222 加包头为230
QMutex* m_mutex_lock = nullptr;
QTcpSocket *tcpsocket = nullptr; // tcp通信的socket
bool handShakeMsg = true;
};
extern "C"
{
Q_DECL_EXPORT Hd_FinsTcp_module * create();
Q_DECL_EXPORT void destory(Hd_FinsTcp_module * ptr);
}
#endif // HD_FINSTCP_MODULE_H