#pragma once #include #include #include #include "util/buffer.h" #include "socket/socket.h" #include "loop.h" enum { NNWT_LINE_PROCESSOR_SOCKET = 0, NNWT_LINE_PROCESSOR_FD }; enum { NNWT_LINE_PROCESSOR_CONTINUE = 0, NNWT_LINE_PROCESSOR_STOP }; struct nn_line_processor_client { ev_io event; struct nn_socket sock; size_t index; struct nn_buffer buf; size_t mark; struct nn_line_processor *pro; }; struct nn_line_processor { struct nn_event_loop *loop; u8 type; ev_io event; struct nn_socket *sock; s32 fd; str delim; array(struct nn_line_processor_client *) clients; u8 (*callback)(void *, str *line); void *userdata; }; void nn_line_processor_init(struct nn_line_processor *pro, str *delim); void nn_line_processor_open_socket(struct nn_line_processor *pro, struct nn_socket *sock); void nn_line_processor_open_fd(struct nn_line_processor *pro, s32 fd); void nn_line_processor_run(struct nn_line_processor *pro, struct nn_event_loop *loop); void nn_line_processor_stop(struct nn_line_processor *pro);