コード例 #1
0
ファイル: stream_io.c プロジェクト: ngkaho1234/event-driven-1
void stream_io_submit(struct stream_request *req)
{
	struct stream *s = req->stream;
	struct stream_loop *loop = s->loop;
	struct event_list *list;
	int events;
	req->__private.buf = req->buffer.buf;
	req->__private.len = req->buffer.len;

	if (req->request == REQ_READ) {
		list = &s->read_queue[IO_WAIT];
		events = EV_READ;
	} else if (req->request == REQ_WRITE) {
		list = &s->write_queue[IO_WAIT];
		events = EV_WRITE;
	} else if (req->request == REQ_ACCEPT) {
		list = &s->read_queue[IO_WAIT];
		events = EV_READ;
	}

	if (event_list_empty(&req->node)) {
		event_list_add(&req->node, list);
		if (events & EV_READ) {
			__process_read_request(s);
			if (!event_list_empty(&s->read_queue[IO_FIN])) {
				stream_feed(s, EV_READ);
				goto out;
			}
		}
		if (events & EV_WRITE) {
			__process_write_request(s);
			if (!event_list_empty(&s->write_queue[IO_FIN])) {
				stream_feed(s, EV_WRITE);
				goto out;
			}
		}
	} else 
		event_list_add(&req->node, list);

	switch (events) {
	case EV_READ:
		stream_try_io_start_read(loop, s);
		break;
	case EV_WRITE:
		stream_try_io_start_write(loop, s);
	}

	/* For future use of ET mode. */
#if 0
	stream_feed(s, events);
#endif
out:
	return;
}
コード例 #2
0
ファイル: test.c プロジェクト: umolina/c-event-scheduler
int main( int argc, char **argv )
{
    int id = 0;
    time_t now = time( NULL );
    int seconds = 100;
    int shift = 0;

    id = event_list_add( 0, now + seconds, seconds, shift, NULL, NULL );
    printf("Event id: %d\n", id);

    id = event_list_add( 0, now + seconds, seconds, shift, NULL, NULL );
    printf("Event id: %d\n", id);

    int numEvents = 0;
    numEvents = count_events();
    printf("Number of events: %d\n", numEvents);

    event_list_clean();

    numEvents = count_events();
    printf("Number of events: %d\n", numEvents);

    return 0;
}
コード例 #3
0
ファイル: mqtt_instance.c プロジェクト: wosayttn/aos
int mqtt_set_event_cb(void (*event_cb)(int event, void *ctx), void *ctx)
{
    if (!event_cb)
        return -1;

    if (!mqtt_client)
        return -1;

    mqtt_instance_event_t *ev = LITE_malloc(sizeof(mqtt_instance_event_t));
    if (!ev)
        return -1;
    memset(ev, 0, sizeof(mqtt_instance_event_t));

    ev->event_cb = event_cb;
    ev->ctx = ctx;

    event_list_add(ev);

    return 0;
}
コード例 #4
0
ファイル: stream_io.c プロジェクト: ngkaho1234/event-driven-1
static int __move_to_queue(struct stream_request *req, struct event_list *dest)
{
	event_list_del(&req->node);
	event_list_add(&req->node, dest);
}