summaryrefslogtreecommitdiff
path: root/src/line_processor.h
blob: 5da7385091d3456859047932718b2ee53ab8ff4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#pragma once

#include <al/types.h>
#include <al/str.h>
#include <al/array.h>

#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);