Files

95 lines
2.3 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_chunk on_ping;
wsd_cb_on_chunk on_pong;
};
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_chunk on_ping,
wsd_cb_on_chunk on_pong)
{
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;
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;
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, wsd_Chunk *reason)
{
wsd_cb_on_close cb = NULL;
if (observer == NULL) return;
cb = observer->on_close;
if (cb) cb(observer->receiver, code, reason);
}
void wsd_Observer_on_ping(wsd_Observer *observer, wsd_Chunk *payload)
{
wsd_cb_on_chunk cb = NULL;
if (observer == NULL) return;
cb = observer->on_ping;
if (cb) cb(observer->receiver, payload);
}
void wsd_Observer_on_pong(wsd_Observer *observer, wsd_Chunk *payload)
{
wsd_cb_on_chunk cb = NULL;
if (observer == NULL) return;
cb = observer->on_pong;
if (cb) cb(observer->receiver, payload);
}