This commit is contained in:
Timur A. Fatkhullin 2024-10-14 17:41:58 +03:00
parent d1d822415b
commit a12c186bb3

View File

@ -8,6 +8,7 @@ ABSTRACT DEVICE COMPONENTS LIBRARY
#include <filesystem>
#include <functional>
#include <map>
#include <set>
#include <unordered_map>
@ -159,6 +160,8 @@ protected:
func() ? ++N : 0;
}
_stopSessionFunc.clear();
return N;
}
};
@ -193,29 +196,48 @@ public:
auto acceptor = std::make_shared<typename SessionT::netservice_t::acceptor_t>(
std::forward<AcceptorCtorArgTs>(ctor_args)...);
_stopListenFunc.emplace_back([acceptor, id, this]() {
std::error_code ec;
acceptor->close(ec);
_isListening<SessionT>[this][id] = false;
});
doAccept<SessionT>(acceptor, id, sess_ctx);
}
};
template <interfaces::adc_netsession_c SessionT>
bool isListening() const
bool isListening(const typename SessionT::netsession_ident_t& id) const
{
return _isListening<SessionT>[this];
return _isListening<SessionT>[this][id];
}
virtual void start() = 0;
virtual void stop()
{
for (auto& func : _stopListenFunc) {
func();
}
_stopListenFunc.clear();
stopAllSessions();
};
protected:
// template <interfaces::adc_netsession_c SessionT>
// inline static std::unordered_map<const AdcGenericNetServer*, bool> _isListening{};
template <interfaces::adc_netsession_c SessionT>
inline static std::unordered_map<const AdcGenericNetServer*, bool> _isListening{};
inline static std::unordered_map<const AdcGenericNetServer*,
std::map<const typename SessionT::netsession_ident_t, bool>>
_isListening{};
std::vector<std::function<void()>> _stopListenFunc;
server_ident_t _serverIdent;
@ -227,10 +249,10 @@ protected:
auto sess = std::make_shared<SessionT>(id, std::move(srv), sess_ctx);
startSession(sess);
_isListening<SessionT>[this] = true;
_isListening<SessionT>[this][id] = true;
doAccept(acceptor, id, sess_ctx);
} else {
_isListening<SessionT>[this] = false;
_isListening<SessionT>[this][id] = false;
}
});
}