1
0
Fork 0
mirror of https://github.com/zigzap/zap.git synced 2025-10-20 15:14:08 +00:00
zap/facil.io/lib/facil/fio_zig.c
2023-12-22 04:03:32 +01:00

132 lines
3.7 KiB
C

#include <fio.h>
#include <fiobject.h>
int fiobj_invalid = FIOBJ_INVALID;
int is_invalid(FIOBJ o) {
if(o == FIOBJ_INVALID) return 1;
return 0;
}
void fiobj_free_wrapped(FIOBJ o) {
if (!FIOBJ_IS_ALLOCATED(o))
return;
if (fiobj_ref_dec(o))
return;
if (FIOBJECT2VTBL(o)->each && FIOBJECT2VTBL(o)->count(o))
fiobj_free_complex_object(o);
else
FIOBJECT2VTBL(o)->dealloc(o, NULL, NULL);
}
void fio_log_debug(const char* msg) {
FIO_LOG_DEBUG("%s", msg);
}
void fio_log_info(const char* msg) {
FIO_LOG_INFO("%s", msg);
}
void fio_log_warning(const char* msg) {
FIO_LOG_WARNING("%s", msg);
}
void fio_log_error(const char* msg) {
FIO_LOG_ERROR("%s", msg);
}
void fio_log_fatal(const char* msg) {
FIO_LOG_FATAL("%s", msg);
}
// Log Levels as ints
/** Logging level of zero (no logging). */
int fio_log_level_none = FIO_LOG_LEVEL_NONE;
/** Log fatal errors. */
int fio_log_level_fatal = FIO_LOG_LEVEL_FATAL;
/** Log errors and fatal errors. */
int fio_log_level_error = FIO_LOG_LEVEL_ERROR;
/** Log warnings, errors and fatal errors. */
int fio_log_level_warning = FIO_LOG_LEVEL_WARNING;
/** Log every message (info, warnings, errors and fatal errors). */
int fio_log_level_info = FIO_LOG_LEVEL_INFO;
/** Log everything, including debug messages. */
int fio_log_level_debug = FIO_LOG_LEVEL_DEBUG;
void fio_set_log_level(int level) {
FIO_LOG_LEVEL = level;
}
int fio_get_log_level() {
return FIO_LOG_LEVEL;
}
void fio_log_print(int level, const char* msg) {
FIO_LOG_PRINT(level, "%s", msg);
}
#include <websockets.h>
struct websocket_subscribe_s_zigcompat {
/** the websocket receiving the message. REQUIRED. */
ws_s *ws;
/** the channel where the message was published. */
fio_str_info_s channel;
/**
* The callback that handles pub/sub notifications.
*
* Default: send directly to websocket client.
*/
void (*on_message)(ws_s *ws, fio_str_info_s channel, fio_str_info_s msg,
void *udata);
/**
* An optional cleanup callback for the `udata`.
*/
void (*on_unsubscribe)(void *udata);
/** User opaque data, passed along to the notification. */
void *udata;
/** An optional callback for pattern matching. */
fio_match_fn match;
/**
* When using client forwarding (no `on_message` callback), this indicates if
* messages should be sent to the client as binary blobs, which is the safest
* approach.
*
* Default: tests for UTF-8 data encoding and sends as text if valid UTF-8.
* Messages above ~32Kb are always assumed to be binary.
*/
unsigned char force_binary;
/**
* When using client forwarding (no `on_message` callback), this indicates if
* messages should be sent to the client as text.
*
* `force_binary` has precedence.
*
* Default: see above.
*
*/
unsigned char force_text;
};
/**
* Subscribes to a channel. See {struct websocket_subscribe_s} for possible
* arguments.
*
* Returns a subscription ID on success and 0 on failure.
*
* All subscriptions are automatically revoked once the websocket is closed.
*
* If the connections subscribes to the same channel more than once, messages
* will be merged. However, another subscription ID will be assigned, since two
* calls to {websocket_unsubscribe} will be required in order to unregister from
* the channel.
*/
uintptr_t websocket_subscribe_zigcompat(struct websocket_subscribe_s_zigcompat args)
{
return websocket_subscribe(args.ws,
// .ws = args.ws,
.channel = args.channel,
.on_message = args.on_message,
.on_unsubscribe = args.on_unsubscribe,
.udata = args.udata,
.match = args.match,
.force_binary = args.force_binary & 1,
.force_text = args.force_text & 1,
);
}