GrabBag/App/DiscHolePose/DiscHolePoseApp/Presenter/Inc/DiscHolePoseTCPProtocol.h

53 lines
1.5 KiB
C
Raw Normal View History

#pragma once
#include <QObject>
#include <QString>
#include <functional>
#include <memory>
#include "IVrConfig.h"
#include "RobotPose6D.h"
using DetectionTriggerCallback = std::function<void(int cameraIndex, DetectionType type, const RobotPose6D& robotPose)>;
/**
* @brief DiscHolePose TCP PIMPL
*
*
* - : D1_X_Y_Z_A_B_C disc hole
* - : R1_X_Y_Z_A_B_C disc rack
* - : count_AX_AY_AZ_A_B_C_X_Y_Z_A_B_C
* (12 姿)
*
* IYTCPServer QObject
*/
class DiscHolePoseTCPProtocol : public QObject
{
Q_OBJECT
public:
explicit DiscHolePoseTCPProtocol(QObject* parent = nullptr);
~DiscHolePoseTCPProtocol();
bool StartServer(uint16_t port);
void StopServer();
bool IsConnected() const;
void SetDetectionTriggerCallback(DetectionTriggerCallback callback);
void SendResult(const QString& resultText);
signals:
void ConnectionChanged(bool connected);
void DataReceived(const QString& data);
void DetectionTriggered(int cameraIndex, DetectionType type, const RobotPose6D& robotPose);
private slots:
void OnNewConnection();
void OnDisconnected();
void OnReadyRead(const QByteArray& data);
private:
void ProcessCommand(const QString& command);
class Impl;
std::unique_ptr<Impl> m_pImpl;
};