GrpcPrint/PrintC/DataManage/StreamClient.h
2024-03-15 12:31:34 +08:00

106 lines
2.5 KiB
C++

#pragma once
#include <iostream>
#include <memory>
#include <string>
#include <thread>
#include <grpcpp/grpcpp.h>
#include "../protobuf/stream.grpc.pb.h"
using grpc::Channel;
using grpc::ClientContext;
using grpc::Status;
using stream::Stream;
using stream::RequestInfo;
using stream::ResponseInfo;
enum READTYPE {
ALARM = 0, //报警
RESPOND, //回应
TIMEDATA //定时数据
};
enum DATATYPE {
iBOOL = 0,
iSHORT,
iUSHORT,
iINT,
iUINT,
iFLOAT
};
struct ReadData {
READTYPE dataType;
bool result;
std::string nameKey; //参数key
std::string strValue; //value
DATATYPE valueType; //数据类型
};
enum WRITETYPE {
GET = 0,
SET,
LOAD, //载入
SUPPLYAXLEAFTER, //供粉轴后移
LOADOUT, //载出
SUPPLYAXLEFRONT, //供粉轴前移
SUPPLYAXLEAFTERCONT, //供粉轴后移连续
SUPPLYAXLEFRONTCONT, //供粉轴前移连续
PAVEAXLEFRONT, // 铺粉臂前移
PAVEAXLEFRONTCONT, //铺粉臂前移连续
PAVEAXLEAFTER, //铺粉臂后移
PAVEAXLEAFTERCONT, //铺粉臂后移连续
PAVEAXLECLEAR, //铺粉臂清零
PRINTAXLEUP, //成型缸上升
PRINTAXLEUPCONT, //成型缸连续上升
PRINTAXLEDOWN, //成型缸下降
PRINTAXLEDOWNCONT, //成型缸连续下降
PRINTAXLECLEAR, //成型缸清零
TRANSFERAXIELEFT, //移栽轴左移
TRANSFERAXIELEFTCONT, //移栽轴连续左移
TRANSFERAXIERIGHT, //移栽轴右移
TRANSFERAXIERIGHTCONT, //移栽轴连续右移
TRANSFERAXIECLEAR //移栽轴清零
};
struct WriteData {
WRITETYPE dataType;
std::string nameKey; //参数key
std::string strValue; //value
DATATYPE valueType;
};
class StreamClient {
typedef void (*DataCallBack)(void* pthis, const ReadData& msg);
public:
StreamClient();
~StreamClient();
void Init();
void AllStream(); //双向流式
void SetCallBackFunc(void* pthis, DataCallBack dataCallBack) {
m_handlePtr = pthis;
m_dataCallBack = dataCallBack;
}
void SetPushMsg(WriteData* msg);
private:
bool GetPushMsg(WriteData& msg);
private:
std::unique_ptr<Stream::Stub> m_stubTwo;
std::string m_localIp;
int m_port; //服务端口
DataCallBack m_dataCallBack;
bool m_readQuitFlag;
bool m_writeQuitFlag;
std::list<WriteData*> m_msgList; //信息缓存区
std::mutex m_msgLock; //信息锁
void* m_handlePtr;
};