Added code.
This commit is contained in:
96
server/src/include/session.h
Normal file
96
server/src/include/session.h
Normal file
@@ -0,0 +1,96 @@
|
||||
#ifndef SESSION_H
|
||||
#define SESSION_H
|
||||
|
||||
#include <libwebsockets.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
// Includes terminating null.
|
||||
#define SESSION_USERNAME_MAX_LEN 32
|
||||
#define SESSION_CHAT_BUF_SIZE 1024
|
||||
|
||||
/**
|
||||
* session_t
|
||||
* Represents a single WebSocket client session in the chat server.
|
||||
*/
|
||||
typedef struct SESSION {
|
||||
struct lws* wsi; // Libwebsockets connection handle.
|
||||
uint64_t id; // Unique session ID.
|
||||
struct SESSION* next; // Next session in the internal list.
|
||||
char name[SESSION_USERNAME_MAX_LEN]; // Stored username.
|
||||
bool named; // True once username is set.
|
||||
unsigned char buf[LWS_PRE + SESSION_CHAT_BUF_SIZE]; // Outgoing buffer per session
|
||||
size_t buf_len; // Length of data in buf
|
||||
} Session;
|
||||
|
||||
/**
|
||||
* session_create
|
||||
* Allocate and initialize a new session, adding it to the internal list.
|
||||
*
|
||||
* @param wsi The libwebsockets connection handle.
|
||||
* @return Pointer to the new session, or NULL on failure.
|
||||
*/
|
||||
Session* session_create(struct lws* wsi);
|
||||
|
||||
/**
|
||||
* session_destroy
|
||||
* Remove the given session from the internal list and free its memory.
|
||||
*
|
||||
* @param sess The session to destroy.
|
||||
*/
|
||||
void session_destroy(Session* sess);
|
||||
|
||||
/**
|
||||
* session_get_head
|
||||
* Retrieve the head of the internal session linked list.
|
||||
*
|
||||
* @return The first session in the list, or NULL if none.
|
||||
*/
|
||||
Session* session_get_head(void);
|
||||
|
||||
/**
|
||||
* session_broadcast
|
||||
* Iterate every session in the internal list and invoke the callback.
|
||||
*
|
||||
* @param cb Function to call for each session.
|
||||
* @param user Arbitrary user data passed through to each callback.
|
||||
*/
|
||||
void session_broadcast(void (*cb)(Session* sess, void* user), void* user);
|
||||
|
||||
/**
|
||||
* session_set_username
|
||||
* Store a username in the given session.
|
||||
*
|
||||
* @param sess The session to update.
|
||||
* @param username Null-terminated string to copy into the session.
|
||||
*/
|
||||
void session_set_username(Session* sess, const char* username);
|
||||
|
||||
/**
|
||||
* session_get_username
|
||||
* Fetch the username stored in the session.
|
||||
*
|
||||
* @param sess The session to query.
|
||||
* @return Pointer to the stored username (readonly).
|
||||
*/
|
||||
const char* session_get_username(const Session* sess);
|
||||
|
||||
/**
|
||||
* session_has_username
|
||||
* Check whether a session has already set a username.
|
||||
*
|
||||
* @param sess The session to query.
|
||||
* @return True if a username is set, false otherwise.
|
||||
*/
|
||||
bool session_has_username(const Session* sess);
|
||||
|
||||
/**
|
||||
* session_get_id
|
||||
* Fetch the session ID.
|
||||
*
|
||||
* @param sess The session to query.
|
||||
* @return The session's unique ID.
|
||||
*/
|
||||
uint64_t session_get_id(const Session* sess);
|
||||
|
||||
#endif // SESSION_H
|
||||
Reference in New Issue
Block a user