diff --git a/consumer/api/c/include/asapo/consumer_c.h b/consumer/api/c/include/asapo/consumer_c.h index 40d6ac3b326eee5ea3bf9ee3dae77b565dd9061c..2269a0cedd0bbb6a4217073db1021cb92baf0280 100644 --- a/consumer/api/c/include/asapo/consumer_c.h +++ b/consumer/api/c/include/asapo/consumer_c.h @@ -8,7 +8,7 @@ typedef void* asapoSourceCredentials; typedef void* asapoError; typedef void* asapoMessageMeta; typedef void* asapoMessageData; -typedef void* asapoGroupId; +typedef void* asapoString; typedef void* asapoStreamInfo; typedef void* asapoStreamInfos; typedef void* asapoIdList; @@ -56,27 +56,32 @@ asapoConsumer asapoCreateConsumer(const char* server_name, asapoSourceCredentials source, asapoError* error); void asapoDeleteConsumer(asapoConsumer* consumer); -asapoGroupId asapoConsumerGenerateNewGroupId(asapoConsumer consumer, asapoError* err); -void asapoDeleteGroupId(asapoGroupId* id); +asapoString asapoConsumerGenerateNewGroupId(asapoConsumer consumer, asapoError* err); +asapoString asapoCreateString(const char* content); +void asapoStringAppend(asapoString str, const char* content); +const char* asapoStringC_str(const asapoString str); +size_t asapoStringSize(const asapoString str); +void asapoDeleteString(asapoString* str); + void asapoConsumerSetTimeout(asapoConsumer consumer, uint64_t timeout_ms); asapoError asapoConsumerResetLastReadMarker(asapoConsumer consumer, - const asapoGroupId group_id, + const asapoString group_id, const char* stream); asapoError asapoConsumerSetLastReadMarker(asapoConsumer consumer, - const asapoGroupId group_id, + const asapoString group_id, uint64_t value, const char* stream); asapoError asapoConsumerAcknowledge(asapoConsumer consumer, - const asapoGroupId group_id, + const asapoString group_id, uint64_t id, const char* stream); asapoError asapoConsumerNegativeAcknowledge(asapoConsumer consumer, - const asapoGroupId group_id, + const asapoString group_id, uint64_t id, uint64_t delay_ms, const char* stream); asapoIdList asapoConsumerGetUnacknowledgedMessages(asapoConsumer consumer, - asapoGroupId group_id, + asapoString group_id, uint64_t from_id, uint64_t to_id, const char* stream, @@ -110,13 +115,20 @@ uint64_t asapoConsumerGetCurrentDatasetCount(asapoConsumer consumer, const char* stream, asapoBool include_incomplete, asapoError* error); +asapoString asapoConsumerGetBeamtimeMeta(asapoConsumer consumer, + asapoError* error); +asapoError asapoConsumerRetriveData(asapoConsumer consumer, + asapoMessageMeta info, + asapoMessageData* data); + + asapoError asapoConsumerGetLast(asapoConsumer consumer, asapoMessageMeta info, asapoMessageData* data, const char* stream); asapoError asapoConsumerGetNext(asapoConsumer consumer, - asapoGroupId group_id, + asapoString group_id, asapoMessageMeta info, asapoMessageData* data, const char* stream); diff --git a/consumer/api/cpp/src/consumer_c_glue.cpp b/consumer/api/cpp/src/consumer_c_glue.cpp index fd88c38e67650dd16989358fe29b9294b10d492a..0e9a12f5b13bf5191df125244d64d21970e8ca1c 100644 --- a/consumer/api/cpp/src/consumer_c_glue.cpp +++ b/consumer/api/cpp/src/consumer_c_glue.cpp @@ -39,10 +39,12 @@ typedef asapo::MessageMeta* asapoMessageMeta; /// access to the data is granted via asapoMessageDataGetAsChars() typedef uint8_t* asapoMessageData; -//! handle for a consumer group id -/// create with asapoConsumerGenerateNewGroupId() -/// delete after use with asapoDeleteGroupId() -typedef std::string* asapoGroupId; +//! handle for string return types +/// return type of several functions +/// create with asapoCreateString() +/// delete after use with asapoDeleteString() +/// a const pointer to the content can be obtained with asapoStringC_str() +typedef std::string* asapoString; //! handle for info about a stream, /// object is deleted implicityly by asapoDeleteStreamInfos() @@ -163,19 +165,41 @@ extern "C" { //! wraps asapo::Consumer::GenerateNewGroupId() /// \copydoc asapo::Consumer::GenerateNewGroupId() /// \param[in] consumer the handle of the consumer concerned - asapoGroupId asapoConsumerGenerateNewGroupId(asapoConsumer consumer, - asapoError* error) { + asapoString asapoConsumerGenerateNewGroupId(asapoConsumer consumer, + asapoError* error) { asapo::Error err; auto result = new std::string(consumer->GenerateNewGroupId(&err)); *error = err.release(); return result; } - - //! clean up groupId - /// frees the resources occupied by id, sets *id to NULL - void asapoDeleteGroupId(asapoGroupId* id) { - delete *id; - *id = nullptr; + //! create an asapoString from a c string + /// \param[in] content the characters that will make up the new string + /// \return handle of the new asapo string, delete after use with asapoDeleteString() + asapoString asapoCreateString(const char* content) { + return new std::string(content); + } + //! append to an exising asapo string + /// \param[in] str the handle of the asapoString in question + /// \param[in] content the c string with the characters to append + void asapoStringAppend(asapoString str, const char* content) { + *str += content; + } + //! give a pointer to the content of the asapoString + /// \param[in] str the handle of the asapoString in question + /// \return const char pointer to the content + const char* asapoStringC_str(const asapoString str); + //! give the size of an asapoString + /// \param[in] str the handle of the asapoString in question + /// \return the number of bytes in the string , not counting the final nul byte. + size_t asapoStringSize(const asapoString str) { + return str->size(); + } + //! clean up string + /// frees the resources occupied by str, sets *str to NULL +/// \param[in] str the handle of the asapoString in question + void asapoDeleteString(asapoString* str) { + delete *str; + *str = nullptr; } //! wraps asapo::Consumer::SetTimeout() @@ -189,7 +213,7 @@ extern "C" { /// \copydoc asapo::Consumer::ResetLastReadMarker() /// \param[in] consumer the handle of the consumer concerned asapoError asapoConsumerResetLastReadMarker(asapoConsumer consumer, - const asapoGroupId group_id, + const asapoString group_id, const char* stream) { auto err = consumer->ResetLastReadMarker(*group_id, stream); return err.release(); @@ -199,7 +223,7 @@ extern "C" { /// \copydoc asapo::Consumer::SetLastReadMarker() /// \param[in] consumer the handle of the consumer concerned asapoError asapoConsumerSetLastReadMarker(asapoConsumer consumer, - const asapoGroupId group_id, + const asapoString group_id, uint64_t value, const char* stream) { auto err = consumer->SetLastReadMarker(*group_id, value, stream); @@ -209,7 +233,7 @@ extern "C" { /// \copydoc asapo::Consumer::Acknowledge() /// \param[in] consumer the handle of the consumer concerned asapoError asapoConsumerAcknowledge(asapoConsumer consumer, - const asapoGroupId group_id, + const asapoString group_id, uint64_t id, const char* stream) { auto err = consumer->Acknowledge(*group_id, id, stream); @@ -219,7 +243,7 @@ extern "C" { /// \copydoc asapo::Consumer::NegativeAcknowledge() /// \param[in] consumer the handle of the consumer concerned asapoError asapoConsumerNegativeAcknowledge(asapoConsumer consumer, - const asapoGroupId group_id, + const asapoString group_id, uint64_t id, uint64_t delay_ms, const char* stream) { @@ -231,7 +255,7 @@ extern "C" { /// \copydoc asapo::Consumer::GetUnacknowledgedMessages() /// \param[in] consumer the handle of the consumer concerned asapoIdList asapoConsumerGetUnacknowledgedMessages(asapoConsumer consumer, - asapoGroupId group_id, + asapoString group_id, uint64_t from_id, uint64_t to_id, const char* stream, @@ -351,12 +375,33 @@ extern "C" { return retval; } + //! wraps asapo::Consumer::GetBeamtimeMeta() + /// \copydoc asapo::Consumer::GetBeamtimeMeta() + /// \param[in] consumer the consumer that is acted upon + /// the returned string must be freed after use with asapoDeleteString() + asapoString asapoConsumerGetBeamtimeMeta(asapoConsumer consumer, + asapoError* error) { + asapo::Error err; + auto retval = new std::string(consumer->GetBeamtimeMeta(&err)); + *error = err.release(); + return retval; + } + + + //! wraps asapo::Consumer::RetrieveData() + /// \copydoc asapo::Consumer::RetrieveData() + /// \param[in] consumer the consumer that is acted upon + /// if data are retrieved (data != NULL) they must be freed with asapoDeleteMessageData() + asapoError asapoConsumerRetriveData(asapoConsumer consumer, + asapoMessageMeta info, + asapoMessageData* data); //! wraps asapo::Consumer::GetLast() /// \copydoc asapo::Consumer::GetLast() /// \param[in] consumer the consumer that is acted upon + /// if data are retrieved (data != NULL) they must be freed with asapoDeleteMessageData() asapoError asapoConsumerGetLast(asapoConsumer consumer, asapoMessageMeta info, asapoMessageData* data, @@ -373,8 +418,9 @@ extern "C" { //! wraps asapo::Consumer::GetNext() /// \copydoc asapo::Consumer::GetNext() /// \param[in] consumer the consumer that is acted upon + /// if data are retrieved (data != NULL) they must be freed with asapoDeleteMessageData() asapoError asapoConsumerGetNext(asapoConsumer consumer, - asapoGroupId group_id, + asapoString group_id, asapoMessageMeta info, asapoMessageData* data, const char* stream) { diff --git a/examples/consumer/simple-consumer-c/consume.c b/examples/consumer/simple-consumer-c/consume.c index e6e42cd3b51b0161c502f6a6ef2cd363f328c02f..f4f875f8d40884734904a4f69288ac936004d4b9 100644 --- a/examples/consumer/simple-consumer-c/consume.c +++ b/examples/consumer/simple-consumer-c/consume.c @@ -21,7 +21,7 @@ int main(int argc, char* argv[]) { const char *beamtime = "asapo_test"; const char *token = "KmUDdacgBzaOD3NIJvN1NmKGqWKtx0DK-NyPjdpeWkc="; - asapoSourceCredentials cred = asapoCreateSourceCredentials("processed", + asapoSourceCredentials cred = asapoCreateSourceCredentials(kProcessed, beamtime, "", "", token); asapoConsumer consumer = asapoCreateConsumer(endpoint, @@ -33,7 +33,7 @@ int main(int argc, char* argv[]) { exit_if_error("Cannot create consumer", err); asapoConsumerSetTimeout(consumer, 1000ull); - asapoGroupId group_id = asapoConsumerGenerateNewGroupId(consumer, &err); + asapoString group_id = asapoConsumerGenerateNewGroupId(consumer, &err); exit_if_error("Cannot create group id", err); asapoMessageMeta fi = asapoCreateMessageMeta(); @@ -47,7 +47,8 @@ int main(int argc, char* argv[]) { printf("file content: %s\n",asapoMessageDataGetAsChars(data)); asapoDeleteMessageMeta(&fi); asapoDeleteMessageData(&data); - asapoDeleteConsumer(&consumer); + asapoDeleteConsumer(&consumer); + asapoDeleteString(&group_id); return EXIT_SUCCESS; }