This commit is contained in:
2024-10-30 18:20:16 +03:00
parent f14b4fdc10
commit 9cde583688
5 changed files with 125 additions and 16 deletions

View File

@@ -131,8 +131,11 @@ protected:
};
public:
DeviceWrapper() {
DeviceWrapper() : _id()
{
// null device
std::string_view is{"NULL-DEVICE"};
std::ranges::copy(_id, std::back_inserter(_id));
};
template <interfaces::adc_device_c DeviceT,

View File

@@ -307,9 +307,7 @@ public:
// start accepting remote connections, create and start given network session
// It must be assumed that this is asynchronous operation!!!
template <interfaces::adc_netsession_c SessionT, typename... AcceptorCtorArgTs>
void start(const typename SessionT::netsession_ident_t& id,
const typename SessionT::netsession_ctx_t& sess_ctx,
AcceptorCtorArgTs&&... ctor_args)
void start(SessionT::netsession_ident_t id, SessionT::netsession_ctx_t sess_ctx, AcceptorCtorArgTs&&... ctor_args)
{
if (!_isListening<SessionT>[this][id]) {
auto acceptor = std::make_shared<typename SessionT::netservice_t::acceptor_t>(
@@ -322,7 +320,7 @@ public:
_isListening<SessionT>[this][id] = false;
});
doAccept<SessionT>(acceptor, id, sess_ctx);
doAccept<SessionT>(acceptor, std::move(id), std::move(sess_ctx));
}
// only once per SessionT
@@ -369,15 +367,16 @@ protected:
server_ident_t _serverIdent;
template <typename SessionT, typename AT, typename IDT, typename CTXT>
void doAccept(std::shared_ptr<AT> acceptor, const IDT& id, const CTXT& sess_ctx)
void doAccept(std::shared_ptr<AT> acceptor, IDT id, CTXT sess_ctx)
{
acceptor->asyncAccept([acceptor, &id, &sess_ctx, this](auto ec, typename SessionT::netservice_t srv) mutable {
acceptor->asyncAccept([acceptor, id = std::move(id), sess_ctx = std::move(sess_ctx), this](
auto ec, typename SessionT::netservice_t srv) mutable {
if (!ec) {
auto sess = std::make_shared<SessionT>(id, std::move(srv), sess_ctx);
startSession(sess);
_isListening<SessionT>[this][id] = true;
doAccept<SessionT>(acceptor, id, sess_ctx);
doAccept<SessionT>(acceptor, std::move(id), std::move(sess_ctx));
} else {
_isListening<SessionT>[this][id] = false;
}