GreengrassClient::OperationStatus GreengrassClient::PublishToIoTMQTT()

in mqtt-publish-sample/mqttpublisher-gstreamer-plugin/greengrass-client/GreengrassClient.cc [29:65]


GreengrassClient::OperationStatus GreengrassClient::PublishToIoTMQTT(std::string topic, std::string payload) {
    String publish_payload(payload.c_str());
    String publish_topic(topic.c_str());

    PublishToIoTCoreRequest request;
    Vector<uint8_t> payload_data({publish_payload.begin(), publish_payload.end()});
    request.SetTopicName(publish_topic);
    request.SetPayload(payload_data);
    request.SetQos(QOS_AT_LEAST_ONCE);

    PublishToIoTCoreOperation operation = ipc_client->NewPublishToIoTCore();
    auto activate = operation.Activate(request, nullptr);
    activate.wait();

    auto response_future = operation.GetResult();
    if (response_future.wait_for(std::chrono::seconds(TIMEOUT_IN_SECONDS)) == std::future_status::timeout) {
        std::cerr << "Operation timed out while waiting for response from Greengrass Core." << std::endl;
        return OperationStatus::FAILED;
    }

    auto response = response_future.get();
    if (response) {
        std::cout << "Successfully published to topic: " << publish_topic << std::endl;
        return OperationStatus::SUCCESSFUL;
    } else {
        // An error occurred.
        std::cout << "Failed to publish to topic: " << publish_topic << std::endl;
        auto error_type = response.GetResultType();
        if (error_type == OPERATION_ERROR) {
            auto *error = response.GetOperationError();
            std::cout << "Operation error: " << error->GetMessage().value() << std::endl;
        } else {
            std::cout << "RPC error: " << response.GetRpcError() << std::endl;
        }
        return OperationStatus::FAILED;
    }
}