SNode.C
Loading...
Searching...
No Matches
ClientFlowController.cpp
Go to the documentation of this file.
1/*
2 * SNode.C - A Slim Toolkit for Network Communication
3 * Copyright (C) Volker Christian <me@vchrist.at>
4 * 2020, 2021, 2022, 2023, 2024, 2025, 2026
5 */
6
7#include "core/socket/stream/ClientFlowController.h"
8
9#include "core/eventreceiver/ConnectEventReceiver.h"
10#include "core/socket/stream/FlowController.hpp"
11#include "core/timer/Timer.h"
12
13#ifndef DOXYGEN_SHOULD_SKIP_THIS
14
15#endif // DOXYGEN_SHOULD_SKIP_THIS
16
17namespace core::socket::stream {
18
24
29
33
35 const std::function<void(ClientFlowController*)> oldCallback = onFlowReconnectCallback;
36 onFlowReconnectCallback = [oldCallback, callback](ClientFlowController* flowController) {
37 oldCallback(flowController);
38 callback(flowController);
39 };
40
41 return this;
42 }
43
47
49 if (connectEventReceiver != nullptr) {
50 if (connectEventReceiver->isEnabled()) {
51 connectEventReceivers.insert(connectEventReceiver);
52 } else {
53 connectEventReceivers.erase(connectEventReceiver);
54 }
55 }
56 }
57
58 void ClientFlowController::armReconnectTimer(double timeoutSeconds, const std::function<void()>& dispatcher) {
59 if (reconnectEnabled) {
60 reconnectTimer = std::make_unique<core::timer::Timer>(core::timer::Timer::singleshotTimer(dispatcher, timeoutSeconds));
61 }
62 }
63
67
68 for (core::eventreceiver::ConnectEventReceiver* connectEventReceiver : connectEventReceivers) {
69 if (connectEventReceiver != nullptr) {
70 connectEventReceiver->stopConnect();
71 }
72 }
73
75 }
76
83
84 template class FlowController<ClientFlowController>;
85
86} // namespace core::socket::stream
void cancel()
Definition Timer.cpp:84
void observeConnectEventReceiver(core::eventreceiver::ConnectEventReceiver *connectEventReceiver)
std::set< core::eventreceiver::ConnectEventReceiver * > connectEventReceivers
std::unique_ptr< core::timer::Timer > reconnectTimer
void armReconnectTimer(double timeoutSeconds, const std::function< void()> &dispatcher)
ClientFlowController * setOnFlowReconnect(const std::function< void(ClientFlowController *)> &callback)
std::function< void(ClientFlowController *)> onFlowReconnectCallback
ClientFlowController(net::config::ConfigInstance *configInstance)
FlowController(net::config::ConfigInstance *configInstance)
static Timer singleshotTimer(const std::function< void()> &dispatcher, const utils::Timeval &timeout)
Definition Timer.cpp:57
Definition Timer.h:59