#pragma once #include #include #include #include #include #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::ResponseAny** 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* stream) override; ::grpc::Status Simple(::grpc::ServerContext* context, const ::stream::RequestInfo* request, ::stream::ResponseAny* 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 m_server; };