#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/syslog.h>
#include <syslog.h>
#include <time.h>
#include <unistd.h>
typedef struct channel_identifier {
char *topic;
char *source;
} channel_identifier_t;
static void on_connection_error(
mdb_error_t *error,
void *user_data)
{
(void)user_data;
syslog(LOG_ERR,
"Got connection error: %s, Aborting...", error->
message);
abort();
}
static void on_metadata(
const mdb_metadata_t *metadata,
void *user_data)
{
channel_identifier_t *expression = (channel_identifier_t *)user_data;
syslog(LOG_INFO,
"metadata received from topic: %s on source: %s: Monotonic time - "
"%lld.%.9ld. Data - %.*s",
expression->topic, expression->source, (long long)timestamp->tv_sec,
timestamp->tv_nsec, (
int)payload->
size, (
char *)payload->
data);
}
static void on_done_subscriber_create(
const mdb_error_t *error,
void *user_data)
{
if (error != NULL) {
syslog(LOG_ERR,
"Got subscription error: %s, Aborting...", error->
message);
abort();
}
channel_identifier_t *expression = (channel_identifier_t *)user_data;
syslog(LOG_INFO, "Subscribed to %s (%s)...", expression->topic,
expression->source);
}
void sig_handler(int signum)
{
(void)signum;
}
int main(int argc, char **argv)
{
syslog(LOG_INFO, "Subscriber started...");
channel_identifier_t channel_identifier = {.topic = "test_topic",
.source = "1"};
if (argc > 1) {
channel_identifier.topic = argv[1];
};
if (error != NULL) {
goto end;
}
channel_identifier.topic, channel_identifier.source, on_metadata,
&channel_identifier, &error);
if (error != NULL) {
goto end;
}
on_done_subscriber_create,
&channel_identifier, &error);
if (error != NULL) {
goto end;
}
(void)signal(SIGTERM, sig_handler);
(void)signal(SIGINT, sig_handler);
pause();
end:
if (error != NULL) {
syslog(LOG_ERR,
"%s", error->
message);
}
syslog(LOG_INFO, "Subscriber closed...");
return 0;
}
struct mdb_connection mdb_connection_t
Definition: connection.h:29
mdb_connection_t * mdb_connection_create(mdb_on_error_t on_error, void *user_data, mdb_error_t **error)
void mdb_connection_destroy(mdb_connection_t **self)
void mdb_error_destroy(mdb_error_t **error)
char * message
Definition: error.h:43
void mdb_subscriber_destroy(mdb_subscriber_t **self)
struct mdb_subscriber mdb_subscriber_t
Definition: subscriber.h:28
mdb_subscriber_t * mdb_subscriber_create_async(mdb_connection_t *connection, mdb_subscriber_config_t *config, mdb_on_done_t on_done, void *user_data, mdb_error_t **error)
mdb_subscriber_config_t * mdb_subscriber_config_create(const char *topic, const char *source, mdb_subscriber_on_metadata_t on_metadata, void *user_data, mdb_error_t **error)
void mdb_subscriber_config_destroy(mdb_subscriber_config_t **self)
struct mdb_subscriber_config mdb_subscriber_config_t
Definition: subscriber_config.h:25