コード例 #1
0
ファイル: ClientImpl.cpp プロジェクト: jiayuwang/CoaPP
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";
  }
}
コード例 #2
0
ファイル: ClientImpl.cpp プロジェクト: zerom0/CoaPP
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()));
}