cwist
Modern C web framework with libttak runtime
Loading...
Searching...
No Matches
cwist_nats.c
Go to the documentation of this file.
1
4#ifndef _GNU_SOURCE
5#define _GNU_SOURCE
6#endif
9#include <nats.h>
10#include <stdlib.h>
11#include <string.h>
12
13struct cwist_nats {
14 natsConnection *conn;
16 cwist_nats_msg_cb user_cb;
17 void *user_ctx;
18};
19
31static void cwist_nats_adapter(natsConnection *nc, natsSubscription *sub, natsMsg *msg,
32 void *closure) {
33 (void)nc;
34 (void)sub;
36 if (nats && nats->user_cb) {
37 const char *subject = natsMsg_GetSubject(msg);
38 const char *data = natsMsg_GetData(msg);
39 int len = natsMsg_GetDataLength(msg);
40 nats->user_cb(subject, data, (size_t)len, nats->user_ctx);
41 }
43}
44
58 if (!nats) {
59 err.error.err_i16 = CWIST_ERROR_INVALID_PARAM;
60 return err;
61 }
63 if (!obj) {
64 err.error.err_i16 = CWIST_ERROR_NOMEM;
65 return err;
66 }
67 memset(obj, 0, sizeof(*obj));
69 if (s != NATS_OK) {
71 err.error.err_i16 = (int16_t)s;
72 return err;
73 }
74 *nats = obj;
75 err.error.err_i16 = 0;
76 return err;
77}
78
93 void *ctx) {
95 if (!nats || !nats->conn || !subject) {
96 err.error.err_i16 = CWIST_ERROR_INVALID_PARAM;
97 return err;
98 }
99 if (nats->sub) {
101 nats->sub = NULL;
102 }
103 nats->user_cb = cb;
104 nats->user_ctx = ctx;
105 natsStatus s =
106 natsConnection_Subscribe(&nats->sub, nats->conn, subject, cwist_nats_adapter, nats);
107 if (s != NATS_OK) {
108 err.error.err_i16 = (int16_t)s;
109 return err;
110 }
111 err.error.err_i16 = 0;
112 return err;
113}
114
128 if (!nats || !nats->conn || !subject) {
129 err.error.err_i16 = CWIST_ERROR_INVALID_PARAM;
130 return err;
131 }
132 natsStatus s = natsConnection_PublishString(nats->conn, subject, data ? data : "");
133 if (s == NATS_OK) {
134 s = natsConnection_Flush(nats->conn);
135 }
136 err.error.err_i16 = (int16_t)s;
137 return err;
138}
139
149 if (nats && nats->conn) {
151 }
152}
153
162 if (!nats) return;
163 if (nats->sub) {
165 }
166 if (nats->conn) {
168 }
170}
171
Memory allocation wrappers backed by libttak.
void cwist_free(void *ptr)
Free memory obtained via cwist_alloc/cwist_strdup/etc.
Definition alloc.c:52
void * cwist_alloc(size_t size)
Allocate zeroed memory tracked by libttak.
Definition alloc.c:17
natsConnection * cwist_nats_native(cwist_nats_t *nats)
Access the underlying NATS connection.
Definition cwist_nats.c:180
void cwist_nats_destroy(cwist_nats_t *nats)
Destroy a handle and release its resources.
Definition cwist_nats.c:161
cwist_error_t cwist_nats_publish_string(cwist_nats_t *nats, const char *subject, const char *data)
Publish a NUL-terminated string message to a subject.
Definition cwist_nats.c:126
cwist_error_t cwist_nats_subscribe(cwist_nats_t *nats, const char *subject, cwist_nats_msg_cb cb, void *ctx)
Subscribe to a NATS subject and register a message callback.
Definition cwist_nats.c:92
cwist_error_t cwist_nats_connect(cwist_nats_t **nats, const char *url)
Connect to a NATS server and create a handle.
Definition cwist_nats.c:56
void cwist_nats_dispatch(cwist_nats_t *nats)
Pump pending I/O on the connection.
Definition cwist_nats.c:148
NATS client interface.
void(* cwist_nats_msg_cb)(const char *subject, const char *data, size_t len, void *ctx)
Definition cwist_nats.h:20
struct cwist_nats cwist_nats_t
Definition cwist_nats.h:16
struct __natsConnection natsConnection
Definition cwist_nats.h:18
@ CWIST_ERR_INT16
used when checking common errcodes in Unix/Linux
Definition cwist_err.h:16
cwist_error_t make_error(cwist_errtype_t type)
Creates an error object initialized with the specified type.
Definition error.c:14
size_t cap
Definition otel.c:56
Integrated error structure used throughout the system.
Definition cwist_err.h:72
#define CWIST_ERROR_INVALID_PARAM
Definition cwist_err.h:153
#define CWIST_ERROR_NOMEM
Definition cwist_err.h:152