GrpcPrint/PrintS/DataManage/StreamServer.h

58 lines
1.5 KiB
C++

#pragma once
#include <thread>
#include <vector>
#include <string>
#include <grpcpp/grpcpp.h>
#include <grpc/support/log.h>
#include "../protobuf/stream.grpc.pb.h"
#include "ClientInfo.h"
#include "../Machine/Machine.h"
using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;
using stream::Stream;
using stream::RequestInfo;
using stream::ResponseInfo;
class StreamServer final : public Stream::Service {
typedef void (*DataCallBack)(void* pthis,const ReadData& msg);
typedef void (*LayerDataCallBack)(void* pthis, const ReadData& msg, ::stream::LayerData** response);
public:
StreamServer(Machine* pConfig);
~StreamServer();
void Init();
void Run();
void Stop();
void SetCallBackFunc(void* pdata,DataCallBack dataCallBack, LayerDataCallBack layerCB) {
m_dataCallBack = dataCallBack;
m_handlePtr = pdata;
m_layerDataCallBack = layerCB;
}
private:
Status AllStream(ServerContext* context, grpc::ServerReaderWriter<ResponseInfo, RequestInfo>* stream) override;
::grpc::Status Simple(::grpc::ServerContext* context, const ::stream::RequestInfo* request, ::stream::LayerData* response);
private:
std::thread m_checkCloseTd; //检测客户端关闭线程
bool m_checkQuitFlag;
DataCallBack m_dataCallBack;
LayerDataCallBack m_layerDataCallBack;
int m_port; //监听端口
void* m_handlePtr;
Machine* m_machine;
std::thread m_listenTd;
std::unique_ptr<Server> m_server;
};