odyssey/lib/mm_io.h

64 lines
1.3 KiB
C

#ifndef MM_IO_H_
#define MM_IO_H_
/*
* machinarium.
*
* Cooperative multitasking engine.
*/
typedef struct mmio mmio;
struct mmio {
uv_os_sock_t fd;
uv_tcp_t handle;
int close_ref;
mm *f;
/* connect */
uv_timer_t connect_timer;
uv_connect_t connect;
int connect_timeout;
int connected;
int connect_status;
mmfiber *connect_fiber;
/* accept */
int accept_status;
mmfiber *accept_fiber;
/* read */
uv_timer_t read_timer;
int read_ahead_size;
mmbuf read_ahead;
int read_ahead_pos;
int read_ahead_pos_data;
int read_size;
int read_timeout;
int read_eof;
int read_status;
mmfiber *read_fiber;
/* write */
uv_timer_t write_timer;
uv_write_t write;
int write_timeout;
int write_status;
mmfiber *write_fiber;
};
void mm_io_close_handle(mmio*, uv_handle_t*);
static inline void
mm_io_timer_start(mmio *io, uv_timer_t *timer, uv_timer_cb callback, uint64_t time_ms)
{
(void)io;
if (time_ms > 0)
uv_timer_start(timer, callback, time_ms, 0);
}
static inline void
mm_io_timer_stop(mmio *io, uv_timer_t *timer)
{
(void)io;
uv_timer_stop(timer);
}
#endif