GrabBag/App/WheelMeasure/WheelMeasureApp/Presenter/Inc/WheelMeasureTCPProtocol.h

126 lines
3.7 KiB
C
Raw Normal View History

#ifndef WHEELMEASURETCPPROTOCOL_H
#define WHEELMEASURETCPPROTOCOL_H
#include <functional>
#include <vector>
#include <string>
#include <QString>
#include <QMutex>
#include "IYTCPServer.h"
/**
* @brief TCP服务器协议
*
*
* - start,100 (start命令100)
* - 1,100,200;2,100,200;3,100,200;4,100,200
* - ID,,
* -
* -
* - 400/
* - 401
* - 1,400;2,100,200;3,100,200;4,100,200 (1)
*/
class WheelMeasureTCPProtocol
{
public:
/**
* @brief
*/
struct CameraMeasureResult {
int cameraId = 0; // 相机ID (1-4)
int errorCode = 0; // 错误码0-成功400-扫描失败401-工件为空
double centerDistance = 0; // 中心点到地面距离
double archDistance = 0; // 轮眉到地面距离
};
/**
* @brief
* @param param start命令解析的参数
* @return true-false-
*/
using DetectionTriggerCallback = std::function<bool(int param)>;
public:
WheelMeasureTCPProtocol();
~WheelMeasureTCPProtocol();
/**
* @brief TCP服务器
* @param port TCP端口号
* @return 0--
*/
int Initialize(uint16_t port = 6800);
/**
* @brief
*/
void Deinitialize();
/**
* @brief
* @param results
* @return 0--
*/
int SendMeasureResults(const std::vector<CameraMeasureResult>& results);
/**
* @brief
* @param callback
*/
void SetDetectionTriggerCallback(const DetectionTriggerCallback& callback);
/**
* @brief
* @return true-false-
*/
bool IsRunning() const { return m_bServerRunning; }
/**
* @brief
* @return
*/
int GetClientCount() const;
private:
/**
* @brief TCP客户端连接事件处理
* @param pClient
* @param eventType
*/
void OnTCPEvent(const TCPClient* pClient, TCPServerEventType eventType);
/**
* @brief TCP数据接收处理
* @param pClient
* @param pData
* @param nLen
*/
void OnTCPDataReceived(const TCPClient* pClient, const char* pData, unsigned int nLen);
/**
* @brief
* @param pClient
* @param command
*/
void ParseCommand(const TCPClient* pClient, const QString& command);
/**
* @brief
* @param pClient nullptr表示发送给所有客户端
* @param data
* @return true-false-
*/
bool SendData(const TCPClient* pClient, const QString& data);
private:
IYTCPServer* m_pTCPServer; // TCP服务器实例
bool m_bServerRunning; // 服务器运行状态
uint16_t m_nPort; // TCP端口
DetectionTriggerCallback m_detectionCallback; // 检测触发回调
QMutex m_mutex; // 线程安全锁
const TCPClient* m_pCurrentClient; // 当前请求的客户端
};
#endif // WHEELMEASURETCPPROTOCOL_H