Files

109 lines
2.7 KiB
C

#include "observer.h"
struct wsd_Observer {
void *receiver;
wsd_cb_on_error on_error;
wsd_cb_on_message on_message;
wsd_cb_on_close on_close;
wsd_cb_on_frame on_ping;
wsd_cb_on_frame on_pong;
wsd_cb_on_frame on_frame;
};
wsd_Observer * wsd_Observer_create(void *receiver,
wsd_cb_on_error on_error,
wsd_cb_on_message on_message,
wsd_cb_on_close on_close,
wsd_cb_on_frame on_ping,
wsd_cb_on_frame on_pong,
wsd_cb_on_frame on_frame)
{
wsd_Observer *observer = calloc(1, sizeof(wsd_Observer));
if (observer == NULL) return NULL;
observer->receiver = receiver;
observer->on_error = on_error;
observer->on_message = on_message;
observer->on_close = on_close;
observer->on_ping = on_ping;
observer->on_pong = on_pong;
observer->on_frame = on_frame;
return observer;
}
void wsd_Observer_destroy(wsd_Observer *observer)
{
if (observer == NULL) return;
observer->receiver = NULL;
observer->on_error = NULL;
observer->on_message = NULL;
observer->on_close = NULL;
observer->on_ping = NULL;
observer->on_pong = NULL;
observer->on_frame = NULL;
free(observer);
}
void wsd_Observer_on_error(wsd_Observer *observer, int code, char *reason)
{
wsd_cb_on_error cb = NULL;
if (observer == NULL) return;
cb = observer->on_error;
if (cb) cb(observer->receiver, code, reason);
}
void wsd_Observer_on_message(wsd_Observer *observer, wsd_Message *message)
{
wsd_cb_on_message cb = NULL;
if (observer == NULL) return;
cb = observer->on_message;
if (cb) cb(observer->receiver, message);
}
void wsd_Observer_on_close(wsd_Observer *observer, int code, uint64_t length, uint8_t *reason)
{
wsd_cb_on_close cb = NULL;
if (observer == NULL) return;
cb = observer->on_close;
if (cb) cb(observer->receiver, code, length, reason);
}
void wsd_Observer_on_ping(wsd_Observer *observer, wsd_Frame *frame)
{
wsd_cb_on_frame cb = NULL;
if (observer == NULL) return;
cb = observer->on_ping;
if (cb) cb(observer->receiver, frame);
}
void wsd_Observer_on_pong(wsd_Observer *observer, wsd_Frame *frame)
{
wsd_cb_on_frame cb = NULL;
if (observer == NULL) return;
cb = observer->on_pong;
if (cb) cb(observer->receiver, frame);
}
void wsd_Observer_on_frame(wsd_Observer *observer, wsd_Frame *frame)
{
wsd_cb_on_frame cb = NULL;
if (observer == NULL) return;
cb = observer->on_frame;
if (cb) cb(observer->receiver, frame);
}