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();
}