terom@2: #ifndef RENDER_REMOTE_H terom@2: #define RENDER_REMOTE_H terom@2: terom@4: #include terom@4: #include terom@2: terom@2: #include "render.h" terom@2: terom@2: /* terom@2: * Execute a render_t operation on a remote render_node terom@2: */ terom@2: terom@2: terom@2: #define RENDER_PORT 6159 terom@2: terom@3: struct remote_render_ctx; terom@3: terom@2: /* terom@3: * Execute the given render operation on the render_node at the given remote address. terom@3: * terom@3: * The various callback functions must all be provided. terom@3: * terom@3: * cb_sent will be invoked after the request has succesfully been written, and before cb_data is called. terom@3: * cb_data is called whenever new data has been received. See also, render_remote_set_chunk_size terom@3: * cb_done is called when all the data has been passed to cb_data terom@3: * cb_fail is called when an error is encountered. This can (and will) happen at any time! terom@2: */ terom@3: struct remote_render_ctx *render_remote ( terom@4: struct event_base *evbase, terom@2: render_t *render_ctx, // what to render terom@2: struct sockaddr_storage *remote, // what render node to use terom@2: void (*cb_sent)(void *arg), terom@2: void (*cb_data)(struct evbuffer *buf, void *arg), terom@2: void (*cb_done)(void *arg), terom@2: void (*cb_fail)(void *arg), terom@2: void *cb_arg; terom@2: ); terom@2: terom@3: /* terom@3: * Cancel the given request. No more callbacks will be called, buffered data is discarded and the remote render process will cancel asap. terom@3: */ terom@3: void render_remote_cancel (struct remote_render_ctx *ctx); terom@3: terom@3: /* terom@3: * If you don't want to receive the rendered data one byte at a time, you can set a minimum chunk size. terom@3: * terom@3: * cb_done will only be called when the buffer contains at least chunk_size bytes, or no more data is available (cb_done will be called next). terom@3: * terom@3: * overflow_buffer is how many bytes will be buffered, at most, in addition to chunk_size (in case rendering is paused). After that, the render node will start to block. terom@3: * terom@3: * Only call this once cb_sent has fired terom@3: */ terom@3: int render_remote_set_chunk_size (struct remote_render_ctx *ctx, size_t chunk_size, size_t overflow_buffer); terom@3: terom@2: #endif /* RENDER_REMOTE_H */