DeterministicESPAsyncWebServer v6.27.1
Zero-allocation, bounded-execution async HTTP server for ESP32
Loading...
Searching...
No Matches
sse.cpp File Reference

Server-Sent Events connection pool implementation. More...

#include "sse.h"
#include "network_drivers/transport/tcp.h"
#include <stdio.h>
#include <string.h>

Go to the source code of this file.

Functions

void sse_init ()
 Initialize all SSE pool slots to inactive.
 
SseConnsse_alloc (uint8_t slot_id, const char *path)
 Allocate an SseConn and bind it to a TCP slot.
 
SseConnsse_find (uint8_t slot_id)
 Find the SseConn for a given TCP slot, or nullptr.
 
void sse_free (uint8_t slot_id)
 Free the SseConn associated with a TCP slot.
 
int sse_format (char *buf, size_t n, const char *data, const char *event, const char *id)
 Format one SSE event record into a caller buffer (no transport).
 
bool sse_write (SseConn *sse, const char *data, const char *event, const char *id)
 Write one SSE event record to a client.
 

Variables

SseConn sse_pool [MAX_SSE_CONNS]
 Pool of SSE connection state, one per MAX_SSE_CONNS.
 

Detailed Description

Server-Sent Events connection pool implementation.

Definition in file sse.cpp.

Function Documentation

◆ sse_init()

void sse_init ( )

Initialize all SSE pool slots to inactive.

Called once from DetWebServer::begin().

Definition at line 16 of file sse.cpp.

References MAX_SSE_CONNS, SseConn::sse_id, and sse_pool.

Referenced by DetWebServer::begin(), and DetWebServer::stop().

◆ sse_alloc()

SseConn * sse_alloc ( uint8_t  slot_id,
const char *  path 
)

Allocate an SseConn and bind it to a TCP slot.

Parameters
slot_idTCP slot that just received the SSE subscription request.
pathURL path the client subscribed to (stored for broadcast).
Returns
Pointer to the allocated SseConn, or nullptr if the pool is full.

Definition at line 25 of file sse.cpp.

References SseConn::active, MAX_PATH_LEN, MAX_SSE_CONNS, SseConn::path, SseConn::slot_id, SseConn::sse_id, and sse_pool.

◆ sse_find()

SseConn * sse_find ( uint8_t  slot_id)

Find the SseConn for a given TCP slot, or nullptr.

Parameters
slot_idTCP connection slot index.

Definition at line 43 of file sse.cpp.

References MAX_SSE_CONNS, and sse_pool.

Referenced by DetWebServer::http_poll_slot().

◆ sse_free()

void sse_free ( uint8_t  slot_id)

Free the SseConn associated with a TCP slot.

Parameters
slot_idTCP connection slot index.

Definition at line 53 of file sse.cpp.

References MAX_SSE_CONNS, SseConn::sse_id, and sse_pool.

◆ sse_format()

int sse_format ( char *  buf,
size_t  n,
const char *  data,
const char *  event,
const char *  id 
)

Format one SSE event record into a caller buffer (no transport).

Emits event: <event>\n (if event), id: <id>\n (if id), then data: <data>\n\n per the WHATWG event-stream format. data must not be nullptr. Pure: no connection state, so it is unit-testable and benchable on its own; sse_write() wraps it with the det_conn_send() I/O.

Parameters
bufDestination buffer.
nSize of buf.
dataEvent data (required).
eventEvent name (optional).
idEvent ID (optional).
Returns
Bytes written (excluding the terminator), or 0 on empty/overflow.

Definition at line 66 of file sse.cpp.

Referenced by sse_write().

◆ sse_write()

bool sse_write ( SseConn sse,
const char *  data,
const char *  event,
const char *  id 
)

Write one SSE event record to a client.

Formats and sends event: ...\nid: ...\ndata: ...\n\n. Any optional field may be nullptr to omit it. data must not be nullptr.

The caller must flush the connection afterwards (det_conn_flush()) if immediate delivery is needed.

Parameters
sseSSE connection.
dataEvent data (required).
eventEvent name (optional).
idEvent ID (optional).
Returns
true on success, false if the TCP slot is not active.

Definition at line 88 of file sse.cpp.

References det_conn_send(), SseConn::slot_id, SSE_BUF_SIZE, and sse_format().

Variable Documentation

◆ sse_pool

Pool of SSE connection state, one per MAX_SSE_CONNS.

Definition at line 14 of file sse.cpp.

Referenced by sse_alloc(), sse_find(), sse_free(), and sse_init().