7 #include "base/object_pool.h" 9 #include "util/asio/io_context.h" 10 #include "util/asio/connection_handler.h" 11 #include "util/rpc/frame_format.h" 12 #include "util/rpc/rpc_connection.h" 17 using namespace boost;
29 system::error_code HandleRequest()
final override;
32 bool FlushWrites()
override;
36 bool FlushWritesInternal();
39 void OnOpenSocket()
final;
40 void OnCloseSocket()
final;
42 std::unique_ptr<ConnectionBridge> bridge_;
44 struct RpcItem :
public intrusive::slist_base_hook<intrusive::link_mode<intrusive::normal_link>> {
49 RpcItem(RpcId i,
Envelope env) : id(i), envelope(std::move(env)) {
53 return envelope.buf_seq();
56 using ItemList = intrusive::slist<RpcItem, intrusive::cache_last<true>>;
58 system::error_code ec_;
59 base::ObjectPool<RpcItem> rpc_items_;
60 ItemList outgoing_buf_;
63 std::vector<asio::const_buffer> write_seq_;
64 base::PODArray<std::array<uint8_t, rpc::Frame::kMaxByteSize>> frame_buf_;
65 uint64_t req_flushes_ = 0;