GrabBag/App/ScrewPosition/ScrewPositionApp/Presenter/Inc/ScrewPositionTCPProtocol.h

85 lines
2.5 KiB
C
Raw Normal View History

#ifndef SCREWPOSITIONTCPPROTOCOL_H
#define SCREWPOSITIONTCPPROTOCOL_H
#include <functional>
#include <vector>
#include <string>
#include <map>
#include <QByteArray>
#include "IYTCPServer.h"
#include "IVrConfig.h"
/**
* @brief 姿
*/
struct RobotPose6D
{
double x = 0.0;
double y = 0.0;
double z = 0.0;
double rx = 0.0;
double ry = 0.0;
double rz = 0.0;
};
/**
* @brief ScrewPosition TCP
*
*
* S1 RbtX-23.45 RbtY-23.45 RbtZ-23.45 RbtRX-23.45 RbtRY-123.45 RbtRZ-23.45\n
* S T
*
*
* PointNum_X1_Y1_Z1_RX1_RY1_RZ1/X2_Y2_Z2_RX2_RY2_RZ2/\n
*/
class ScrewPositionTCPProtocol
{
public:
using ConnectionCallback = std::function<void(bool connected)>;
/**
* @brief
* @param cameraIndex
* @param detectionType
* @param robotPose 姿
* @return
*/
using DetectionTriggerCallback = std::function<bool(int cameraIndex,
DetectionType detectionType,
const RobotPose6D& robotPose)>;
ScrewPositionTCPProtocol();
~ScrewPositionTCPProtocol();
int Initialize(uint16_t port = 7800);
void Deinitialize();
bool IsRunning() const;
void SetConnectionCallback(const ConnectionCallback& callback);
void SetDetectionTriggerCallback(const DetectionTriggerCallback& callback);
/**
* @brief
* @param text
* @param pClient nullptr 广
*/
int SendTextResult(const std::string& text, const TCPClient* pClient = nullptr);
private:
void OnTCPEvent(const TCPClient* pClient, TCPServerEventType eventType);
void OnTCPDataReceived(const TCPClient* pClient, const char* pData, unsigned int nLen);
void ParseTextCommand(const TCPClient* pClient, const QByteArray& line);
private:
IYTCPServer* m_pTCPServer = nullptr;
bool m_bServerRunning = false;
uint16_t m_nPort = 7800;
ConnectionCallback m_connectionCallback;
DetectionTriggerCallback m_detectionTriggerCallback;
std::map<const TCPClient*, QByteArray> m_clientBuffers;
};
#endif // SCREWPOSITIONTCPPROTOCOL_H