#ifndef HD_FINSTCP_MODULE_H #define HD_FINSTCP_MODULE_H #include #include #include #include #include #include #include #include #include #include #include #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&,QByteArray&); bool reciveData(std::vector&,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 vec_value); bool writeResultCommond(QString DM,QString write_Num,QVector vec_value); // 写入起始位结果值,要做解析再写入 bool writeStringCommond(QString DM, QString write_num, QString vec_value); bool decodeWriteResult(QByteArray resultByte,QVector &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