Nilorea Library
C utilities for networking, threading, graphics
Loading...
Searching...
No Matches
ex_network_sse.c

SSE (Server-Sent Events) client example using Nilorea network module.

SSE (Server-Sent Events) client example using Nilorea network module

Author
Castagnier Mickael
Version
1.0
Date
26/03/2026
/*
* Nilorea Library
* Copyright (C) 2005-2026 Castagnier Mickael
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include "nilorea/n_str.h"
#include "nilorea/n_log.h"
#include <getopt.h>
#include <string.h>
#define MAX_EVENTS 3
static int event_count = 0;
static N_SSE_CONN* g_conn = NULL;
void usage(void) {
fprintf(stderr,
" -V 'log level' : set the log level (LOG_NULL, LOG_NOTICE, LOG_INFO, LOG_ERR, LOG_DEBUG)\n"
" -h : help\n");
}
#ifdef HAVE_OPENSSL
static void on_sse_event(N_SSE_EVENT* event, N_SSE_CONN* conn, void* user_data) {
(void)user_data;
g_conn = conn;
fprintf(stdout, "SSE event %d: type=%s data=%s id=%s\n",
(event->event && event->event->data) ? event->event->data : "(default)",
(event->data && event->data->data) ? event->data->data : "(empty)",
(event->id && event->id->data) ? event->id->data : "(none)");
n_sse_stop(conn);
}
}
#endif
int main(int argc, char* argv[]) {
int getoptret = 0;
while ((getoptret = getopt(argc, argv, "hV:")) != EOF) {
switch (getoptret) {
case 'V':
if (!strncmp("LOG_NULL", optarg, 8)) {
} else if (!strncmp("LOG_NOTICE", optarg, 10)) {
} else if (!strncmp("LOG_INFO", optarg, 8)) {
} else if (!strncmp("LOG_ERR", optarg, 7)) {
} else if (!strncmp("LOG_DEBUG", optarg, 9)) {
} else {
fprintf(stderr, "%s is not a valid log level.\n", optarg);
exit(1);
}
break;
case 'h':
default:
usage();
exit(1);
}
}
#ifdef HAVE_OPENSSL
n_log(LOG_INFO, "Connecting to SSE endpoint https://sse.dev/test ...");
g_conn = n_sse_connect("sse.dev", "443", "/test", 1, on_sse_event, NULL);
if (!g_conn) {
fprintf(stdout, "SSE server unreachable, skipping\n");
exit(0);
}
fprintf(stdout, "SSE example completed, received %d events\n", event_count);
n_log(LOG_INFO, "SSE example completed successfully");
#else
(void)log_level;
fprintf(stdout, "OpenSSL not available, skipping SSE test\n");
#endif
exit(0);
}
static void usage(void)
int main(void)
int getoptret
Definition ex_fluid.c:60
int log_level
Definition ex_fluid.c:61
static N_SSE_CONN * g_conn
pointer to connection for callback to stop
static int event_count
counter for received events
static void on_sse_event(N_SSE_EVENT *event, N_SSE_CONN *conn, void *user_data)
SSE event callback.
#define MAX_EVENTS
maximum number of events to receive before stopping
#define n_log(__LEVEL__,...)
Logging function wrapper to get line and func.
Definition n_log.h:88
#define LOG_DEBUG
debug-level messages
Definition n_log.h:83
#define LOG_ERR
error conditions
Definition n_log.h:75
void set_log_level(const int log_level)
Set the global log level value ( static int LOG_LEVEL )
Definition n_log.c:120
#define LOG_NOTICE
normal but significant condition
Definition n_log.h:79
#define LOG_NULL
no log output
Definition n_log.h:45
#define LOG_INFO
informational
Definition n_log.h:81
char * data
the string
Definition n_str.h:62
N_STR * event
event type (or NULL for default)
Definition n_network.h:714
void n_sse_stop(N_SSE_CONN *conn)
Signal the SSE connection to stop reading.
Definition n_network.c:5085
void n_sse_conn_free(N_SSE_CONN **conn)
Free an SSE connection structure.
Definition n_network.c:5094
N_SSE_CONN * n_sse_connect(const char *host, const char *port, const char *path, int use_ssl, void(*on_event)(N_SSE_EVENT *, N_SSE_CONN *, void *), void *user_data)
Connect to an SSE endpoint and start reading events.
Definition n_network.c:5179
SSE connection handle.
Definition n_network.h:723
SSE event received from server.
Definition n_network.h:713
Generic log system.
Network Engine.
N_STR and string function declaration.