| | |
| | | return ProcNode().ServerSendReply(src, rep); |
| | | } |
| | | |
| | | int BHCleanUp() |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | namespace |
| | | { |
| | | typedef std::function<bool(const void *, const int)> ServerSender; |
| | | } // namespace |
| | | |
| | | void BHStartWorker(FServerCallback server_cb, FSubDataCallback sub_cb, FClientCallback client_cb) |
| | | { |
| | | TopicNode::ServerCB on_req; |
| | | TopicNode::ServerAsyncCB on_req; |
| | | TopicNode::SubDataCB on_sub; |
| | | TopicNode::RequestResultCB on_reply; |
| | | if (server_cb) { |
| | | on_req = [server_cb](const std::string &proc_id, const MsgRequestTopic &request, MsgRequestTopicReply &reply) { |
| | | on_req = [server_cb](void *src, std::string &proc_id, const MsgRequestTopic &request) { |
| | | std::string sreq(request.SerializeAsString()); |
| | | bool r = false; |
| | | ServerSender sender = [&](const void *p, const int len) { |
| | | r = reply.ParseFromArray(p, len); |
| | | return r; |
| | | }; |
| | | server_cb(proc_id.data(), proc_id.size(), sreq.data(), sreq.size(), &sender); |
| | | return r; |
| | | server_cb(proc_id.data(), proc_id.size(), sreq.data(), sreq.size(), src); |
| | | }; |
| | | } |
| | | if (sub_cb) { |
| | |
| | | } |
| | | |
| | | ProcNode().Start(on_req, on_sub, on_reply); |
| | | } |
| | | int BHServerCallbackReply(const void *tag, |
| | | const void *data, |
| | | const int data_len) |
| | | { |
| | | auto &sender = *(const ServerSender *) (tag); |
| | | return sender(data, data_len); |
| | | } |
| | | |
| | | void BHFree(void *data, int size) |