Commit 8454845b authored by Dominik Charousset's avatar Dominik Charousset

Streamline socket manager and processing layer API

parent 2da2b91a
...@@ -20,7 +20,7 @@ namespace caf::net::binary { ...@@ -20,7 +20,7 @@ namespace caf::net::binary {
/// Translates between a message-oriented transport and data flows. /// Translates between a message-oriented transport and data flows.
template <class Trait> template <class Trait>
class flow_bridge : public web_socket::upper_layer { class flow_bridge : public upper_layer {
public: public:
using input_type = typename Trait::input_type; using input_type = typename Trait::input_type;
...@@ -56,8 +56,8 @@ public: ...@@ -56,8 +56,8 @@ public:
// -- implementation of web_socket::lower_layer ------------------------------ // -- implementation of web_socket::lower_layer ------------------------------
error init(net::socket_manager* mgr, web_socket::lower_layer* down, error start(net::socket_manager* mgr, web_socket::lower_layer* down,
const settings& cfg) override { const settings& cfg) override {
CAF_ASSERT(mgr != nullptr); CAF_ASSERT(mgr != nullptr);
down_ = down; down_ = down;
auto [err, pull, push] = conn_->on_request(cfg); auto [err, pull, push] = conn_->on_request(cfg);
......
...@@ -21,7 +21,7 @@ public: ...@@ -21,7 +21,7 @@ public:
/// @param down A pointer to the lower layer that remains valid for the /// @param down A pointer to the lower layer that remains valid for the
/// lifetime of the upper layer. /// lifetime of the upper layer.
/// @param config Protocol-dependent configuration parameters. /// @param config Protocol-dependent configuration parameters.
virtual error init(lower_layer* down, const settings& config) = 0; virtual error start(lower_layer* down, const settings& config) = 0;
/// Consumes bytes from the lower layer. /// Consumes bytes from the lower layer.
/// @param payload Payload of the received message. /// @param payload Payload of the received message.
......
...@@ -40,16 +40,20 @@ public: ...@@ -40,16 +40,20 @@ public:
// -- implementation of socket_event_layer ----------------------------------- // -- implementation of socket_event_layer -----------------------------------
error init(socket_manager* owner, const settings& cfg) override { error start(socket_manager* owner, const settings& cfg) override {
CAF_LOG_TRACE(""); CAF_LOG_TRACE("");
owner_ = owner; owner_ = owner;
cfg_ = cfg; cfg_ = cfg;
if (auto err = factory_.init(owner, cfg)) if (auto err = factory_.start(owner, cfg))
return err; return err;
owner->register_reading(); owner->register_reading();
return none; return none;
} }
socket handle() const override {
return fd_;
}
void handle_read_event() override { void handle_read_event() override {
CAF_LOG_TRACE(""); CAF_LOG_TRACE("");
CAF_ASSERT(owner_ != nullptr); CAF_ASSERT(owner_ != nullptr);
...@@ -60,7 +64,7 @@ public: ...@@ -60,7 +64,7 @@ public:
owner_->deregister(); owner_->deregister();
return; return;
} }
if (auto err = child->init(cfg_)) { if (auto err = child->start(cfg_)) {
CAF_LOG_ERROR("failed to initialize new child:" << err); CAF_LOG_ERROR("failed to initialize new child:" << err);
owner_->deregister(); owner_->deregister();
return; return;
......
...@@ -56,9 +56,9 @@ public: ...@@ -56,9 +56,9 @@ public:
// -- public member functions ------------------------------------------------ // -- public member functions ------------------------------------------------
error init(endpoint_manager& manager) override { error start(endpoint_manager& manager) override {
CAF_LOG_TRACE(""); CAF_LOG_TRACE("");
if (auto err = super::init(manager)) if (auto err = super::start(manager))
return err; return err;
prepare_next_read(); prepare_next_read();
return none; return none;
......
...@@ -64,7 +64,7 @@ public: ...@@ -64,7 +64,7 @@ public:
void abort(const error& reason) override; void abort(const error& reason) override;
error init(net::http::lower_layer* down, const settings& config) override; error start(net::http::lower_layer* down, const settings& config) override;
ptrdiff_t consume(const net::http::header& hdr, ptrdiff_t consume(const net::http::header& hdr,
const_byte_span payload) override; const_byte_span payload) override;
...@@ -89,7 +89,7 @@ public: ...@@ -89,7 +89,7 @@ public:
// nop // nop
} }
error init(net::socket_manager*, const settings&) { error start(net::socket_manager*, const settings&) {
return none; return none;
} }
...@@ -98,7 +98,7 @@ public: ...@@ -98,7 +98,7 @@ public:
auto app = http_flow_adapter::make(mpx, producer_); auto app = http_flow_adapter::make(mpx, producer_);
auto serv = net::http::server::make(std::move(app)); auto serv = net::http::server::make(std::move(app));
auto transport = Transport::make(fd, std::move(serv)); auto transport = Transport::make(fd, std::move(serv));
auto res = net::socket_manager::make(mpx, fd, std::move(transport)); auto res = net::socket_manager::make(mpx, std::move(transport));
mpx->watch(res->as_disposable()); mpx->watch(res->as_disposable());
return res; return res;
} }
...@@ -139,8 +139,8 @@ disposable serve(actor_system& sys, Socket fd, ...@@ -139,8 +139,8 @@ disposable serve(actor_system& sys, Socket fd,
auto producer = detail::http_request_producer::make(std::move(buf)); auto producer = detail::http_request_producer::make(std::move(buf));
auto factory = factory_t{std::move(producer)}; auto factory = factory_t{std::move(producer)};
auto impl = impl_t::make(fd, limit, std::move(factory)); auto impl = impl_t::make(fd, limit, std::move(factory));
auto ptr = socket_manager::make(&mpx, fd, std::move(impl)); auto ptr = socket_manager::make(&mpx, std::move(impl));
mpx.init(ptr); mpx.start(ptr);
return ptr->as_disposable(); return ptr->as_disposable();
} else { } else {
return disposable{}; return disposable{};
......
...@@ -103,8 +103,8 @@ public: ...@@ -103,8 +103,8 @@ public:
// -- stream_oriented::upper_layer implementation ---------------------------- // -- stream_oriented::upper_layer implementation ----------------------------
error init(stream_oriented::lower_layer* down, error start(stream_oriented::lower_layer* down,
const settings& config) override; const settings& config) override;
void abort(const error& reason) override; void abort(const error& reason) override;
......
...@@ -20,7 +20,7 @@ public: ...@@ -20,7 +20,7 @@ public:
/// Initializes the upper layer. /// Initializes the upper layer.
/// @param down A pointer to the lower layer that remains valid for the /// @param down A pointer to the lower layer that remains valid for the
/// lifetime of the upper layer. /// lifetime of the upper layer.
virtual error init(lower_layer* down, const settings& config) = 0; virtual error start(lower_layer* down, const settings& config) = 0;
/// Consumes an HTTP message. /// Consumes an HTTP message.
/// @param hdr The header fields for the received message. /// @param hdr The header fields for the received message.
......
...@@ -52,8 +52,8 @@ public: ...@@ -52,8 +52,8 @@ public:
// -- implementation of stream_oriented::upper_layer ------------------------- // -- implementation of stream_oriented::upper_layer -------------------------
error init(stream_oriented::lower_layer* down, error start(stream_oriented::lower_layer* down,
const settings& config) override; const settings& config) override;
void abort(const error& reason) override; void abort(const error& reason) override;
......
...@@ -64,8 +64,8 @@ public: ...@@ -64,8 +64,8 @@ public:
// nop // nop
} }
error init(net::socket_manager* mgr, binary::lower_layer* down, error start(net::socket_manager* mgr, binary::lower_layer* down,
const settings&) { const settings&) {
down_ = down; down_ = down;
if (auto in = make_consumer_adapter(in_res_, mgr->mpx_ptr(), if (auto in = make_consumer_adapter(in_res_, mgr->mpx_ptr(),
do_wakeup_cb())) { do_wakeup_cb())) {
......
...@@ -109,7 +109,7 @@ public: ...@@ -109,7 +109,7 @@ public:
/// Registers `mgr` for initialization in the multiplexer's thread. /// Registers `mgr` for initialization in the multiplexer's thread.
/// @thread-safe /// @thread-safe
void init(socket_manager_ptr mgr); void start(socket_manager_ptr mgr);
/// Signals the multiplexer to initiate shutdown. /// Signals the multiplexer to initiate shutdown.
/// @thread-safe /// @thread-safe
...@@ -227,7 +227,7 @@ private: ...@@ -227,7 +227,7 @@ private:
void do_register_reading(const socket_manager_ptr& mgr); void do_register_reading(const socket_manager_ptr& mgr);
void do_init(const socket_manager_ptr& mgr); void do_start(const socket_manager_ptr& mgr);
}; };
} // namespace caf::net } // namespace caf::net
...@@ -25,7 +25,7 @@ public: ...@@ -25,7 +25,7 @@ public:
using msg_buf = std::array<std::byte, sizeof(intptr_t) + 1>; using msg_buf = std::array<std::byte, sizeof(intptr_t) + 1>;
enum class code : uint8_t { enum class code : uint8_t {
init_manager, start_manager,
shutdown_reading, shutdown_reading,
shutdown_writing, shutdown_writing,
run_action, run_action,
...@@ -42,7 +42,9 @@ public: ...@@ -42,7 +42,9 @@ public:
// -- implementation of socket_event_layer ----------------------------------- // -- implementation of socket_event_layer -----------------------------------
error init(socket_manager* owner, const settings& cfg) override; error start(socket_manager* owner, const settings& cfg) override;
socket handle() const override;
void handle_read_event() override; void handle_read_event() override;
......
...@@ -21,7 +21,7 @@ public: ...@@ -21,7 +21,7 @@ public:
// nop // nop
} }
error init(net::socket_manager*, const settings&) { error start(net::socket_manager*, const settings&) {
return none; return none;
} }
...@@ -30,7 +30,7 @@ public: ...@@ -30,7 +30,7 @@ public:
auto prom_serv = net::prometheus::server::make(ptr_); auto prom_serv = net::prometheus::server::make(ptr_);
auto http_serv = net::http::server::make(std::move(prom_serv)); auto http_serv = net::http::server::make(std::move(prom_serv));
auto transport = Transport::make(fd, std::move(http_serv)); auto transport = Transport::make(fd, std::move(http_serv));
return net::socket_manager::make(mpx, fd, std::move(transport)); return net::socket_manager::make(mpx, std::move(transport));
} }
void abort(const error&) { void abort(const error&) {
...@@ -58,8 +58,8 @@ disposable serve(actor_system& sys, Socket fd) { ...@@ -58,8 +58,8 @@ disposable serve(actor_system& sys, Socket fd) {
auto state = prometheus::server::scrape_state::make(registry); auto state = prometheus::server::scrape_state::make(registry);
auto factory = factory_t{std::move(state)}; auto factory = factory_t{std::move(state)};
auto impl = impl_t::make(fd, 0, std::move(factory)); auto impl = impl_t::make(fd, 0, std::move(factory));
auto mgr = socket_manager::make(mpx, fd, std::move(impl)); auto mgr = socket_manager::make(mpx, std::move(impl));
mpx->init(mgr); mpx->start(mgr);
return mgr->as_disposable(); return mgr->as_disposable();
} }
......
...@@ -61,7 +61,7 @@ public: ...@@ -61,7 +61,7 @@ public:
void abort(const error& reason) override; void abort(const error& reason) override;
error init(http::lower_layer* down, const settings& config) override; error start(http::lower_layer* down, const settings& config) override;
ptrdiff_t consume(const http::header& hdr, const_byte_span payload) override; ptrdiff_t consume(const http::header& hdr, const_byte_span payload) override;
......
...@@ -16,8 +16,11 @@ class CAF_NET_EXPORT socket_event_layer { ...@@ -16,8 +16,11 @@ class CAF_NET_EXPORT socket_event_layer {
public: public:
virtual ~socket_event_layer(); virtual ~socket_event_layer();
/// Initializes the layer. /// Starts processing on this layer.
virtual error init(socket_manager* owner, const settings& cfg) = 0; virtual error start(socket_manager* owner, const settings& cfg) = 0;
/// Returns the handle for the managed socket.
virtual socket handle() const = 0;
/// Handles a read event on the managed socket. /// Handles a read event on the managed socket.
virtual void handle_read_event() = 0; virtual void handle_read_event() = 0;
......
...@@ -37,7 +37,7 @@ public: ...@@ -37,7 +37,7 @@ public:
/// @pre `handle != invalid_socket` /// @pre `handle != invalid_socket`
/// @pre `mpx!= nullptr` /// @pre `mpx!= nullptr`
socket_manager(multiplexer* mpx, socket handle, event_handler_ptr handler); socket_manager(multiplexer* mpx, event_handler_ptr handler);
~socket_manager() override; ~socket_manager() override;
...@@ -47,8 +47,7 @@ public: ...@@ -47,8 +47,7 @@ public:
// -- factories -------------------------------------------------------------- // -- factories --------------------------------------------------------------
static socket_manager_ptr make(multiplexer* mpx, socket handle, static socket_manager_ptr make(multiplexer* mpx, event_handler_ptr handler);
event_handler_ptr handler);
// -- properties ------------------------------------------------------------- // -- properties -------------------------------------------------------------
...@@ -127,8 +126,8 @@ public: ...@@ -127,8 +126,8 @@ public:
// -- callbacks for the multiplexer ------------------------------------------ // -- callbacks for the multiplexer ------------------------------------------
/// Initializes the manager and its all of its sub-components. /// Starts the manager and its all of its processing layers.
error init(const settings& cfg); error start(const settings& cfg);
/// Called whenever the socket received new data. /// Called whenever the socket received new data.
void handle_read_event(); void handle_read_event();
......
...@@ -23,7 +23,7 @@ public: ...@@ -23,7 +23,7 @@ public:
/// Initializes the upper layer. /// Initializes the upper layer.
/// @param down A pointer to the lower layer that remains valid for the /// @param down A pointer to the lower layer that remains valid for the
/// lifetime of the upper layer. /// lifetime of the upper layer.
virtual error init(lower_layer* down, const settings& config) = 0; virtual error start(lower_layer* down, const settings& config) = 0;
/// Consumes bytes from the lower layer. /// Consumes bytes from the lower layer.
/// @param buffer Available bytes to read. /// @param buffer Available bytes to read.
......
...@@ -155,7 +155,9 @@ public: ...@@ -155,7 +155,9 @@ public:
// -- implementation of socket_event_layer ----------------------------------- // -- implementation of socket_event_layer -----------------------------------
error init(socket_manager* owner, const settings& config) override; error start(socket_manager* owner, const settings& config) override;
socket handle() const override;
void handle_read_event() override; void handle_read_event() override;
......
...@@ -27,7 +27,7 @@ public: ...@@ -27,7 +27,7 @@ public:
// nop // nop
} }
error init(net::socket_manager*, const settings&) { error start(net::socket_manager*, const settings&) {
return none; return none;
} }
...@@ -36,7 +36,7 @@ public: ...@@ -36,7 +36,7 @@ public:
auto app = net::web_socket::flow_bridge<Trait>::make(mpx, connector_); auto app = net::web_socket::flow_bridge<Trait>::make(mpx, connector_);
auto ws = net::web_socket::server::make(std::move(app)); auto ws = net::web_socket::server::make(std::move(app));
auto transport = Transport::make(fd, std::move(ws)); auto transport = Transport::make(fd, std::move(ws));
return net::socket_manager::make(mpx, fd, std::move(transport)); return net::socket_manager::make(mpx, std::move(transport));
} }
void abort(const error&) { void abort(const error&) {
...@@ -97,8 +97,8 @@ void accept(actor_system& sys, Socket fd, acceptor_resource_t<Ts...> out, ...@@ -97,8 +97,8 @@ void accept(actor_system& sys, Socket fd, acceptor_resource_t<Ts...> out,
auto conn = std::make_shared<conn_t>(std::move(on_request), std::move(buf)); auto conn = std::make_shared<conn_t>(std::move(on_request), std::move(buf));
auto factory = factory_t{std::move(conn)}; auto factory = factory_t{std::move(conn)};
auto impl = impl_t::make(fd, limit, std::move(factory)); auto impl = impl_t::make(fd, limit, std::move(factory));
auto ptr = socket_manager::make(&mpx, fd, std::move(impl)); auto ptr = socket_manager::make(&mpx, std::move(impl));
mpx.init(ptr); mpx.start(ptr);
} }
// TODO: accept() should return a disposable to stop the WebSocket server. // TODO: accept() should return a disposable to stop the WebSocket server.
} }
......
...@@ -71,8 +71,8 @@ public: ...@@ -71,8 +71,8 @@ public:
// -- implementation of stream_oriented::upper_layer ------------------------- // -- implementation of stream_oriented::upper_layer -------------------------
error init(stream_oriented::lower_layer* down, error start(stream_oriented::lower_layer* down,
const settings& config) override; const settings& config) override;
void abort(const error& reason) override; void abort(const error& reason) override;
......
...@@ -36,8 +36,8 @@ void connect(actor_system& sys, Socket fd, handshake hs, Init init) { ...@@ -36,8 +36,8 @@ void connect(actor_system& sys, Socket fd, handshake hs, Init init) {
auto bridge = flow_bridge<trait_t>::make(mpx, std::move(conn)); auto bridge = flow_bridge<trait_t>::make(mpx, std::move(conn));
auto impl = client::make(std::move(hs), std::move(bridge)); auto impl = client::make(std::move(hs), std::move(bridge));
auto transport = Transport::make(fd, std::move(impl)); auto transport = Transport::make(fd, std::move(impl));
auto ptr = socket_manager::make(mpx, fd, std::move(transport)); auto ptr = socket_manager::make(mpx, std::move(transport));
mpx->init(ptr); mpx->start(ptr);
init(connect_event_t{app_pull, app_push}); init(connect_event_t{app_pull, app_push});
} }
......
...@@ -65,7 +65,7 @@ public: ...@@ -65,7 +65,7 @@ public:
// -- implementation of web_socket::lower_layer ------------------------------ // -- implementation of web_socket::lower_layer ------------------------------
error init(web_socket::lower_layer* down, const settings& cfg) override { error start(web_socket::lower_layer* down, const settings& cfg) override {
down_ = down; down_ = down;
auto [err, pull, push] = conn_->on_request(cfg); auto [err, pull, push] = conn_->on_request(cfg);
if (!err) { if (!err) {
......
...@@ -49,7 +49,7 @@ public: ...@@ -49,7 +49,7 @@ public:
// -- initialization --------------------------------------------------------- // -- initialization ---------------------------------------------------------
void init(stream_oriented::lower_layer* down); void start(stream_oriented::lower_layer* down);
// -- properties ------------------------------------------------------------- // -- properties -------------------------------------------------------------
......
...@@ -74,8 +74,8 @@ public: ...@@ -74,8 +74,8 @@ public:
// -- stream_oriented::upper_layer implementation ---------------------------- // -- stream_oriented::upper_layer implementation ----------------------------
error init(stream_oriented::lower_layer* down, error start(stream_oriented::lower_layer* down,
const settings& config) override; const settings& config) override;
void abort(const error& reason) override; void abort(const error& reason) override;
......
...@@ -16,7 +16,7 @@ class CAF_NET_EXPORT upper_layer : public generic_upper_layer { ...@@ -16,7 +16,7 @@ class CAF_NET_EXPORT upper_layer : public generic_upper_layer {
public: public:
virtual ~upper_layer(); virtual ~upper_layer();
virtual error init(lower_layer* down, const settings& cfg) = 0; virtual error start(lower_layer* down, const settings& cfg) = 0;
virtual ptrdiff_t consume_binary(byte_span buf) = 0; virtual ptrdiff_t consume_binary(byte_span buf) = 0;
virtual ptrdiff_t consume_text(std::string_view buf) = 0; virtual ptrdiff_t consume_text(std::string_view buf) = 0;
}; };
......
...@@ -48,7 +48,7 @@ void http_flow_adapter::abort(const error&) { ...@@ -48,7 +48,7 @@ void http_flow_adapter::abort(const error&) {
pending.dispose(); pending.dispose();
} }
error http_flow_adapter::init(net::http::lower_layer* down, const settings&) { error http_flow_adapter::start(net::http::lower_layer* down, const settings&) {
down_ = down; down_ = down;
down_->request_messages(); down_->request_messages();
return none; return none;
......
...@@ -80,11 +80,11 @@ bool server::send_end_of_chunks() { ...@@ -80,11 +80,11 @@ bool server::send_end_of_chunks() {
// -- stream_oriented::upper_layer implementation ------------------------------ // -- stream_oriented::upper_layer implementation ------------------------------
error server::init(stream_oriented::lower_layer* down, const settings& cfg) { error server::start(stream_oriented::lower_layer* down, const settings& cfg) {
down_ = down; down_ = down;
if (auto max_size = get_as<uint32_t>(cfg, "http.max-request-size")) if (auto max_size = get_as<uint32_t>(cfg, "http.max-request-size"))
max_request_size_ = *max_size; max_request_size_ = *max_size;
if (auto err = up_->init(this, cfg)) if (auto err = up_->start(this, cfg))
return err; return err;
else else
return none; return none;
......
...@@ -24,10 +24,10 @@ length_prefix_framing::make(upper_layer_ptr up) { ...@@ -24,10 +24,10 @@ length_prefix_framing::make(upper_layer_ptr up) {
// -- implementation of stream_oriented::upper_layer --------------------------- // -- implementation of stream_oriented::upper_layer ---------------------------
error length_prefix_framing::init(stream_oriented::lower_layer* down, error length_prefix_framing::start(stream_oriented::lower_layer* down,
const settings& cfg) { const settings& cfg) {
down_ = down; down_ = down;
return up_->init(this, cfg); return up_->start(this, cfg);
} }
void length_prefix_framing::abort(const error& reason) { void length_prefix_framing::abort(const error& reason) {
......
...@@ -110,9 +110,8 @@ error multiplexer::init() { ...@@ -110,9 +110,8 @@ error multiplexer::init() {
if (!pipe_handles) if (!pipe_handles)
return std::move(pipe_handles.error()); return std::move(pipe_handles.error());
auto updater = pollset_updater::make(pipe_handles->first); auto updater = pollset_updater::make(pipe_handles->first);
auto mgr = socket_manager::make(this, pipe_handles->first, auto mgr = socket_manager::make(this, std::move(updater));
std::move(updater)); if (auto err = mgr->start(settings{}))
if (auto err = mgr->init(settings{}))
return err; return err;
write_handle_ = pipe_handles->second; write_handle_ = pipe_handles->second;
pollset_.emplace_back(pollfd{pipe_handles->first.id, input_mask, 0}); pollset_.emplace_back(pollfd{pipe_handles->first.id, input_mask, 0});
...@@ -182,12 +181,12 @@ void multiplexer::watch(disposable what) { ...@@ -182,12 +181,12 @@ void multiplexer::watch(disposable what) {
// -- thread-safe signaling ---------------------------------------------------- // -- thread-safe signaling ----------------------------------------------------
void multiplexer::init(socket_manager_ptr mgr) { void multiplexer::start(socket_manager_ptr mgr) {
CAF_LOG_TRACE(CAF_ARG2("socket", mgr->handle().id)); CAF_LOG_TRACE(CAF_ARG2("socket", mgr->handle().id));
if (std::this_thread::get_id() == tid_) { if (std::this_thread::get_id() == tid_) {
do_init(mgr); do_start(mgr);
} else { } else {
write_to_pipe(pollset_updater::code::init_manager, mgr.release()); write_to_pipe(pollset_updater::code::start_manager, mgr.release());
} }
} }
...@@ -455,14 +454,14 @@ void multiplexer::do_shutdown() { ...@@ -455,14 +454,14 @@ void multiplexer::do_shutdown() {
apply_updates(); apply_updates();
} }
void multiplexer::do_init(const socket_manager_ptr& mgr) { void multiplexer::do_start(const socket_manager_ptr& mgr) {
CAF_LOG_TRACE(CAF_ARG2("socket", mgr->handle().id)); CAF_LOG_TRACE(CAF_ARG2("socket", mgr->handle().id));
if (!shutting_down_) { if (!shutting_down_) {
error err; error err;
if (owner_) if (owner_)
err = mgr->init(content(system().config())); err = mgr->start(content(system().config()));
else else
err = mgr->init(settings{}); err = mgr->start(settings{});
if (err) { if (err) {
CAF_LOG_DEBUG("mgr->init failed: " << err); CAF_LOG_DEBUG("mgr->init failed: " << err);
// The socket manager should not register itself for any events if // The socket manager should not register itself for any events if
......
...@@ -29,13 +29,17 @@ std::unique_ptr<pollset_updater> pollset_updater::make(pipe_socket fd) { ...@@ -29,13 +29,17 @@ std::unique_ptr<pollset_updater> pollset_updater::make(pipe_socket fd) {
// -- interface functions ------------------------------------------------------ // -- interface functions ------------------------------------------------------
error pollset_updater::init(socket_manager* owner, const settings&) { error pollset_updater::start(socket_manager* owner, const settings&) {
CAF_LOG_TRACE(""); CAF_LOG_TRACE("");
owner_ = owner; owner_ = owner;
mpx_ = owner->mpx_ptr(); mpx_ = owner->mpx_ptr();
return nonblocking(fd_, true); return nonblocking(fd_, true);
} }
socket pollset_updater::handle() const {
return fd_;
}
void pollset_updater::handle_read_event() { void pollset_updater::handle_read_event() {
CAF_LOG_TRACE(""); CAF_LOG_TRACE("");
auto as_mgr = [](intptr_t ptr) { auto as_mgr = [](intptr_t ptr) {
...@@ -57,8 +61,8 @@ void pollset_updater::handle_read_event() { ...@@ -57,8 +61,8 @@ void pollset_updater::handle_read_event() {
intptr_t ptr; intptr_t ptr;
memcpy(&ptr, buf_.data() + 1, sizeof(intptr_t)); memcpy(&ptr, buf_.data() + 1, sizeof(intptr_t));
switch (static_cast<code>(opcode)) { switch (static_cast<code>(opcode)) {
case code::init_manager: case code::start_manager:
mpx_->do_init(as_mgr(ptr)); mpx_->do_start(as_mgr(ptr));
break; break;
case code::run_action: case code::run_action:
run_action(ptr); run_action(ptr);
......
...@@ -36,7 +36,7 @@ void server::abort(const error&) { ...@@ -36,7 +36,7 @@ void server::abort(const error&) {
// nop // nop
} }
error server::init(http::lower_layer* down, const settings&) { error server::start(http::lower_layer* down, const settings&) {
down_ = down; down_ = down;
down_->request_messages(); down_->request_messages();
return caf::none; return caf::none;
......
...@@ -13,9 +13,11 @@ namespace caf::net { ...@@ -13,9 +13,11 @@ namespace caf::net {
// -- constructors, destructors, and assignment operators ---------------------- // -- constructors, destructors, and assignment operators ----------------------
socket_manager::socket_manager(multiplexer* mpx, socket fd, socket_manager::socket_manager(multiplexer* mpx, event_handler_ptr handler)
event_handler_ptr handler) : fd_(handler->handle()),
: fd_(fd), mpx_(mpx), handler_(std::move(handler)), disposed_(false) { mpx_(mpx),
handler_(std::move(handler)),
disposed_(false) {
CAF_ASSERT(fd_ != invalid_socket); CAF_ASSERT(fd_ != invalid_socket);
CAF_ASSERT(mpx_ != nullptr); CAF_ASSERT(mpx_ != nullptr);
CAF_ASSERT(handler_ != nullptr); CAF_ASSERT(handler_ != nullptr);
...@@ -28,11 +30,10 @@ socket_manager::~socket_manager() { ...@@ -28,11 +30,10 @@ socket_manager::~socket_manager() {
// -- factories ---------------------------------------------------------------- // -- factories ----------------------------------------------------------------
socket_manager_ptr socket_manager::make(multiplexer* mpx, socket handle, socket_manager_ptr socket_manager::make(multiplexer* mpx,
event_handler_ptr handler) { event_handler_ptr handler) {
CAF_ASSERT(mpx != nullptr); CAF_ASSERT(mpx != nullptr);
return make_counted<socket_manager>(std::move(mpx), handle, return make_counted<socket_manager>(std::move(mpx), std::move(handler));
std::move(handler));
} }
// -- properties --------------------------------------------------------------- // -- properties ---------------------------------------------------------------
...@@ -108,13 +109,14 @@ void socket_manager::shutdown() { ...@@ -108,13 +109,14 @@ void socket_manager::shutdown() {
// -- callbacks for the multiplexer -------------------------------------------- // -- callbacks for the multiplexer --------------------------------------------
error socket_manager::init(const settings& cfg) { error socket_manager::start(const settings& cfg) {
CAF_LOG_TRACE(CAF_ARG(cfg)); CAF_LOG_TRACE(CAF_ARG(cfg));
if (auto err = nonblocking(fd_, true)) { if (auto err = nonblocking(fd_, true)) {
CAF_LOG_ERROR("failed to set nonblocking flag in socket:" << err); CAF_LOG_ERROR("failed to set nonblocking flag in socket:" << err);
return err; return err;
} else {
return handler_->start(this, cfg);
} }
return handler_->init(this, cfg);
} }
void socket_manager::handle_read_event() { void socket_manager::handle_read_event() {
......
...@@ -35,7 +35,7 @@ public: ...@@ -35,7 +35,7 @@ public:
// -- interface functions ---------------------------------------------------- // -- interface functions ----------------------------------------------------
error init(socket_manager* owner, const settings& cfg) override { error start(socket_manager* owner, const settings& cfg) override {
owner_ = owner; owner_ = owner;
cfg_ = cfg; cfg_ = cfg;
owner->register_writing(); owner->register_writing();
...@@ -102,7 +102,7 @@ public: ...@@ -102,7 +102,7 @@ public:
bool do_handover(std::unique_ptr<socket_event_layer>& next) override { bool do_handover(std::unique_ptr<socket_event_layer>& next) override {
next = transport::make(std::move(policy_.conn), std::move(up_)); next = transport::make(std::move(policy_.conn), std::move(up_));
if (auto err = next->init(owner_, cfg_)) if (auto err = next->start(owner_, cfg_))
return false; return false;
else else
return true; return true;
......
...@@ -127,7 +127,7 @@ void stream_transport::shutdown() { ...@@ -127,7 +127,7 @@ void stream_transport::shutdown() {
// -- implementation of transport ---------------------------------------------- // -- implementation of transport ----------------------------------------------
error stream_transport::init(socket_manager* owner, const settings& config) { error stream_transport::start(socket_manager* owner, const settings& config) {
parent_ = owner; parent_ = owner;
namespace mm = defaults::middleman; namespace mm = defaults::middleman;
auto default_max_reads = static_cast<uint32_t>(mm::max_consecutive_reads); auto default_max_reads = static_cast<uint32_t>(mm::max_consecutive_reads);
...@@ -145,7 +145,11 @@ error stream_transport::init(socket_manager* owner, const settings& config) { ...@@ -145,7 +145,11 @@ error stream_transport::init(socket_manager* owner, const settings& config) {
CAF_LOG_ERROR("send_buffer_size: " << socket_buf_size.error()); CAF_LOG_ERROR("send_buffer_size: " << socket_buf_size.error());
return std::move(socket_buf_size.error()); return std::move(socket_buf_size.error());
} }
return up_->init(this, config); return up_->start(this, config);
}
socket stream_transport::handle() const {
return fd_;
} }
void stream_transport::handle_read_event() { void stream_transport::handle_read_event() {
......
...@@ -38,9 +38,9 @@ std::unique_ptr<client> client::make(handshake_ptr hs, upper_layer_ptr up) { ...@@ -38,9 +38,9 @@ std::unique_ptr<client> client::make(handshake_ptr hs, upper_layer_ptr up) {
// -- implementation of stream_oriented::upper_layer --------------------------- // -- implementation of stream_oriented::upper_layer ---------------------------
error client::init(stream_oriented::lower_layer* down, const settings& cfg) { error client::start(stream_oriented::lower_layer* down, const settings& cfg) {
CAF_ASSERT(hs_ != nullptr); CAF_ASSERT(hs_ != nullptr);
framing_.init(down); framing_.start(down);
if (!hs_->has_mandatory_fields()) if (!hs_->has_mandatory_fields())
return make_error(sec::runtime_error, return make_error(sec::runtime_error,
"handshake data lacks mandatory fields"); "handshake data lacks mandatory fields");
...@@ -110,7 +110,7 @@ bool client::handle_header(std::string_view http) { ...@@ -110,7 +110,7 @@ bool client::handle_header(std::string_view http) {
auto http_ok = hs_->is_valid_http_1_response(http); auto http_ok = hs_->is_valid_http_1_response(http);
hs_.reset(); hs_.reset();
if (http_ok) { if (http_ok) {
if (auto err = upper_layer().init(&framing_, cfg_)) { if (auto err = upper_layer().start(&framing_, cfg_)) {
CAF_LOG_DEBUG("failed to initialize WebSocket framing layer"); CAF_LOG_DEBUG("failed to initialize WebSocket framing layer");
return false; return false;
} else { } else {
......
...@@ -10,7 +10,7 @@ namespace caf::net::web_socket { ...@@ -10,7 +10,7 @@ namespace caf::net::web_socket {
// -- initialization --------------------------------------------------------- // -- initialization ---------------------------------------------------------
void framing::init(stream_oriented::lower_layer* down) { void framing::start(stream_oriented::lower_layer* down) {
std::random_device rd; std::random_device rd;
rng_.seed(rd()); rng_.seed(rd());
down_ = down; down_ = down;
......
...@@ -22,8 +22,8 @@ std::unique_ptr<server> server::make(upper_layer_ptr up) { ...@@ -22,8 +22,8 @@ std::unique_ptr<server> server::make(upper_layer_ptr up) {
// -- stream_oriented::upper_layer implementation ------------------------------ // -- stream_oriented::upper_layer implementation ------------------------------
error server::init(stream_oriented::lower_layer* down, const settings& cfg) { error server::start(stream_oriented::lower_layer* down, const settings& cfg) {
framing_.init(down); framing_.start(down);
cfg_ = cfg; cfg_ = cfg;
lower_layer().configure_read(receive_policy::up_to(handshake::max_http_size)); lower_layer().configure_read(receive_policy::up_to(handshake::max_http_size));
return none; return none;
...@@ -126,7 +126,7 @@ bool server::handle_header(std::string_view http) { ...@@ -126,7 +126,7 @@ bool server::handle_header(std::string_view http) {
put(fields, std::string{key}, std::string{val}); put(fields, std::string{key}, std::string{val});
} }
// Try to initialize the upper layer. // Try to initialize the upper layer.
if (auto err = upper_layer().init(&framing_, cfg_)) { if (auto err = upper_layer().start(&framing_, cfg_)) {
auto descr = to_string(err); auto descr = to_string(err);
CAF_LOG_DEBUG("upper layer rejected a WebSocket connection:" << descr); CAF_LOG_DEBUG("upper layer rejected a WebSocket connection:" << descr);
write_response(http::status::bad_request, descr); write_response(http::status::bad_request, descr);
......
...@@ -48,13 +48,13 @@ public: ...@@ -48,13 +48,13 @@ public:
// -- initialization --------------------------------------------------------- // -- initialization ---------------------------------------------------------
caf::error init(const caf::settings& cfg) { caf::error start(const caf::settings& cfg) {
return up->init(this, cfg); return up->start(this, cfg);
} }
caf::error init() { caf::error start() {
caf::settings cfg; caf::settings cfg;
return init(cfg); return start(cfg);
} }
// -- buffer management ------------------------------------------------------ // -- buffer management ------------------------------------------------------
......
...@@ -38,8 +38,8 @@ public: ...@@ -38,8 +38,8 @@ public:
return std::make_unique<app_t>(sys, std::move(loop), std::move(hdl)); return std::make_unique<app_t>(sys, std::move(loop), std::move(hdl));
} }
error init(net::stream_oriented::lower_layer* down, error start(net::stream_oriented::lower_layer* down,
const settings&) override { const settings&) override {
this->down = down; this->down = down;
self->set_behavior([this](std::string& line) { self->set_behavior([this](std::string& line) {
CAF_MESSAGE("received an asynchronous message: " << line); CAF_MESSAGE("received an asynchronous message: " << line);
...@@ -196,8 +196,8 @@ CAF_TEST(actor shells expose their mailbox to their owners) { ...@@ -196,8 +196,8 @@ CAF_TEST(actor shells expose their mailbox to their owners) {
auto app_uptr = app_t::make(sys, mpx); auto app_uptr = app_t::make(sys, mpx);
auto app = app_uptr.get(); auto app = app_uptr.get();
auto transport = net::stream_transport::make(fd, std::move(app_uptr)); auto transport = net::stream_transport::make(fd, std::move(app_uptr));
auto mgr = net::socket_manager::make(mpx.get(), fd, std::move(transport)); auto mgr = net::socket_manager::make(mpx.get(), std::move(transport));
if (auto err = mgr->init(content(cfg))) if (auto err = mgr->start(content(cfg)))
CAF_FAIL("mgr->init() failed: " << err); CAF_FAIL("mgr->init() failed: " << err);
auto hdl = app->self.as_actor(); auto hdl = app->self.as_actor();
anon_send(hdl, "line 1"); anon_send(hdl, "line 1");
...@@ -219,9 +219,9 @@ CAF_TEST(actor shells can send requests and receive responses) { ...@@ -219,9 +219,9 @@ CAF_TEST(actor shells can send requests and receive responses) {
auto app_uptr = app_t::make(sys, mpx, worker); auto app_uptr = app_t::make(sys, mpx, worker);
auto app = app_uptr.get(); auto app = app_uptr.get();
auto transport = net::stream_transport::make(fd, std::move(app_uptr)); auto transport = net::stream_transport::make(fd, std::move(app_uptr));
auto mgr = net::socket_manager::make(mpx.get(), fd, std::move(transport)); auto mgr = net::socket_manager::make(mpx.get(), std::move(transport));
if (auto err = mgr->init(content(cfg))) if (auto err = mgr->start(content(cfg)))
CAF_FAIL("mgr->init() failed: " << err); CAF_FAIL("mgr->start() failed: " << err);
send(input); send(input);
run_while([&] { return app->consumed_bytes != input.size(); }); run_while([&] { return app->consumed_bytes != input.size(); });
expect((int32_t), to(worker).with(123)); expect((int32_t), to(worker).with(123));
......
...@@ -48,7 +48,7 @@ public: ...@@ -48,7 +48,7 @@ public:
// -- implementation of http::upper_layer ------------------------------------ // -- implementation of http::upper_layer ------------------------------------
error init(net::http::lower_layer* down_ptr, const settings&) override { error start(net::http::lower_layer* down_ptr, const settings&) override {
down = down_ptr; down = down_ptr;
down->request_messages(); down->request_messages();
return none; return none;
...@@ -95,7 +95,7 @@ SCENARIO("the server parses HTTP GET requests into header fields") { ...@@ -95,7 +95,7 @@ SCENARIO("the server parses HTTP GET requests into header fields") {
auto app = app_ptr.get(); auto app = app_ptr.get();
auto http_ptr = net::http::server::make(std::move(app_ptr)); auto http_ptr = net::http::server::make(std::move(app_ptr));
auto serv = mock_stream_transport::make(std::move(http_ptr)); auto serv = mock_stream_transport::make(std::move(http_ptr));
CHECK_EQ(serv->init(settings{}), error{}); CHECK_EQ(serv->start(settings{}), error{});
serv->push(req); serv->push(req);
THEN("the HTTP layer parses the data and calls the application layer") { THEN("the HTTP layer parses the data and calls the application layer") {
CHECK_EQ(serv->handle_input(), static_cast<ptrdiff_t>(req.size())); CHECK_EQ(serv->handle_input(), static_cast<ptrdiff_t>(req.size()));
......
...@@ -48,8 +48,8 @@ public: ...@@ -48,8 +48,8 @@ public:
return std::make_unique<app_t>(std::move(loop), std::move(inputs)); return std::make_unique<app_t>(std::move(loop), std::move(inputs));
} }
caf::error init(net::binary::lower_layer* down_ptr, caf::error start(net::binary::lower_layer* down_ptr,
const settings&) override { const settings&) override {
// Start reading immediately. // Start reading immediately.
down = down_ptr; down = down_ptr;
down->request_messages(); down->request_messages();
...@@ -144,7 +144,7 @@ SCENARIO("length-prefix framing reads data with 32-bit size headers") { ...@@ -144,7 +144,7 @@ SCENARIO("length-prefix framing reads data with 32-bit size headers") {
auto app = app_t<false>::make(nullptr, buf); auto app = app_t<false>::make(nullptr, buf);
auto framing = net::length_prefix_framing::make(std::move(app)); auto framing = net::length_prefix_framing::make(std::move(app));
auto uut = mock_stream_transport::make(std::move(framing)); auto uut = mock_stream_transport::make(std::move(framing));
CHECK_EQ(uut->init(), error{}); CHECK_EQ(uut->start(), error{});
THEN("the app receives all strings as individual messages") { THEN("the app receives all strings as individual messages") {
encode(uut->input, "hello"); encode(uut->input, "hello");
encode(uut->input, "world"); encode(uut->input, "world");
...@@ -191,8 +191,8 @@ SCENARIO("calling suspend_reading temporarily halts receiving of messages") { ...@@ -191,8 +191,8 @@ SCENARIO("calling suspend_reading temporarily halts receiving of messages") {
auto app_ptr = app.get(); auto app_ptr = app.get();
auto framing = net::length_prefix_framing::make(std::move(app)); auto framing = net::length_prefix_framing::make(std::move(app));
auto transport = net::stream_transport::make(fd2, std::move(framing)); auto transport = net::stream_transport::make(fd2, std::move(framing));
auto mgr = net::socket_manager::make(mpx.get(), fd2, std::move(transport)); auto mgr = net::socket_manager::make(mpx.get(), std::move(transport));
CHECK_EQ(mgr->init(settings{}), none); CHECK_EQ(mgr->start(settings{}), none);
mpx->apply_updates(); mpx->apply_updates();
REQUIRE_EQ(mpx->num_socket_managers(), 2u); REQUIRE_EQ(mpx->num_socket_managers(), 2u);
CHECK_EQ(mpx->mask_of(mgr), net::operation::read); CHECK_EQ(mpx->mask_of(mgr), net::operation::read);
......
...@@ -63,11 +63,15 @@ public: ...@@ -63,11 +63,15 @@ public:
// -- implementation of socket_event_layer ----------------------------------- // -- implementation of socket_event_layer -----------------------------------
error init(net::socket_manager* mgr, const settings&) override { error start(net::socket_manager* mgr, const settings&) override {
mgr_ = mgr; mgr_ = mgr;
return none; return none;
} }
net::socket handle() const override {
return fd_;
}
void handle_read_event() override { void handle_read_event() override {
if (read_capacity() < 1024) if (read_capacity() < 1024)
rd_buf_.resize(rd_buf_.size() + 2048); rd_buf_.resize(rd_buf_.size() + 2048);
...@@ -151,8 +155,8 @@ struct fixture { ...@@ -151,8 +155,8 @@ struct fixture {
make_manager(net::stream_socket fd, std::string name) { make_manager(net::stream_socket fd, std::string name) {
auto mock = mock_event_layer::make(fd, std::move(name), manager_count); auto mock = mock_event_layer::make(fd, std::move(name), manager_count);
auto mock_ptr = mock.get(); auto mock_ptr = mock.get();
auto mgr = net::socket_manager::make(mpx.get(), fd, std::move(mock)); auto mgr = net::socket_manager::make(mpx.get(), std::move(mock));
std::ignore = mgr->init(settings{}); std::ignore = mgr->start(settings{});
return {mock_ptr, std::move(mgr)}; return {mock_ptr, std::move(mgr)};
} }
......
...@@ -36,7 +36,7 @@ SCENARIO("the Prometheus server responds to requests with scrape results") { ...@@ -36,7 +36,7 @@ SCENARIO("the Prometheus server responds to requests with scrape results") {
auto prom_serv = prometheus::server::make(prom_state); auto prom_serv = prometheus::server::make(prom_state);
auto http_serv = net::http::server::make(std::move(prom_serv)); auto http_serv = net::http::server::make(std::move(prom_serv));
auto serv = mock_stream_transport::make(std::move(http_serv)); auto serv = mock_stream_transport::make(std::move(http_serv));
CHECK_EQ(serv->init(settings{}), error{}); CHECK_EQ(serv->start(settings{}), error{});
serv->push(request_str); serv->push(request_str);
CHECK_EQ(serv->handle_input(), CHECK_EQ(serv->handle_input(),
static_cast<ptrdiff_t>(request_str.size())); static_cast<ptrdiff_t>(request_str.size()));
......
...@@ -59,8 +59,8 @@ public: ...@@ -59,8 +59,8 @@ public:
*done_ = true; *done_ = true;
} }
error init(net::stream_oriented::lower_layer* down, error start(net::stream_oriented::lower_layer* down,
const settings&) override { const settings&) override {
MESSAGE("initialize dummy app"); MESSAGE("initialize dummy app");
down_ = down; down_ = down;
down->configure_read(receive_policy::exactly(4)); down->configure_read(receive_policy::exactly(4));
...@@ -197,9 +197,8 @@ SCENARIO("ssl::transport::make_client performs the client handshake") { ...@@ -197,9 +197,8 @@ SCENARIO("ssl::transport::make_client performs the client handshake") {
auto mock = mock_application::make(done, buf); auto mock = mock_application::make(done, buf);
auto transport = ssl::transport::make_client(std::move(conn), auto transport = ssl::transport::make_client(std::move(conn),
std::move(mock)); std::move(mock));
auto mgr = net::socket_manager::make(mpx.get(), client_fd, auto mgr = net::socket_manager::make(mpx.get(), std::move(transport));
std::move(transport)); mpx->start(mgr);
mpx->init(mgr);
mpx->apply_updates(); mpx->apply_updates();
while (!*done) while (!*done)
mpx->poll_once(true); mpx->poll_once(true);
...@@ -239,9 +238,8 @@ SCENARIO("ssl::transport::make_server performs the server handshake") { ...@@ -239,9 +238,8 @@ SCENARIO("ssl::transport::make_server performs the server handshake") {
auto mock = mock_application::make(done, buf); auto mock = mock_application::make(done, buf);
auto transport = ssl::transport::make_server(std::move(conn), auto transport = ssl::transport::make_server(std::move(conn),
std::move(mock)); std::move(mock));
auto mgr = net::socket_manager::make(mpx.get(), server_fd, auto mgr = net::socket_manager::make(mpx.get(), std::move(transport));
std::move(transport)); mpx->start(mgr);
mpx->init(mgr);
mpx->apply_updates(); mpx->apply_updates();
while (!*done) while (!*done)
mpx->poll_once(true); mpx->poll_once(true);
......
...@@ -75,8 +75,8 @@ public: ...@@ -75,8 +75,8 @@ public:
net::stream_oriented::lower_layer* down; net::stream_oriented::lower_layer* down;
error init(net::stream_oriented::lower_layer* down_ptr, error start(net::stream_oriented::lower_layer* down_ptr,
const settings&) override { const settings&) override {
down = down_ptr; down = down_ptr;
down->configure_read(net::receive_policy::exactly(hello_manager.size())); down->configure_read(net::receive_policy::exactly(hello_manager.size()));
return none; return none;
...@@ -116,11 +116,10 @@ BEGIN_FIXTURE_SCOPE(fixture) ...@@ -116,11 +116,10 @@ BEGIN_FIXTURE_SCOPE(fixture)
CAF_TEST(receive) { CAF_TEST(receive) {
auto mock = mock_application::make(shared_recv_buf, shared_send_buf); auto mock = mock_application::make(shared_recv_buf, shared_send_buf);
auto transport = net::stream_transport::make(recv_socket_guard.get(), auto transport = net::stream_transport::make(recv_socket_guard.release(),
std::move(mock)); std::move(mock));
auto mgr = net::socket_manager::make(mpx.get(), recv_socket_guard.release(), auto mgr = net::socket_manager::make(mpx.get(), std::move(transport));
std::move(transport)); CHECK_EQ(mgr->start(config), none);
CHECK_EQ(mgr->init(config), none);
mpx->apply_updates(); mpx->apply_updates();
CHECK_EQ(mpx->num_socket_managers(), 2u); CHECK_EQ(mpx->num_socket_managers(), 2u);
CHECK_EQ(static_cast<size_t>(write(send_socket_guard.socket(), CHECK_EQ(static_cast<size_t>(write(send_socket_guard.socket(),
...@@ -135,11 +134,10 @@ CAF_TEST(receive) { ...@@ -135,11 +134,10 @@ CAF_TEST(receive) {
CAF_TEST(send) { CAF_TEST(send) {
auto mock = mock_application::make(shared_recv_buf, shared_send_buf); auto mock = mock_application::make(shared_recv_buf, shared_send_buf);
auto transport = net::stream_transport::make(recv_socket_guard.get(), auto transport = net::stream_transport::make(recv_socket_guard.release(),
std::move(mock)); std::move(mock));
auto mgr = net::socket_manager::make(mpx.get(), recv_socket_guard.release(), auto mgr = net::socket_manager::make(mpx.get(), std::move(transport));
std::move(transport)); CHECK_EQ(mgr->start(config), none);
CHECK_EQ(mgr->init(config), none);
mpx->apply_updates(); mpx->apply_updates();
CHECK_EQ(mpx->num_socket_managers(), 2u); CHECK_EQ(mpx->num_socket_managers(), 2u);
mgr->register_writing(); mgr->register_writing();
......
...@@ -41,8 +41,8 @@ public: ...@@ -41,8 +41,8 @@ public:
return std::make_unique<app_t>(sys, std::move(loop), std::move(hdl)); return std::make_unique<app_t>(sys, std::move(loop), std::move(hdl));
} }
error init(net::stream_oriented::lower_layer* down, error start(net::stream_oriented::lower_layer* down,
const settings&) override { const settings&) override {
this->down = down; this->down = down;
self->set_behavior([this](std::string& line) { self->set_behavior([this](std::string& line) {
CAF_MESSAGE("received an asynchronous message: " << line); CAF_MESSAGE("received an asynchronous message: " << line);
...@@ -196,9 +196,9 @@ CAF_TEST(actor shells expose their mailbox to their owners) { ...@@ -196,9 +196,9 @@ CAF_TEST(actor shells expose their mailbox to their owners) {
auto app_uptr = app_t::make(sys, mpx); auto app_uptr = app_t::make(sys, mpx);
auto app = app_uptr.get(); auto app = app_uptr.get();
auto transport = net::stream_transport::make(fd, std::move(app_uptr)); auto transport = net::stream_transport::make(fd, std::move(app_uptr));
auto mgr = net::socket_manager::make(mpx.get(), fd, std::move(transport)); auto mgr = net::socket_manager::make(mpx.get(), std::move(transport));
if (auto err = mgr->init(content(cfg))) if (auto err = mgr->start(content(cfg)))
CAF_FAIL("mgr->init() failed: " << err); CAF_FAIL("mgr->start() failed: " << err);
auto hdl = app->self.as_actor(); auto hdl = app->self.as_actor();
anon_send(hdl, "line 1"); anon_send(hdl, "line 1");
anon_send(hdl, "line 2"); anon_send(hdl, "line 2");
...@@ -219,9 +219,9 @@ CAF_TEST(actor shells can send requests and receive responses) { ...@@ -219,9 +219,9 @@ CAF_TEST(actor shells can send requests and receive responses) {
auto app_uptr = app_t::make(sys, mpx, worker); auto app_uptr = app_t::make(sys, mpx, worker);
auto app = app_uptr.get(); auto app = app_uptr.get();
auto transport = net::stream_transport::make(fd, std::move(app_uptr)); auto transport = net::stream_transport::make(fd, std::move(app_uptr));
auto mgr = net::socket_manager::make(mpx.get(), fd, std::move(transport)); auto mgr = net::socket_manager::make(mpx.get(), std::move(transport));
if (auto err = mgr->init(content(cfg))) if (auto err = mgr->start(content(cfg)))
CAF_FAIL("mgr->init() failed: " << err); CAF_FAIL("mgr->start() failed: " << err);
send(input); send(input);
run_while([&] { return app->consumed_bytes != input.size(); }); run_while([&] { return app->consumed_bytes != input.size(); });
expect((int32_t), to(worker).with(123)); expect((int32_t), to(worker).with(123));
......
...@@ -26,8 +26,8 @@ public: ...@@ -26,8 +26,8 @@ public:
settings cfg; settings cfg;
error init(net::web_socket::lower_layer*, const settings& init_cfg) override { error start(net::web_socket::lower_layer*, const settings& args) override {
cfg = init_cfg; cfg = args;
return none; return none;
} }
...@@ -101,7 +101,7 @@ SCENARIO("the client performs the WebSocket handshake on startup") { ...@@ -101,7 +101,7 @@ SCENARIO("the client performs the WebSocket handshake on startup") {
auto& ws_state = *ws; auto& ws_state = *ws;
auto uut = mock_stream_transport::make(std::move(ws)); auto uut = mock_stream_transport::make(std::move(ws));
THEN("the client sends its HTTP request when initializing it") { THEN("the client sends its HTTP request when initializing it") {
CHECK_EQ(uut->init(), error{}); CHECK_EQ(uut->start(), error{});
CHECK_EQ(uut->output_as_str(), http_request); CHECK_EQ(uut->output_as_str(), http_request);
} }
AND("the client waits for the server handshake and validates it") { AND("the client waits for the server handshake and validates it") {
......
...@@ -33,8 +33,8 @@ public: ...@@ -33,8 +33,8 @@ public:
return std::make_unique<app_t>(); return std::make_unique<app_t>();
} }
error init(net::web_socket::lower_layer*, const settings& init_cfg) override { error start(net::web_socket::lower_layer*, const settings& args) override {
cfg = init_cfg; cfg = args;
return none; return none;
} }
...@@ -69,7 +69,7 @@ struct fixture { ...@@ -69,7 +69,7 @@ struct fixture {
auto ws_ptr = net::web_socket::server::make(std::move(app_ptr)); auto ws_ptr = net::web_socket::server::make(std::move(app_ptr));
ws = ws_ptr.get(); ws = ws_ptr.get();
transport = mock_stream_transport::make(std::move(ws_ptr)); transport = mock_stream_transport::make(std::move(ws_ptr));
if (auto err = transport->init()) if (auto err = transport->start())
CAF_FAIL("failed to initialize mock transport: " << err); CAF_FAIL("failed to initialize mock transport: " << err);
rng.seed(0xD3ADC0D3); rng.seed(0xD3ADC0D3);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment