diff --git a/net/adc_device_netserver.h b/net/adc_device_netserver.h index ab8efd5..4c4b031 100644 --- a/net/adc_device_netserver.h +++ b/net/adc_device_netserver.h @@ -221,7 +221,8 @@ public: : _ident(), _netService(std::move(srv)), _serverPtr(srv_ptr), - _bindDevice(srv_ptr->_devices.size() ? srv_ptr->_devices.begin()->second : AdcDeviceNetServer::nullDevice) + _bindDevice(srv_ptr->_devices.size() ? &srv_ptr->_devices.begin()->second + : &AdcDeviceNetServer::nullDevice) { if constexpr (std::is_array_v>) { _ident = id; @@ -274,7 +275,7 @@ public: netsession_ident_t _ident; netservice_t _netService; AdcDeviceNetServer* _serverPtr; - AdcDeviceNetServer::DeviceWrapper& _bindDevice; + AdcDeviceNetServer::DeviceWrapper* _bindDevice; std::chrono::duration _recvTimeout = std::chrono::seconds(3600); std::chrono::duration _sendTimeout = std::chrono::seconds(5); @@ -290,8 +291,6 @@ public: auto get_elem = [&attrs](size_t idx) { if (idx < attrs.size()) { return attrs[idx]; - // auto& el = attrs[idx]; - // return serialized_t(el.begin(), el.end()); } else { return serialized_t(); } @@ -307,13 +306,13 @@ public: bool found = false; for (auto& [ptr, dev_wr] : _serverPtr->_devices) { if (std::ranges::equal(dev_wr.ident(), dev_name)) { - _bindDevice = dev_wr; + _bindDevice = &dev_wr; found = true; break; } } if (found) { - msg.ack(attrs); + msg.ack(msg_t::DEVICE_KEY, attrs); } else { msg.err(std::make_error_code(AdcDeviceNetServerSessionError::ERROR_UNKNOWN_DEVICE_ID)); } @@ -325,14 +324,14 @@ public: for (auto& [ptr, dev_wr] : _serverPtr->_devices) { names.emplace_back(dev_wr.ident()); } - msg.ack(names); + msg.ack(msg_t::NAMES_KEY, names); } else if (msg.isHELLO()) { + msg.ack(msg_t::HELLO_KEY, _serverPtr->_serverIdent); } else if (msg.isGET()) { // get attribute value attrs = msg.template attrs(0, 1); if (attrs.size()) { - auto val = _bindDevice.getAttr(get_elem(0)); - // msg.ack(get_elem(0), serialized_t{val.begin(), val.end()}); - msg.ack(get_elem(0), val); + auto val = _bindDevice->getAttr(get_elem(0)); + msg.ack(msg_t::GET_KEY, get_elem(0), val); } else { // no attr name! msg.err(std::make_error_code(AdcDeviceNetServerSessionError::ERROR_NO_PROTO_ATTRNAME)); } @@ -340,9 +339,8 @@ public: attrs = msg.template attrs(0); if (attrs.size() >= 2) { auto val = msg.template joinAttrs(1); - _bindDevice.setAttr(get_elem(0), val); - // msg.ack(get_elem(0), serialized_t{val.begin(), val.end()}); - msg.ack(get_elem(0), val); + _bindDevice->setAttr(get_elem(0), val); + msg.ack(msg_t::SET_KEY, get_elem(0), val); } else { // no attr name or its value! if (attrs.size() == 1) { msg.err(std::make_error_code(AdcDeviceNetServerSessionError::ERROR_NO_PROTO_ATTRVALUE)); @@ -354,8 +352,8 @@ public: attrs = msg.template attrs(0, 1); if (attrs.size()) { auto cmd_name = get_elem(0); - _bindDevice.exec(cmd_name); - msg.ack(cmd_name); + _bindDevice->exec(cmd_name); + msg.ack(msg_t::CMD_KEY, cmd_name); } else { // no cmd name! msg.err(std::make_error_code(AdcDeviceNetServerSessionError::ERROR_NO_PROTO_CMDNAME)); }