0
-#include "../src/ebb.h"
0
-#define EV_STANDALONE 1
0
-#include "../libev/ev.h"
0
@@ -100,85 +97,62 @@ VALUE client_new(ebb_client *_client)
0
rb_iv_set(client, "@env", client_env(client));
0
rb_iv_set(client, "@upload_filename", rb_str_new2(_client->upload_file_filename));
0
+ rb_iv_set(client, "@write_buffer", rb_ary_new());
0
+void request_cb(ebb_client *_client, void *data)
0
+ VALUE server = (VALUE)data;
0
+ VALUE waiting_clients;
0
+ VALUE client = client_new(_client);
0
+ waiting_clients = rb_iv_get(server, "@waiting_clients");
0
+ rb_ary_push(waiting_clients, client);
0
VALUE server_alloc(VALUE self)
0
ebb_server *_server = ebb_server_alloc();
0
server = Data_Wrap_Struct(cServer, 0, ebb_server_free, _server);
0
-static void idle_cb (struct ev_loop *loop, struct ev_idle *watcher, int revents)
0
- ebb_server *_server = (ebb_server*)watcher->data;
0
- VALUE server = (VALUE)_server->data;
0
- workers = rb_iv_get(server, "@workers");
0
- list = rb_funcall(workers, rb_intern("list"), 0);
0
- //printf("len %d \n ", RARRAY_LEN(list));
0
- if(0 < RARRAY_LEN(list))
0
- ev_idle_stop(loop, watcher);
0
-void attach_idle_watcher(ebb_server *_server)
0
- if(FALSE == ev_is_active(&idle_watcher)) {
0
- idle_watcher.data = (void*)_server;
0
- ev_idle_init (&idle_watcher, idle_cb);
0
- ev_idle_start (_server->loop, &idle_watcher);
0
-void request_cb(ebb_client *_client, void *data)
0
- VALUE server = (VALUE)data;
0
- VALUE client = client_new(_client);
0
- attach_idle_watcher(_client->server);
0
- //rb_thread_schedule();
0
VALUE server_init(VALUE server, VALUE host, VALUE port)
0
struct ev_loop *loop = ev_default_loop (0);
0
Data_Get_Struct(server, ebb_server, _server);
0
ebb_server_init(_server, loop, StringValuePtr(host), FIX2INT(port), request_cb, (void*)server);
0
- _server->data = (void*)server;
0
+VALUE server_start(VALUE server)
0
+ Data_Get_Struct(server, ebb_server, _server);
0
+ rb_iv_set(server, "@waiting_clients", rb_ary_new());
0
+ ebb_server_start(_server);
0
VALUE server_process_connections(VALUE server)
0
- Data_Get_Struct(server, ebb_server, _server);
0
- struct ev_loop *loop = _server->loop;
0
- ebb_server_start(_server);
0
- attach_idle_watcher(_server);
0
+ Data_Get_Struct(server, ebb_server, _server);
0
//ev_loop(_server->loop, EVLOOP_NONBLOCK);
0
- //ev_loop(_server->loop, EVLOOP_ONESHOT);
0
+ ev_loop(_server->loop, EVLOOP_ONESHOT);
0
+ /* XXX: Need way to know when the loop is finished...
0
+ * should return true or false */
0
VALUE server_stop(VALUE server)
0
@@ -186,7 +160,6 @@ VALUE server_stop(VALUE server)
0
Data_Get_Struct(server, ebb_server, _server);
0
ebb_server_stop(_server);
0
- ev_unloop(_server->loop, EVUNLOOP_ALL);
0
@@ -278,9 +251,10 @@ void Init_ebb_ext()
0
rb_define_alloc_func(cServer, server_alloc);
0
rb_define_method(cServer, "init", server_init, 2);
0
rb_define_method(cServer, "process_connections", server_process_connections, 0);
0
+ rb_define_method(cServer, "really_start", server_start, 0);
0
rb_define_method(cServer, "stop", server_stop, 0);
0
rb_define_method(cClient, "write", client_write, 1);
0
- rb_define_method(cClient, "
start_writing", client_start_writing, 0);
0
+ rb_define_method(cClient, "
finished", client_start_writing, 0);
0
rb_define_method(cClient, "read_input", client_read_input, 1);
Comments
No one has commented yet.