| | |
| | | } |
| | | } |
| | | |
| | | Handler Combine(const Handler &h1, const Handler &h2) |
| | | { |
| | | return [h1, h2](ShmSocket &socket, bhome_msg::MsgI &msg, bhome_msg::BHMsgHead &head) { |
| | | return h1(socket, msg, head) || h2(socket, msg, head); |
| | | }; |
| | | } |
| | | template <class... H> |
| | | Handler Combine(const Handler &h0, const Handler &h1, const Handler &h2, const H &...rest) |
| | | { |
| | | return Combine(Combine(h0, h1), h2, rest...); |
| | | } |
| | | |
| | | #define CASE_ON_MSG_TYPE(MsgTag) \ |
| | | case kMsgType##MsgTag: \ |
| | | Dispatch<Msg##MsgTag>( \ |
| | |
| | | center->PassRemoteReplyToLocal(dest, head, std::move(body_content)); |
| | | } |
| | | }; |
| | | if (!tcp_proxy.Request(head.dest().ip(), head.dest().port(), msg.content(), onResult)) { |
| | | uint16_t port = head.dest().port(); |
| | | if (port == 0) { |
| | | port = kBHCenterPort; |
| | | } |
| | | if (!tcp_proxy.Request(head.dest().ip(), port, msg.content(), onResult)) { |
| | | replyer(MakeReply<Reply>(eError, "send request failed.")); |
| | | } else { |
| | | // success |