Napi::Value Producer::Send()

in src/Producer.cc [106:130]


Napi::Value Producer::Send(const Napi::CallbackInfo &info) {
  auto cMessage = Message::BuildMessage(info[0].As<Napi::Object>());
  auto deferred = ThreadSafeDeferred::New(Env());
  auto ctx = new ProducerSendContext(deferred, cMessage);

  pulsar_producer_send_async(
      this->cProducer.get(), cMessage.get(),
      [](pulsar_result result, pulsar_message_id_t *msgId, void *ctx) {
        auto producerSendContext = static_cast<ProducerSendContext *>(ctx);
        auto deferred = producerSendContext->deferred;
        auto cMessage = producerSendContext->cMessage;
        delete producerSendContext;

        std::shared_ptr<pulsar_message_id_t> cMessageId(msgId, pulsar_message_id_free);

        if (result != pulsar_result_Ok) {
          deferred->Reject(std::string("Failed to send message: ") + pulsar_result_str(result));
        } else {
          deferred->Resolve([cMessageId](const Napi::Env env) { return MessageId::NewInstance(cMessageId); });
        }
      },
      ctx);

  return deferred->Promise();
}