]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:nil -*- |
2 | // vim: ts=8 sw=2 smarttab | |
3 | ||
4 | #pragma once | |
5 | ||
6 | #include <deque> | |
7 | #include "crimson/net/Dispatcher.h" | |
8 | ||
9 | // in existing Messenger, dispatchers are put into a chain as described by | |
10 | // chain-of-responsibility pattern. we could do the same to stop processing | |
11 | // the message once any of the dispatchers claims this message, and prevent | |
12 | // other dispatchers from reading it. but this change is more involved as | |
13 | // it requires changing the ms_ methods to return a bool. so as an intermediate | |
14 | // solution, we are using an observer dispatcher to notify all the interested | |
15 | // or unintersted parties. | |
9f95a23c | 16 | class ChainedDispatchers : public crimson::net::Dispatcher { |
11fdf7f2 TL |
17 | std::deque<Dispatcher*> dispatchers; |
18 | public: | |
19 | void push_front(Dispatcher* dispatcher) { | |
20 | dispatchers.push_front(dispatcher); | |
21 | } | |
22 | void push_back(Dispatcher* dispatcher) { | |
23 | dispatchers.push_back(dispatcher); | |
24 | } | |
9f95a23c TL |
25 | seastar::future<> ms_dispatch(crimson::net::Connection* conn, MessageRef m) override; |
26 | seastar::future<> ms_handle_accept(crimson::net::ConnectionRef conn) override; | |
27 | seastar::future<> ms_handle_connect(crimson::net::ConnectionRef conn) override; | |
28 | seastar::future<> ms_handle_reset(crimson::net::ConnectionRef conn) override; | |
29 | seastar::future<> ms_handle_remote_reset(crimson::net::ConnectionRef conn) override; | |
11fdf7f2 | 30 | }; |