#pragma once #include #include #include #include #include "../protobuf/stream.grpc.pb.h" using grpc::ServerContext; enum READTYPE { GET = 0, SET, LOAD, //载入 LOADOUT, //载出 SUPPLYAXLEAFTER, //供粉轴后移 SUPPLYAXLEFRONT, //供粉轴前移 SUPPLYAXLEAFTERCONT, //供粉轴后移连续 SUPPLYAXLEFRONTCONT, //供粉轴前移连续 PAVEAXLEFRONT, // 铺粉臂前移 PAVEAXLEFRONTCONT, //铺粉臂前移连续 PAVEAXLEAFTER, //铺粉臂后移 PAVEAXLEAFTERCONT, //铺粉臂后移连续 PAVEAXLECLEAR, //铺粉臂清零 PRINTAXLEUP, //成型缸上升 PRINTAXLEUPCONT, //成型缸连续上升 PRINTAXLEDOWN, //成型缸下降 PRINTAXLEDOWNCONT, //成型缸连续下降 PRINTAXLECLEAR, //成型缸清零 TRANSFERAXIELEFT, //移栽轴左移 TRANSFERAXIELEFTCONT, //移栽轴连续左移 TRANSFERAXIERIGHT, //移栽轴右移 TRANSFERAXIERIGHTCONT, //移栽轴连续右移 TRANSFERAXIECLEAR //移栽轴清零 }; enum DATATYPE { iBOOL =0, iSHORT, iUSHORT, iINT, iUINT, iFLOAT, iSTRING, }; class ClientInfo; struct ReadData { READTYPE dataType; std::string nameKey; //参数key std::string strValue; //value DATATYPE valueType; ClientInfo* clientPtr; }; enum WRITETYPE { ProcReadPLC0=0, //snap7 数据 ProcReadPLC1, ProcReadPLC2, ProcReadPLC3, ProcReadPLC4, ProcReadPLC5, ProcReadPLC6, ProcReadPLCData0 = 100, ALARM , //报警 RESPOND, //回应 TIMEDATA, //定时数据 }; struct WriteData { WRITETYPE dataType; bool result; std::string nameKey; //参数key std::string strValue; //value DATATYPE valueType; //数据类型 }; class ClientInfo { public: ClientInfo() : m_clientAddr("0.0.0.0:0") , m_readQuitFlag(false) , m_writeQuitFlag(false) , m_context(nullptr) { } ~ClientInfo() { m_readQuitFlag = true; m_writeQuitFlag = true; } bool IsConnect() { return m_context && !m_context->IsCancelled(); } bool GetPushMsg(WriteData& msg) { std::lock_guard lock(m_msgLock); if (m_msgList.empty()) { return false; } else { msg = (*m_msgList.front()); m_msgList.pop_front(); return true; } } void SetPushMsg(WriteData* msg) { std::lock_guard lock(m_msgLock); m_msgList.push_back(msg); } public: std::string m_clientAddr; bool m_readQuitFlag; bool m_writeQuitFlag; ServerContext* m_context; private: std::list m_msgList; //信息缓存区 std::mutex m_msgLock; //信息锁 };