This commit is contained in:
Timur A. Fatkhullin
2024-11-09 03:15:59 +03:00
parent 8d6e1bb59c
commit afd1a917b4
5 changed files with 82 additions and 163 deletions

View File

@@ -153,16 +153,11 @@ protected:
CmdIdDeserialT&& cmd_id_deser_func = {})
: _id(id)
{
// _get_id = [dev_ptr, wrapper = traits::adc_pf_wrapper(std::forward<IdSerialT>(id_ser_func))]() {
// auto id = std::get<0>(wrapper)(dev_ptr->ident());
// return serialized_t{id.begin(), id.end()};
// };
_get_attr = [dev_ptr, wrapper = traits::adc_pf_wrapper(std::forward<AttrIdDeserialT>(attr_id_deser_func)),
this](const auto& attr_name) mutable {
auto attr_id = std::get<0>(wrapper)(attr_name);
// auto& attr = (*dev_ptr)[attr_id];
auto& attr = dev_ptr->operator[](attr_id);
auto& attr = (*dev_ptr)[attr_id];
// auto& attr = dev_ptr->operator[](attr_id);
auto val = attr.serialize();
return val;
};
@@ -214,16 +209,28 @@ public:
public:
typedef SessionIdentT netsession_ident_t;
typedef NetServiceT netservice_t;
typedef AdcDeviceNetServer* netsession_ctx_t;
// typedef AdcDeviceNetServer* netsession_ctx_t;
struct netsession_ctx_t {
AdcDeviceNetServer* serverPtr;
std::chrono::milliseconds recvTimeout;
std::chrono::milliseconds sendTimeout;
};
typedef std::vector<char> message_t;
Session(const netsession_ident_t& id, netservice_t srv, AdcDeviceNetServer* srv_ptr)
// Session(const netsession_ident_t& id, netservice_t srv, AdcDeviceNetServer* srv_ptr)
Session(const netsession_ident_t& id, netservice_t srv, netsession_ctx_t ctx)
: _ident(id),
_netService(std::move(srv)),
_serverPtr(srv_ptr),
_bindDevice(srv_ptr->_devices.size() ? &srv_ptr->_devices.begin()->second
: &AdcDeviceNetServer::nullDevice)
// _serverPtr(srv_ptr),
// _bindDevice(srv_ptr->_devices.size() ? &srv_ptr->_devices.begin()->second
// : &AdcDeviceNetServer::nullDevice)
_serverPtr(ctx.serverPtr),
_bindDevice(ctx.serverPtr->_devices.size() ? &ctx.serverPtr->_devices.begin()->second
: &AdcDeviceNetServer::nullDevice),
_recvTimeout(ctx.recvTimeout),
_sendTimeout(ctx.sendTimeout)
{
}
@@ -239,6 +246,8 @@ public:
_netService.asyncReceive(
[self, this](netservice_t::async_callback_err_t ec, message_t msg) {
if (ec) {
_serverPtr->errorMessage(std::string("asyncReceive operation completed with") +
netservice_t::formatError(ec));
stop();
} else {
auto msg_sptr = std::make_shared<message_t>(std::move(msg));
@@ -251,6 +260,8 @@ public:
*msg_sptr,
[self, msg_sptr, this](netservice_t::async_callback_err_t ec) {
if (ec) {
_serverPtr->errorMessage(std::string("asyncSend operation completed with") +
netservice_t::formatError(ec));
stop();
} else {
start();
@@ -273,8 +284,8 @@ public:
AdcDeviceNetServer* _serverPtr;
AdcDeviceNetServer::DeviceWrapper* _bindDevice;
std::chrono::duration<size_t> _recvTimeout = std::chrono::seconds(3600);
std::chrono::duration<size_t> _sendTimeout = std::chrono::seconds(5);
std::chrono::milliseconds _recvTimeout = std::chrono::hours(12);
std::chrono::milliseconds _sendTimeout = std::chrono::seconds(5);
void processMessage(auto& msg)
{