GrpcPrint/PrintS/DataManage/ClientInfo.h
2024-04-08 13:43:56 +08:00

150 lines
3.9 KiB
C++

#pragma once
#include <mutex>
#include <string>
#include <thread>
#include <list>
#include "../protobuf/stream.grpc.pb.h"
using grpc::ServerContext;
enum READTYPE {
GET = 0,
SET,
LOAD, //载入
LOADOUT, //载出
SUPPLYAXLEAFTER, //供粉轴后移
SUPPLYAXLEFRONT, //供粉轴前移
SUPPLYAXLEAFTERCONTSTART, //供粉轴后移连续开始
SUPPLYAXLEAFTERCONTSTOP, //供粉轴后移连续停止
SUPPLYAXLEFRONTCONTSTART, //供粉轴前移连续开始
SUPPLYAXLEFRONTCONTSTOP, //供粉轴前移连续停止
PAVEAXLEFRONT, // 铺粉臂前移
PAVEAXLEFRONTCONTSTART, //铺粉臂前移连续
PAVEAXLEFRONTCONTSTOP, //铺粉臂前移连续
PAVEAXLEAFTER, //铺粉臂后移
PAVEAXLEAFTERCONTSTART, //铺粉臂后移连续开始
PAVEAXLEAFTERCONTSTOP, //铺粉臂后移连续停止
PAVEAXLECLEAR, //铺粉臂清零
PRINTAXLEUP, //成型缸上升
PRINTAXLEUPCONTSTART, //成型缸连续上升开始
PRINTAXLEUPCONTSTOP, //成型缸连续上升停止
PRINTAXLEDOWN, //成型缸下降
PRINTAXLEDOWNCONTSTART, //成型缸连续下降开始
PRINTAXLEDOWNCONTSTOP, //成型缸连续下降停止
PRINTAXLECLEAR, //成型缸清零
TRANSFERAXIELEFT, //移载轴左移
TRANSFERAXIELEFTCONTSTART, //移载轴连续左移开始
TRANSFERAXIELEFTCONTSTOP, //移载轴连续左移停止
TRANSFERAXIERIGHT, //移载轴右移
TRANSFERAXIERIGHTCONTSTART, //移载轴连续右移开始
TRANSFERAXIERIGHTCONTSTOP, //移载轴连续右移停止
TRANSFERAXIECLEAR, //移载轴清零
SCANERSTART, //开始扫描
SCANERSTOP, //停止扫描
STARTHEATINGSCANNERTEST, //开始振镜预热测试
STOPHEATINGSCANNERTEST, //停止振镜预热
INITERRORINFOSREQ, //初始化错误信息
VERSIONREQ, //获取版本信息
};
enum DATATYPE {
iBOOL = 0,
iSHORT,
iUSHORT,
iINT,
iUINT,
iFLOAT,
iSTRING,
iWORD,
};
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, //定时数据
INITERRORINFOSRSP, //返回初始化错误信息
VERSIONRSP, //返回版本信息
};
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<std::mutex> lock(m_msgLock);
if (m_msgList.empty()) {
return false;
}
else {
WriteData* wd = m_msgList.front();
if (!wd) return false;
msg = *wd;
delete wd;
m_msgList.pop_front();
return true;
}
}
void SetPushMsg(WriteData* msg) {
std::lock_guard<std::mutex> 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<WriteData*> m_msgList; //信息缓存区
std::mutex m_msgLock; //信息锁
};