#pragma once #include #include #include #include #include #include "../protobuf/stream.grpc.pb.h" #include "RWData.h" using grpc::Channel; using grpc::ClientContext; using grpc::Status; using stream::Stream; using stream::RequestInfo; using stream::ResponseInfo; class StreamClient { typedef void (*DataCallBack)(void* pthis, const ReadData& msg); public: StreamClient(); ~StreamClient(); void Init(); void AllStream(); //双向流式 void Stop(); void SetCallBackFunc(void* pthis, DataCallBack dataCallBack) { m_handlePtr = pthis; m_dataCallBack = dataCallBack; } void SetPushMsg(const WriteData& msg); bool GetLayerByIndex(int index, ::stream::ResponseInfo* response); private: bool GetPushMsg(WriteData& msg); private: std::unique_ptr m_stubTwo; //双端流使用 std::shared_ptr m_channelTwo; std::unique_ptr m_stub; //请求 回复使用 std::string m_localIp; int m_port; //服务端口 DataCallBack m_dataCallBack; bool m_readQuitFlag; bool m_writeQuitFlag; std::thread m_readTd; std::thread m_writeTd; std::thread m_connectTd; std::list m_msgList; //信息缓存区 std::mutex m_msgLock; //信息锁 void* m_handlePtr; };