render_remote.c
author Tero Marttila <terom@fixme.fi>
Thu, 26 Jun 2008 03:31:59 +0300
changeset 25 a1e271de54c2
parent 23 31307efd7e78
child 26 6d615203d963
permissions -rw-r--r--
replace printf -> INFO

committer: Tero Marttila <terom@fixme.fi>
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include <stdlib.h>
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include <arpa/inet.h>
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
#include <unistd.h>
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include <fcntl.h>
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include <errno.h>
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
     6
#include <assert.h>
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
4
49edbdf9ebe7 updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
     8
#include <event2/event.h>
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
     9
#include <event2/event_struct.h>
4
49edbdf9ebe7 updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
    10
#include <event2/bufferevent.h>
49edbdf9ebe7 updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
    11
23
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    12
#include "render_struct.h"
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
#include "render_remote.h"
23
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    14
#include "render_net.h"
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
#include "common.h"
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    17
struct render_remote {
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    18
    // the socket fd
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    19
    int sock;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    20
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    21
    // the event/bufferevent
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    22
    struct event ev_connect, ev_data;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    23
    struct bufferevent *bev_data;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
23
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    25
    // the command
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    26
    struct render_cmd render_cmd;
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    27
    
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    28
    // have we sent the command yet?
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    29
    int cmd_sent;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    30
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    31
    // have we received the EOF?
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    32
    int have_eof;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    33
    
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    34
    // has cb_done/cb_fail/cancel already been called?
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    35
    int alive;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    void (*cb_sent)(void *arg);
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    void (*cb_data)(struct evbuffer *buf, void *arg);
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    void (*cb_done)(void *arg);
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
    void (*cb_fail)(void *arg);
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
    void *cb_arg;
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
};
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    45
// internal prototypes
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    46
static void _render_remote_free (struct render_remote *ctx);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    47
static void _render_remote_do_data (struct render_remote *ctx);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    48
static void _render_remote_do_done (struct render_remote *ctx);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    49
static void _render_remote_do_fail (struct render_remote *ctx);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    50
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    51
static void _render_remote_free (struct render_remote *ctx) {
16
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    52
    assert(ctx && !ctx->alive);
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    53
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    54
    // free the bev_data
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    55
    if (ctx->bev_data)
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    56
        bufferevent_free(ctx->bev_data);
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    57
    
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    58
    // and the events
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    59
    if (event_pending(&ctx->ev_connect, EV_WRITE, NULL))
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    60
        event_del(&ctx->ev_connect);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    61
    
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    62
    if (event_pending(&ctx->ev_data, EV_READ, NULL))
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    63
        event_del(&ctx->ev_data);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    64
        
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    65
    // close the socket (ctx->ev_connect remains valid even after we're done with it...)
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    66
    if (ctx->sock)
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    67
        close(ctx->sock);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
    
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    // free the context structure
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    70
    free(ctx);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
}
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    73
static void _render_remote_do_data (struct render_remote *ctx) {
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    74
    // if there's data in the buffer, call cb_data
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    75
    if (evbuffer_get_length(bufferevent_get_input(ctx->bev_data))) {
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    76
        ctx->cb_data(EVBUFFER_INPUT(ctx->bev_data), ctx->cb_arg);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    77
    }
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    78
    
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    79
    // if we got EOF on the connection and there's no data left in the buffer, call cb_done
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    80
    if (ctx->have_eof && evbuffer_get_length(bufferevent_get_input(ctx->bev_data)) == 0) {
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    81
        _render_remote_do_done(ctx);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    82
    }
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    83
}
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    84
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    85
static void _render_remote_do_done (struct render_remote *ctx) {
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    86
    assert(ctx->alive);
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    87
    
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    88
    ctx->alive = 0;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    90
    ctx->cb_done(ctx->cb_arg);
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    91
}
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    92
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    93
static void _render_remote_do_fail (struct render_remote *ctx) {
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    94
    assert(ctx->alive);
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    95
    
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    96
    ctx->alive = 0;
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    97
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    98
    ctx->cb_fail(ctx->cb_arg);
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    99
}
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   100
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   101
static void _remote_write (struct bufferevent *bev, void *arg) {
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   102
    struct render_remote *ctx = arg;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
    
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   104
    if (!ctx->cmd_sent) {
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   105
        // write the render command
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   106
        if (bufferevent_write(ctx->bev_data, &ctx->render_cmd, sizeof(ctx->render_cmd)))
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   107
            ERROR("bufferevent_write");
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   109
        // wait for it to be written out (we get called a second time)
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   110
        ctx->cmd_sent = 1;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   111
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   112
    } else {
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   113
        // the write buffer was drained, so the render command was write():n
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   114
        assert(ctx->cb_sent);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   115
        ctx->cb_sent(ctx->cb_arg);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   116
        ctx->cb_sent = NULL;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   117
        
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   118
        // we don't care about EV_WRITE anymore
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   119
        if (bufferevent_disable(ctx->bev_data, EV_WRITE))
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   120
            ERROR("bufferevent_disable");
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   121
        
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   122
        // are we buffered or raw?
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   123
        if (ctx->cb_data) {
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   124
            // start receiving data into our buffer
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   125
            if (bufferevent_enable(ctx->bev_data, EV_READ))
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   126
                ERROR("bufferevent_enable");
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   127
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   128
        } else {
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   129
            assert(event_initialized(&ctx->ev_data));
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   130
            
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   131
            // enable the raw read event
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   132
            if (event_add(&ctx->ev_data, NULL))
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   133
                ERROR("event_add");
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   134
        }
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   135
    }
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   136
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   137
    return;
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   138
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   139
error:
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   140
    _render_remote_do_fail(ctx);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
}
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   143
static void _remote_read (struct bufferevent *bev, void *arg) {
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   144
    struct render_remote *ctx = arg;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   145
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   146
    _render_remote_do_data(ctx);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
}
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   149
static void _remote_error (struct bufferevent *bev, short what, void *arg) {
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   150
    struct render_remote *ctx = arg;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
    // OH NOES; WHAT DO WE DO!?
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
    
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
    if (what & EVBUFFER_EOF) {
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
        // great!
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   156
        ctx->have_eof = 1;
3
675be0a45157 working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   157
        
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   158
        // flush any remaining data/call cb_send as needed
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   159
        _render_remote_do_data(ctx);
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   160
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   161
        return;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
    } else if (what & EVBUFFER_ERROR) {
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
        // crap.
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   165
        PWARNING("EVBUFFER_ERROR");
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
    } else if (what & EVBUFFER_TIMEOUT) {
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
        // ah well
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   169
        WARNING("render_remote: timeout");
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
    } else {
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   172
        FATAL("weird bufferevent error code: 0x%02X", what);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
    }
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   174
    
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   175
    // cb_fail + free
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   176
    _render_remote_do_fail(ctx);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
}
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   179
/*
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   180
 * Do the initial IO-agnostic work to initialize the rendering process
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   181
 */
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   182
static struct render_remote *_render_remote_init (struct render *render, struct remote_pool *pool_info) {
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   183
    struct render_remote *ctx;
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   184
    struct remote_node *node_info;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   186
    // get a node from the pool
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   187
    if (!(node_info = remote_pool_get(pool_info)))
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   188
        ERROR("remote_pool_get");
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   189
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   190
    // alloc the remote render ctx
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   191
    if (!(ctx = calloc(1, sizeof(*ctx))))
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   192
        ERROR("calloc");
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   193
        
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   194
    // copy the relevant stuff from the render_ctx
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   195
    ctx->render_cmd.mode = render->mode;
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   196
    ctx->render_cmd.img_w = htonl(render->img_w);
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   197
    ctx->render_cmd.img_h = htonl(render->img_h);
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   198
    ctx->render_cmd.x1 = render->x1;
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   199
    ctx->render_cmd.y1 = render->y1;
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   200
    ctx->render_cmd.x2 = render->x2;
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   201
    ctx->render_cmd.y2 = render->y2;
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   202
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   203
    // create the socket
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   204
    if ((ctx->sock = socket(node_info->addr.ss_family, SOCK_STREAM, 0)) < 0)
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   205
        PERROR("socket");
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   206
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   207
    // mark it as nonblocking
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   208
    if (fcntl(ctx->sock, F_SETFL, O_NONBLOCK) == -1)
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   209
        PERROR("fcntl");
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   210
    
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   211
    // initiate the connect
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   212
    int err = connect(ctx->sock, (struct sockaddr *) &node_info->addr, sizeof(node_info->addr));
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   213
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   214
    if (err != -1 || errno != EINPROGRESS)
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   215
        PERROR("connect");
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   216
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   217
    // return the raw ctx
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   218
    return ctx;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   219
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   220
error:
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   221
    _render_remote_free(ctx);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   222
    return NULL;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
}
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   224
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   225
/*
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   226
 * Raw unbuffered I/O mode
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   227
 */
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   228
struct render_remote *render_remote_rawio (
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   229
        struct render *render,
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   230
        struct remote_pool *pool_info,
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   231
        void (*cb_sent)(void *arg),
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   232
        void (*cb_fail)(void *arg),
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   233
        void (*cb_io_data)(evutil_socket_t, short, void*),
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   234
        void *cb_arg
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   235
) {
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   236
    struct render_remote *ctx;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   237
    
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   238
    // short-circuit error handling
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   239
    if (!(ctx = _render_remote_init(render, pool_info)))
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   240
        return NULL;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   241
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   242
    // store the provided callback functions
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   243
    ctx->cb_sent = cb_sent;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   244
    ctx->cb_fail = cb_fail;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   245
    ctx->cb_arg = cb_arg;
16
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   246
 
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   247
    // set up the custom EV_READ callback
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   248
    event_set(&ctx->ev_data, ctx->sock, EV_READ, cb_io_data, cb_arg);
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   249
   
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   250
    // set up the write bufferevent
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   251
    if ((ctx->bev_data = bufferevent_new(ctx->sock, NULL, &_remote_write, &_remote_error, ctx)) == NULL)
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   252
        ERROR("bufferevent_new");
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   253
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   254
    // wait for it to connect
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   255
    if (bufferevent_enable(ctx->bev_data, EV_WRITE))
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   256
        ERROR("bufferevent_enable");
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   257
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   258
    // we are now alive
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   259
    ctx->alive = 1;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   260
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   261
    // success
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   262
    return ctx;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   263
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   264
error:
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   265
    _render_remote_free(ctx);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   266
    return NULL;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   267
}   
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   268
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   269
/*
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   270
 * Old buffered mode
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   271
 */
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   272
struct render_remote *render_remote (
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   273
        struct render *render,
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   274
        struct remote_pool *pool_info,
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   275
        void (*cb_sent)(void *arg),
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   276
        void (*cb_data)(struct evbuffer *buf, void *arg),
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   277
        void (*cb_done)(void *arg),
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   278
        void (*cb_fail)(void *arg),
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   279
        void *cb_arg
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   280
) {    
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   281
    struct render_remote *ctx;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   282
    
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   283
    // short-circuit error handling
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   284
    if (!(ctx = _render_remote_init(render, pool_info)))
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   285
        return NULL;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   286
    
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   287
    // store the provided callback functions
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   288
    ctx->cb_sent = cb_sent;
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   289
    ctx->cb_data = cb_data;
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   290
    ctx->cb_done = cb_done;
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   291
    ctx->cb_fail = cb_fail;
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   292
    ctx->cb_arg = cb_arg;
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   293
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   294
    // set up the read/write bufferevent
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   295
    if ((ctx->bev_data = bufferevent_new(ctx->sock, &_remote_read, &_remote_write, &_remote_error, ctx)) == NULL)
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   296
        ERROR("bufferevent_new");
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   297
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   298
    // wait for it to connect
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   299
    if (bufferevent_enable(ctx->bev_data, EV_WRITE))
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   300
        ERROR("bufferevent_enable");
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   301
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   302
    // we are now alive
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   303
    ctx->alive = 1;
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   304
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   305
    // success
3
675be0a45157 working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   306
    return ctx;
4
49edbdf9ebe7 updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
   307
49edbdf9ebe7 updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
   308
error:
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   309
    _render_remote_free(ctx);
4
49edbdf9ebe7 updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
   310
    return NULL;
3
675be0a45157 working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   311
}
675be0a45157 working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   312
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   313
void render_remote_set_recv (struct render_remote *ctx, size_t recv_threshold, size_t unread_buffer) {
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   314
    assert(ctx->bev_data);
3
675be0a45157 working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   315
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   316
    bufferevent_setwatermark(ctx->bev_data, EV_READ, recv_threshold, recv_threshold + unread_buffer);
6
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   317
}
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   318
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   319
void render_remote_flush (struct render_remote *ctx) {
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   320
    assert(ctx->bev_data);
6
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   321
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   322
    // call cb_data/cb_done as appropriate
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   323
    _render_remote_do_data(ctx);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   324
}
3
675be0a45157 working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   325
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   326
int render_remote_reschedule (struct render_remote *ctx) {
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   327
    assert(event_initialized(&ctx->ev_data));
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   328
    
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   329
    // just reschedule it
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   330
    if (event_add(&ctx->ev_data, NULL))
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   331
        ERROR("event_add");
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   332
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   333
    // ok
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   334
    return 0;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   335
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   336
error:
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   337
    return -1;
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   338
}
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   339
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   340
void render_remote_cancel (struct render_remote *ctx) {
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   341
    // we must be alive for this..
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   342
    assert(ctx->alive);
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   343
16
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   344
    ctx->alive = 0;
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   345
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   346
    _render_remote_free(ctx);
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   347
}
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   348
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   349
void render_remote_done (struct render_remote *ctx) {
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   350
    // we must be alive and non-buffered for this..
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   351
    assert(ctx->alive && event_initialized(&ctx->ev_data));
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   352
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   353
    ctx->alive = 0;
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   354
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   355
    _render_remote_free(ctx);
3
675be0a45157 working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   356
}
675be0a45157 working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   357
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   358
void render_remote_free (struct render_remote *ctx) {
16
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   359
    // must be dead already
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   360
    assert(!ctx->alive);
15
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   361
    
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   362
    _render_remote_free(ctx);
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   363
}
e7f0697814dc added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   364