eventmachine-maglev- 0.12.10 → 1.0.0.beta.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +7 -0
- data/.yardopts +7 -0
- data/Gemfile +3 -0
- data/README.md +109 -0
- data/Rakefile +14 -368
- data/docs/DocumentationGuidesIndex.md +27 -0
- data/docs/GettingStarted.md +521 -0
- data/docs/old/DEFERRABLES +246 -0
- data/docs/{KEYBOARD → old/KEYBOARD} +15 -11
- data/docs/old/LIGHTWEIGHT_CONCURRENCY +130 -0
- data/docs/old/SMTP +4 -0
- data/docs/old/SPAWNED_PROCESSES +148 -0
- data/eventmachine.gemspec +20 -26
- data/examples/guides/getting_started/01_eventmachine_echo_server.rb +18 -0
- data/examples/guides/getting_started/02_eventmachine_echo_server_that_recognizes_exit_command.rb +22 -0
- data/examples/guides/getting_started/03_simple_chat_server.rb +149 -0
- data/examples/guides/getting_started/04_simple_chat_server_step_one.rb +27 -0
- data/examples/guides/getting_started/05_simple_chat_server_step_two.rb +43 -0
- data/examples/guides/getting_started/06_simple_chat_server_step_three.rb +98 -0
- data/examples/guides/getting_started/07_simple_chat_server_step_four.rb +121 -0
- data/examples/guides/getting_started/08_simple_chat_server_step_five.rb +141 -0
- data/examples/{ex_channel.rb → old/ex_channel.rb} +3 -3
- data/examples/old/ex_tick_loop_array.rb +15 -0
- data/examples/old/ex_tick_loop_counter.rb +32 -0
- data/ext/binder.cpp +0 -1
- data/ext/cmain.cpp +40 -29
- data/ext/ed.cpp +189 -134
- data/ext/ed.h +34 -40
- data/ext/em.cpp +388 -340
- data/ext/em.h +29 -32
- data/ext/eventmachine.h +7 -6
- data/ext/extconf.rb +57 -48
- data/ext/fastfilereader/extconf.rb +5 -3
- data/ext/fastfilereader/mapper.cpp +1 -1
- data/ext/fastfilereader/rubymain.cpp +0 -1
- data/ext/kb.cpp +1 -3
- data/ext/pipe.cpp +9 -11
- data/ext/project.h +12 -8
- data/ext/rubymain.cpp +158 -112
- data/java/src/com/rubyeventmachine/EmReactor.java +3 -2
- data/lib/em/buftok.rb +35 -63
- data/lib/em/callback.rb +43 -11
- data/lib/em/channel.rb +22 -15
- data/lib/em/completion.rb +303 -0
- data/lib/em/connection.rb +341 -208
- data/lib/em/deferrable/pool.rb +2 -0
- data/lib/em/deferrable.rb +20 -2
- data/lib/em/file_watch.rb +37 -18
- data/lib/em/iterator.rb +270 -0
- data/lib/em/pool.rb +146 -0
- data/lib/em/process_watch.rb +5 -4
- data/lib/em/processes.rb +8 -4
- data/lib/em/protocols/httpclient.rb +27 -11
- data/lib/em/protocols/httpclient2.rb +15 -5
- data/lib/em/protocols/line_protocol.rb +29 -0
- data/lib/em/protocols/memcache.rb +17 -9
- data/lib/em/protocols/object_protocol.rb +2 -1
- data/lib/em/protocols/postgres3.rb +2 -1
- data/lib/em/protocols/smtpclient.rb +19 -11
- data/lib/em/protocols/smtpserver.rb +101 -8
- data/lib/em/protocols/stomp.rb +9 -7
- data/lib/em/protocols/tcptest.rb +3 -2
- data/lib/em/protocols.rb +1 -1
- data/lib/{pr_eventmachine.rb → em/pure_ruby.rb} +188 -205
- data/lib/em/queue.rb +23 -13
- data/lib/em/resolver.rb +192 -0
- data/lib/em/spawnable.rb +9 -10
- data/lib/em/streamer.rb +34 -46
- data/lib/em/threaded_resource.rb +90 -0
- data/lib/em/tick_loop.rb +85 -0
- data/lib/em/timers.rb +8 -3
- data/lib/em/version.rb +1 -1
- data/lib/eventmachine.rb +582 -686
- data/lib/jeventmachine.rb +25 -3
- data/tasks/package.rake +98 -0
- data/tasks/test.rake +8 -0
- data/tests/em_test_helper.rb +64 -0
- data/tests/test_attach.rb +56 -56
- data/tests/test_basic.rb +111 -168
- data/tests/test_channel.rb +5 -6
- data/tests/test_completion.rb +177 -0
- data/tests/test_connection_count.rb +1 -3
- data/tests/test_defer.rb +3 -32
- data/tests/test_deferrable.rb +35 -0
- data/tests/test_epoll.rb +27 -57
- data/tests/test_error_handler.rb +10 -7
- data/tests/test_exc.rb +6 -33
- data/tests/test_file_watch.rb +51 -35
- data/tests/test_futures.rb +10 -38
- data/tests/test_get_sock_opt.rb +27 -20
- data/tests/test_handler_check.rb +1 -3
- data/tests/test_hc.rb +49 -112
- data/tests/test_httpclient.rb +34 -62
- data/tests/test_httpclient2.rb +14 -39
- data/tests/test_inactivity_timeout.rb +44 -40
- data/tests/test_kb.rb +26 -52
- data/tests/test_ltp.rb +27 -71
- data/tests/test_ltp2.rb +1 -30
- data/tests/test_next_tick.rb +2 -31
- data/tests/test_object_protocol.rb +8 -9
- data/tests/test_pause.rb +45 -37
- data/tests/test_pending_connect_timeout.rb +42 -38
- data/tests/test_pool.rb +128 -0
- data/tests/test_process_watch.rb +37 -37
- data/tests/test_processes.rb +92 -110
- data/tests/test_proxy_connection.rb +137 -61
- data/tests/test_pure.rb +30 -67
- data/tests/test_queue.rb +10 -4
- data/tests/test_resolver.rb +55 -0
- data/tests/test_running.rb +1 -29
- data/tests/test_sasl.rb +8 -33
- data/tests/test_send_file.rb +163 -188
- data/tests/test_servers.rb +12 -55
- data/tests/test_shutdown_hooks.rb +23 -0
- data/tests/test_smtpclient.rb +1 -29
- data/tests/test_smtpserver.rb +1 -29
- data/tests/test_spawn.rb +2 -31
- data/tests/test_ssl_args.rb +9 -10
- data/tests/test_ssl_methods.rb +1 -3
- data/tests/test_ssl_verify.rb +63 -63
- data/tests/test_threaded_resource.rb +53 -0
- data/tests/test_tick_loop.rb +59 -0
- data/tests/test_timers.rb +52 -91
- data/tests/test_ud.rb +1 -29
- data/tests/test_unbind_reason.rb +31 -0
- metadata +113 -70
- data/README +0 -82
- data/docs/DEFERRABLES +0 -133
- data/docs/LIGHTWEIGHT_CONCURRENCY +0 -70
- data/docs/SMTP +0 -2
- data/docs/SPAWNED_PROCESSES +0 -89
- data/ext/cplusplus.cpp +0 -202
- data/ext/emwin.cpp +0 -300
- data/ext/emwin.h +0 -94
- data/ext/epoll.cpp +0 -26
- data/ext/epoll.h +0 -25
- data/ext/eventmachine_cpp.h +0 -96
- data/ext/files.cpp +0 -94
- data/ext/files.h +0 -65
- data/ext/sigs.cpp +0 -89
- data/ext/sigs.h +0 -32
- data/java/src/com/rubyeventmachine/application/Application.java +0 -194
- data/java/src/com/rubyeventmachine/application/Connection.java +0 -74
- data/java/src/com/rubyeventmachine/application/ConnectionFactory.java +0 -37
- data/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +0 -46
- data/java/src/com/rubyeventmachine/application/PeriodicTimer.java +0 -38
- data/java/src/com/rubyeventmachine/application/Timer.java +0 -54
- data/java/src/com/rubyeventmachine/tests/ApplicationTest.java +0 -109
- data/java/src/com/rubyeventmachine/tests/ConnectTest.java +0 -148
- data/java/src/com/rubyeventmachine/tests/EMTest.java +0 -80
- data/java/src/com/rubyeventmachine/tests/TestDatagrams.java +0 -53
- data/java/src/com/rubyeventmachine/tests/TestServers.java +0 -75
- data/java/src/com/rubyeventmachine/tests/TestTimers.java +0 -90
- data/lib/evma/callback.rb +0 -32
- data/lib/evma/container.rb +0 -75
- data/lib/evma/factory.rb +0 -77
- data/lib/evma/protocol.rb +0 -87
- data/lib/evma/reactor.rb +0 -48
- data/lib/evma.rb +0 -32
- data/setup.rb +0 -1585
- data/tests/test_errors.rb +0 -82
- data/tests/testem.rb +0 -31
- data/web/whatis +0 -7
- /data/{docs/GNU → GNU} +0 -0
- /data/{docs/COPYING → LICENSE} +0 -0
- /data/docs/{ChangeLog → old/ChangeLog} +0 -0
- /data/docs/{EPOLL → old/EPOLL} +0 -0
- /data/docs/{INSTALL → old/INSTALL} +0 -0
- /data/docs/{LEGAL → old/LEGAL} +0 -0
- /data/docs/{PURE_RUBY → old/PURE_RUBY} +0 -0
- /data/docs/{RELEASE_NOTES → old/RELEASE_NOTES} +0 -0
- /data/docs/{TODO → old/TODO} +0 -0
- /data/examples/{ex_queue.rb → old/ex_queue.rb} +0 -0
- /data/examples/{helper.rb → old/helper.rb} +0 -0
data/ext/cmain.cpp
CHANGED
@@ -25,6 +25,7 @@ See the file COPYING for complete licensing information.
|
|
25
25
|
*/
|
26
26
|
#if defined(BUILD_FOR_RUBY) && defined(OS_WIN32)
|
27
27
|
#undef stat
|
28
|
+
#undef fstat
|
28
29
|
#endif
|
29
30
|
|
30
31
|
static EventMachine_t *EventMachine;
|
@@ -49,11 +50,8 @@ extern "C" void ensure_eventmachine (const char *caller = "unknown caller")
|
|
49
50
|
evma_initialize_library
|
50
51
|
***********************/
|
51
52
|
|
52
|
-
extern "C" void evma_initialize_library (
|
53
|
+
extern "C" void evma_initialize_library (EMCallback cb)
|
53
54
|
{
|
54
|
-
// Probably a bad idea to mess with the signal mask of a process
|
55
|
-
// we're just being linked into.
|
56
|
-
//InstallSignalHandlers();
|
57
55
|
if (EventMachine)
|
58
56
|
#ifdef BUILD_FOR_RUBY
|
59
57
|
rb_raise(rb_eRuntimeError, "eventmachine already initialized: evma_initialize_library");
|
@@ -148,6 +146,7 @@ extern "C" int evma_detach_fd (const unsigned long binding)
|
|
148
146
|
#else
|
149
147
|
throw std::runtime_error ("invalid binding to detach");
|
150
148
|
#endif
|
149
|
+
return -1;
|
151
150
|
}
|
152
151
|
|
153
152
|
/************************
|
@@ -166,6 +165,7 @@ extern "C" int evma_get_file_descriptor (const unsigned long binding)
|
|
166
165
|
#else
|
167
166
|
throw std::runtime_error ("invalid binding to get_fd");
|
168
167
|
#endif
|
168
|
+
return -1;
|
169
169
|
}
|
170
170
|
|
171
171
|
/***********************
|
@@ -340,7 +340,10 @@ evma_send_data_to_connection
|
|
340
340
|
extern "C" int evma_send_data_to_connection (const unsigned long binding, const char *data, int data_length)
|
341
341
|
{
|
342
342
|
ensure_eventmachine("evma_send_data_to_connection");
|
343
|
-
|
343
|
+
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (binding));
|
344
|
+
if (ed)
|
345
|
+
return ed->SendOutboundData(data, data_length);
|
346
|
+
return -1;
|
344
347
|
}
|
345
348
|
|
346
349
|
/******************
|
@@ -350,7 +353,10 @@ evma_send_datagram
|
|
350
353
|
extern "C" int evma_send_datagram (const unsigned long binding, const char *data, int data_length, const char *address, int port)
|
351
354
|
{
|
352
355
|
ensure_eventmachine("evma_send_datagram");
|
353
|
-
|
356
|
+
DatagramDescriptor *dd = dynamic_cast <DatagramDescriptor*> (Bindable_t::GetObject (binding));
|
357
|
+
if (dd)
|
358
|
+
return dd->SendOutboundDatagram(data, data_length, address, port);
|
359
|
+
return -1;
|
354
360
|
}
|
355
361
|
|
356
362
|
|
@@ -361,7 +367,9 @@ evma_close_connection
|
|
361
367
|
extern "C" void evma_close_connection (const unsigned long binding, int after_writing)
|
362
368
|
{
|
363
369
|
ensure_eventmachine("evma_close_connection");
|
364
|
-
|
370
|
+
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (binding));
|
371
|
+
if (ed)
|
372
|
+
ed->ScheduleClose (after_writing ? true : false);
|
365
373
|
}
|
366
374
|
|
367
375
|
/***********************************
|
@@ -371,7 +379,10 @@ evma_report_connection_error_status
|
|
371
379
|
extern "C" int evma_report_connection_error_status (const unsigned long binding)
|
372
380
|
{
|
373
381
|
ensure_eventmachine("evma_report_connection_error_status");
|
374
|
-
|
382
|
+
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (binding));
|
383
|
+
if (ed)
|
384
|
+
return ed->ReportErrorStatus();
|
385
|
+
return -1;
|
375
386
|
}
|
376
387
|
|
377
388
|
/********************
|
@@ -453,12 +464,12 @@ extern "C" void evma_accept_ssl_peer (const unsigned long binding)
|
|
453
464
|
evma_get_peername
|
454
465
|
*****************/
|
455
466
|
|
456
|
-
extern "C" int evma_get_peername (const unsigned long binding, struct sockaddr *sa)
|
467
|
+
extern "C" int evma_get_peername (const unsigned long binding, struct sockaddr *sa, socklen_t *len)
|
457
468
|
{
|
458
469
|
ensure_eventmachine("evma_get_peername");
|
459
470
|
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (binding));
|
460
471
|
if (ed) {
|
461
|
-
return ed->GetPeername (sa) ? 1 : 0;
|
472
|
+
return ed->GetPeername (sa, len) ? 1 : 0;
|
462
473
|
}
|
463
474
|
else
|
464
475
|
return 0;
|
@@ -468,12 +479,12 @@ extern "C" int evma_get_peername (const unsigned long binding, struct sockaddr *
|
|
468
479
|
evma_get_sockname
|
469
480
|
*****************/
|
470
481
|
|
471
|
-
extern "C" int evma_get_sockname (const unsigned long binding, struct sockaddr *sa)
|
482
|
+
extern "C" int evma_get_sockname (const unsigned long binding, struct sockaddr *sa, socklen_t *len)
|
472
483
|
{
|
473
484
|
ensure_eventmachine("evma_get_sockname");
|
474
485
|
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (binding));
|
475
486
|
if (ed) {
|
476
|
-
return ed->GetSockname (sa) ? 1 : 0;
|
487
|
+
return ed->GetSockname (sa, len) ? 1 : 0;
|
477
488
|
}
|
478
489
|
else
|
479
490
|
return 0;
|
@@ -539,17 +550,6 @@ extern "C" void evma_signal_loopbreak()
|
|
539
550
|
|
540
551
|
|
541
552
|
|
542
|
-
/****************
|
543
|
-
evma__write_file
|
544
|
-
****************/
|
545
|
-
|
546
|
-
extern "C" const unsigned long evma__write_file (const char *filename)
|
547
|
-
{
|
548
|
-
ensure_eventmachine("evma__write_file");
|
549
|
-
return EventMachine->_OpenFileForWriting (filename);
|
550
|
-
}
|
551
|
-
|
552
|
-
|
553
553
|
/********************************
|
554
554
|
evma_get_comm_inactivity_timeout
|
555
555
|
********************************/
|
@@ -559,7 +559,7 @@ extern "C" float evma_get_comm_inactivity_timeout (const unsigned long binding)
|
|
559
559
|
ensure_eventmachine("evma_get_comm_inactivity_timeout");
|
560
560
|
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (binding));
|
561
561
|
if (ed) {
|
562
|
-
return ed->GetCommInactivityTimeout();
|
562
|
+
return ((float)ed->GetCommInactivityTimeout() / 1000);
|
563
563
|
}
|
564
564
|
else
|
565
565
|
return 0.0; //Perhaps this should be an exception. Access to an unknown binding.
|
@@ -574,7 +574,7 @@ extern "C" int evma_set_comm_inactivity_timeout (const unsigned long binding, fl
|
|
574
574
|
ensure_eventmachine("evma_set_comm_inactivity_timeout");
|
575
575
|
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (binding));
|
576
576
|
if (ed) {
|
577
|
-
return ed->SetCommInactivityTimeout (value);
|
577
|
+
return ed->SetCommInactivityTimeout ((uint64_t)(value * 1000));
|
578
578
|
}
|
579
579
|
else
|
580
580
|
return 0; //Perhaps this should be an exception. Access to an unknown binding.
|
@@ -590,7 +590,7 @@ extern "C" float evma_get_pending_connect_timeout (const unsigned long binding)
|
|
590
590
|
ensure_eventmachine("evma_get_pending_connect_timeout");
|
591
591
|
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (binding));
|
592
592
|
if (ed) {
|
593
|
-
return ed->GetPendingConnectTimeout();
|
593
|
+
return ((float)ed->GetPendingConnectTimeout() / 1000);
|
594
594
|
}
|
595
595
|
else
|
596
596
|
return 0.0;
|
@@ -606,7 +606,7 @@ extern "C" int evma_set_pending_connect_timeout (const unsigned long binding, fl
|
|
606
606
|
ensure_eventmachine("evma_set_pending_connect_timeout");
|
607
607
|
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (binding));
|
608
608
|
if (ed) {
|
609
|
-
return ed->SetPendingConnectTimeout (value);
|
609
|
+
return ed->SetPendingConnectTimeout ((uint64_t)(value * 1000));
|
610
610
|
}
|
611
611
|
else
|
612
612
|
return 0;
|
@@ -783,12 +783,12 @@ extern "C" int evma_send_file_data_to_connection (const unsigned long binding, c
|
|
783
783
|
evma_start_proxy
|
784
784
|
*****************/
|
785
785
|
|
786
|
-
extern "C" void evma_start_proxy (const unsigned long from, const unsigned long to, const unsigned long bufsize)
|
786
|
+
extern "C" void evma_start_proxy (const unsigned long from, const unsigned long to, const unsigned long bufsize, const unsigned long length)
|
787
787
|
{
|
788
788
|
ensure_eventmachine("evma_start_proxy");
|
789
789
|
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (from));
|
790
790
|
if (ed)
|
791
|
-
ed->StartProxy(to, bufsize);
|
791
|
+
ed->StartProxy(to, bufsize, length);
|
792
792
|
}
|
793
793
|
|
794
794
|
|
@@ -825,3 +825,14 @@ extern "C" int evma_set_heartbeat_interval(float interval)
|
|
825
825
|
ensure_eventmachine("evma_set_heartbeat_interval");
|
826
826
|
return EventMachine->SetHeartbeatInterval(interval);
|
827
827
|
}
|
828
|
+
|
829
|
+
|
830
|
+
/**************************
|
831
|
+
evma_get_current_loop_time
|
832
|
+
***************************/
|
833
|
+
|
834
|
+
extern "C" uint64_t evma_get_current_loop_time()
|
835
|
+
{
|
836
|
+
ensure_eventmachine("evma_get_current_loop_time");
|
837
|
+
return EventMachine->GetCurrentLoopTime();
|
838
|
+
}
|