#ifndef UIC_MESSAGE_H
#define UIC_MESSAGE_H
#include <cx/string.h>
#include <cx/json.h>
#include <cx/buffer.h>
#ifndef _WIN32
#include <pthread.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct UiMessageHandler UiMessageHandler;
typedef void(*msg_received_callback)(cxstring msg);
struct UiMessageHandler {
int (*start)(UiMessageHandler *handler);
int (*stop)(UiMessageHandler *handler);
int (*send)(UiMessageHandler *handler, cxstring msg);
msg_received_callback callback;
};
typedef struct UiSimpleMessageHandler {
UiMessageHandler handler;
int in;
int out;
#ifndef _WIN32
pthread_t in_thread;
pthread_t out_thread;
pthread_mutex_t queue_lock;
pthread_mutex_t avlbl_lock;
pthread_cond_t available;
#endif
CxBuffer *outbuf;
int stop;
} UiSimpleMessageHandler;
int uic_message_send_(UiMessageHandler *handler, cxstring msg);
#define uic_message_send(handler, msg) uic_message_send_(handler, cx_strcast(msg))
UiMessageHandler* uic_simple_msg_handler(int in, int out, msg_received_callback callback);
int uic_simple_msg_handler_start(UiMessageHandler *handler);
int uic_simple_msg_handler_stop(UiMessageHandler *handler);
int uic_simple_msg_handler_send(UiMessageHandler *handler, cxstring msg);
void* uic_simple_msg_handler_in_thread(void *data);
void* uic_simple_msg_handler_out_thread(void *data);
#ifdef __cplusplus
}
#endif
#endif