#pragma once #include #include #include #include #include #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 //定时数据 一次大概50个左右 }; 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 m_stubTwo; std::string m_localIp; int m_port; //服务端口 DataCallBack m_dataCallBack; bool m_readQuitFlag; bool m_writeQuitFlag; std::thread m_connectTd; std::list m_msgList; //信息缓存区 std::mutex m_msgLock; //信息锁 void* m_handlePtr; };