atbetaflight/lib/main/dyad/dyad.h

107 lines
2.6 KiB
C

/**
* Copyright (c) 2016 rxi
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the MIT license. See LICENSE for details.
*/
#ifndef DYAD_H
#define DYAD_H
#include <stdarg.h>
#ifdef _WIN32
#include <windows.h> /* For SOCKET */
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if _WIN32
typedef SOCKET dyad_Socket;
#else
typedef int dyad_Socket;
#endif
struct dyad_Stream;
typedef struct dyad_Stream dyad_Stream;
typedef struct {
int type;
void *udata;
dyad_Stream *stream;
dyad_Stream *remote;
const char *msg;
char *data;
int size;
} dyad_Event;
typedef void (*dyad_Callback)(dyad_Event*);
typedef void (*dyad_PanicCallback)(const char*);
enum {
DYAD_EVENT_NULL,
DYAD_EVENT_DESTROY,
DYAD_EVENT_ACCEPT,
DYAD_EVENT_LISTEN,
DYAD_EVENT_CONNECT,
DYAD_EVENT_CLOSE,
DYAD_EVENT_READY,
DYAD_EVENT_DATA,
DYAD_EVENT_LINE,
DYAD_EVENT_ERROR,
DYAD_EVENT_TIMEOUT,
DYAD_EVENT_TICK
};
enum {
DYAD_STATE_CLOSED,
DYAD_STATE_CLOSING,
DYAD_STATE_CONNECTING,
DYAD_STATE_CONNECTED,
DYAD_STATE_LISTENING
};
void dyad_init(void);
void dyad_update(void);
void dyad_shutdown(void);
const char *dyad_getVersion(void);
double dyad_getTime(void);
int dyad_getStreamCount(void);
void dyad_setTickInterval(double seconds);
void dyad_setUpdateTimeout(double seconds);
dyad_PanicCallback dyad_atPanic(dyad_PanicCallback func);
dyad_Stream *dyad_newStream(void);
int dyad_listen(dyad_Stream *stream, int port);
int dyad_listenEx(dyad_Stream *stream, const char *host, int port,
int backlog);
int dyad_connect(dyad_Stream *stream, const char *host, int port);
void dyad_addListener(dyad_Stream *stream, int event,
dyad_Callback callback, void *udata);
void dyad_removeListener(dyad_Stream *stream, int event,
dyad_Callback callback, void *udata);
void dyad_removeAllListeners(dyad_Stream *stream, int event);
void dyad_end(dyad_Stream *stream);
void dyad_close(dyad_Stream *stream);
void dyad_write(dyad_Stream *stream, const void *data, int size);
void dyad_vwritef(dyad_Stream *stream, const char *fmt, va_list args);
void dyad_writef(dyad_Stream *stream, const char *fmt, ...);
void dyad_setTimeout(dyad_Stream *stream, double seconds);
void dyad_setNoDelay(dyad_Stream *stream, int opt);
int dyad_getState(dyad_Stream *stream);
const char *dyad_getAddress(dyad_Stream *stream);
int dyad_getPort(dyad_Stream *stream);
int dyad_getBytesSent(dyad_Stream *stream);
int dyad_getBytesReceived(dyad_Stream *stream);
dyad_Socket dyad_getSocket(dyad_Stream *stream);
#ifdef __cplusplus
} // extern "C"
#endif
#endif