void ClientImpl::onMessage(const Message& msg_received, in_addr_t fromIP, uint16_t fromPort) { ILOG << "onMessage(): Message(" << msg_received << " payload=" << msg_received.payload().length() << " bytes)\n"; std::lock_guard<std::mutex> lock(mutex_); auto promiseIt = promises_.find(msg_received.token()); auto responseIt = responses_.find(msg_received.token()); if (promiseIt != promises_.end()) { promiseIt->second.set_value(RestResponse() .withCode((CoAP::Code) msg_received.code()) .withPayload(msg_received.payload())); promises_.erase(promiseIt); } else if (responseIt != responses_.end()) { responseIt->second.emplace_back(RestResponse() .withSenderIP(fromIP) .withSenderPort(fromPort) .withCode((CoAP::Code) msg_received.code()) .withPayload(msg_received.payload())); responseIt->second.callback(); } else { ELOG << "Message with token=" << msg_received.token() << " is unexpected.\n"; } }
void ClientImpl::onMessage(const Message& msg_received, in_addr_t fromIP, uint16_t fromPort) { ILOG << "onMessage(): Message(" << msg_received << " payload=" << msg_received.payload().length() << " bytes)\n"; std::lock_guard<std::mutex> lock(mutex_); auto notificationIt = notifications_.find(msg_received.token()); if (notificationIt == notifications_.end()) { if (msg_received.hasObserveValue()) { // TODO: Send reset message to stop server from sending further notifications } return; } auto sp = notificationIt->second.lock(); if (not sp) { if (msg_received.hasObserveValue()) { // TODO: Send reset message to stop server from sending further notifications } return; } sp->onNext(RestResponse() .withSenderIP(fromIP) .withSenderPort(fromPort) .withCode(msg_received.code()) .withPayload(msg_received.payload())); }