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.
Files changed (174) hide show
  1. data/.gitignore +7 -0
  2. data/.yardopts +7 -0
  3. data/Gemfile +3 -0
  4. data/README.md +109 -0
  5. data/Rakefile +14 -368
  6. data/docs/DocumentationGuidesIndex.md +27 -0
  7. data/docs/GettingStarted.md +521 -0
  8. data/docs/old/DEFERRABLES +246 -0
  9. data/docs/{KEYBOARD → old/KEYBOARD} +15 -11
  10. data/docs/old/LIGHTWEIGHT_CONCURRENCY +130 -0
  11. data/docs/old/SMTP +4 -0
  12. data/docs/old/SPAWNED_PROCESSES +148 -0
  13. data/eventmachine.gemspec +20 -26
  14. data/examples/guides/getting_started/01_eventmachine_echo_server.rb +18 -0
  15. data/examples/guides/getting_started/02_eventmachine_echo_server_that_recognizes_exit_command.rb +22 -0
  16. data/examples/guides/getting_started/03_simple_chat_server.rb +149 -0
  17. data/examples/guides/getting_started/04_simple_chat_server_step_one.rb +27 -0
  18. data/examples/guides/getting_started/05_simple_chat_server_step_two.rb +43 -0
  19. data/examples/guides/getting_started/06_simple_chat_server_step_three.rb +98 -0
  20. data/examples/guides/getting_started/07_simple_chat_server_step_four.rb +121 -0
  21. data/examples/guides/getting_started/08_simple_chat_server_step_five.rb +141 -0
  22. data/examples/{ex_channel.rb → old/ex_channel.rb} +3 -3
  23. data/examples/old/ex_tick_loop_array.rb +15 -0
  24. data/examples/old/ex_tick_loop_counter.rb +32 -0
  25. data/ext/binder.cpp +0 -1
  26. data/ext/cmain.cpp +40 -29
  27. data/ext/ed.cpp +189 -134
  28. data/ext/ed.h +34 -40
  29. data/ext/em.cpp +388 -340
  30. data/ext/em.h +29 -32
  31. data/ext/eventmachine.h +7 -6
  32. data/ext/extconf.rb +57 -48
  33. data/ext/fastfilereader/extconf.rb +5 -3
  34. data/ext/fastfilereader/mapper.cpp +1 -1
  35. data/ext/fastfilereader/rubymain.cpp +0 -1
  36. data/ext/kb.cpp +1 -3
  37. data/ext/pipe.cpp +9 -11
  38. data/ext/project.h +12 -8
  39. data/ext/rubymain.cpp +158 -112
  40. data/java/src/com/rubyeventmachine/EmReactor.java +3 -2
  41. data/lib/em/buftok.rb +35 -63
  42. data/lib/em/callback.rb +43 -11
  43. data/lib/em/channel.rb +22 -15
  44. data/lib/em/completion.rb +303 -0
  45. data/lib/em/connection.rb +341 -208
  46. data/lib/em/deferrable/pool.rb +2 -0
  47. data/lib/em/deferrable.rb +20 -2
  48. data/lib/em/file_watch.rb +37 -18
  49. data/lib/em/iterator.rb +270 -0
  50. data/lib/em/pool.rb +146 -0
  51. data/lib/em/process_watch.rb +5 -4
  52. data/lib/em/processes.rb +8 -4
  53. data/lib/em/protocols/httpclient.rb +27 -11
  54. data/lib/em/protocols/httpclient2.rb +15 -5
  55. data/lib/em/protocols/line_protocol.rb +29 -0
  56. data/lib/em/protocols/memcache.rb +17 -9
  57. data/lib/em/protocols/object_protocol.rb +2 -1
  58. data/lib/em/protocols/postgres3.rb +2 -1
  59. data/lib/em/protocols/smtpclient.rb +19 -11
  60. data/lib/em/protocols/smtpserver.rb +101 -8
  61. data/lib/em/protocols/stomp.rb +9 -7
  62. data/lib/em/protocols/tcptest.rb +3 -2
  63. data/lib/em/protocols.rb +1 -1
  64. data/lib/{pr_eventmachine.rb → em/pure_ruby.rb} +188 -205
  65. data/lib/em/queue.rb +23 -13
  66. data/lib/em/resolver.rb +192 -0
  67. data/lib/em/spawnable.rb +9 -10
  68. data/lib/em/streamer.rb +34 -46
  69. data/lib/em/threaded_resource.rb +90 -0
  70. data/lib/em/tick_loop.rb +85 -0
  71. data/lib/em/timers.rb +8 -3
  72. data/lib/em/version.rb +1 -1
  73. data/lib/eventmachine.rb +582 -686
  74. data/lib/jeventmachine.rb +25 -3
  75. data/tasks/package.rake +98 -0
  76. data/tasks/test.rake +8 -0
  77. data/tests/em_test_helper.rb +64 -0
  78. data/tests/test_attach.rb +56 -56
  79. data/tests/test_basic.rb +111 -168
  80. data/tests/test_channel.rb +5 -6
  81. data/tests/test_completion.rb +177 -0
  82. data/tests/test_connection_count.rb +1 -3
  83. data/tests/test_defer.rb +3 -32
  84. data/tests/test_deferrable.rb +35 -0
  85. data/tests/test_epoll.rb +27 -57
  86. data/tests/test_error_handler.rb +10 -7
  87. data/tests/test_exc.rb +6 -33
  88. data/tests/test_file_watch.rb +51 -35
  89. data/tests/test_futures.rb +10 -38
  90. data/tests/test_get_sock_opt.rb +27 -20
  91. data/tests/test_handler_check.rb +1 -3
  92. data/tests/test_hc.rb +49 -112
  93. data/tests/test_httpclient.rb +34 -62
  94. data/tests/test_httpclient2.rb +14 -39
  95. data/tests/test_inactivity_timeout.rb +44 -40
  96. data/tests/test_kb.rb +26 -52
  97. data/tests/test_ltp.rb +27 -71
  98. data/tests/test_ltp2.rb +1 -30
  99. data/tests/test_next_tick.rb +2 -31
  100. data/tests/test_object_protocol.rb +8 -9
  101. data/tests/test_pause.rb +45 -37
  102. data/tests/test_pending_connect_timeout.rb +42 -38
  103. data/tests/test_pool.rb +128 -0
  104. data/tests/test_process_watch.rb +37 -37
  105. data/tests/test_processes.rb +92 -110
  106. data/tests/test_proxy_connection.rb +137 -61
  107. data/tests/test_pure.rb +30 -67
  108. data/tests/test_queue.rb +10 -4
  109. data/tests/test_resolver.rb +55 -0
  110. data/tests/test_running.rb +1 -29
  111. data/tests/test_sasl.rb +8 -33
  112. data/tests/test_send_file.rb +163 -188
  113. data/tests/test_servers.rb +12 -55
  114. data/tests/test_shutdown_hooks.rb +23 -0
  115. data/tests/test_smtpclient.rb +1 -29
  116. data/tests/test_smtpserver.rb +1 -29
  117. data/tests/test_spawn.rb +2 -31
  118. data/tests/test_ssl_args.rb +9 -10
  119. data/tests/test_ssl_methods.rb +1 -3
  120. data/tests/test_ssl_verify.rb +63 -63
  121. data/tests/test_threaded_resource.rb +53 -0
  122. data/tests/test_tick_loop.rb +59 -0
  123. data/tests/test_timers.rb +52 -91
  124. data/tests/test_ud.rb +1 -29
  125. data/tests/test_unbind_reason.rb +31 -0
  126. metadata +113 -70
  127. data/README +0 -82
  128. data/docs/DEFERRABLES +0 -133
  129. data/docs/LIGHTWEIGHT_CONCURRENCY +0 -70
  130. data/docs/SMTP +0 -2
  131. data/docs/SPAWNED_PROCESSES +0 -89
  132. data/ext/cplusplus.cpp +0 -202
  133. data/ext/emwin.cpp +0 -300
  134. data/ext/emwin.h +0 -94
  135. data/ext/epoll.cpp +0 -26
  136. data/ext/epoll.h +0 -25
  137. data/ext/eventmachine_cpp.h +0 -96
  138. data/ext/files.cpp +0 -94
  139. data/ext/files.h +0 -65
  140. data/ext/sigs.cpp +0 -89
  141. data/ext/sigs.h +0 -32
  142. data/java/src/com/rubyeventmachine/application/Application.java +0 -194
  143. data/java/src/com/rubyeventmachine/application/Connection.java +0 -74
  144. data/java/src/com/rubyeventmachine/application/ConnectionFactory.java +0 -37
  145. data/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +0 -46
  146. data/java/src/com/rubyeventmachine/application/PeriodicTimer.java +0 -38
  147. data/java/src/com/rubyeventmachine/application/Timer.java +0 -54
  148. data/java/src/com/rubyeventmachine/tests/ApplicationTest.java +0 -109
  149. data/java/src/com/rubyeventmachine/tests/ConnectTest.java +0 -148
  150. data/java/src/com/rubyeventmachine/tests/EMTest.java +0 -80
  151. data/java/src/com/rubyeventmachine/tests/TestDatagrams.java +0 -53
  152. data/java/src/com/rubyeventmachine/tests/TestServers.java +0 -75
  153. data/java/src/com/rubyeventmachine/tests/TestTimers.java +0 -90
  154. data/lib/evma/callback.rb +0 -32
  155. data/lib/evma/container.rb +0 -75
  156. data/lib/evma/factory.rb +0 -77
  157. data/lib/evma/protocol.rb +0 -87
  158. data/lib/evma/reactor.rb +0 -48
  159. data/lib/evma.rb +0 -32
  160. data/setup.rb +0 -1585
  161. data/tests/test_errors.rb +0 -82
  162. data/tests/testem.rb +0 -31
  163. data/web/whatis +0 -7
  164. /data/{docs/GNU → GNU} +0 -0
  165. /data/{docs/COPYING → LICENSE} +0 -0
  166. /data/docs/{ChangeLog → old/ChangeLog} +0 -0
  167. /data/docs/{EPOLL → old/EPOLL} +0 -0
  168. /data/docs/{INSTALL → old/INSTALL} +0 -0
  169. /data/docs/{LEGAL → old/LEGAL} +0 -0
  170. /data/docs/{PURE_RUBY → old/PURE_RUBY} +0 -0
  171. /data/docs/{RELEASE_NOTES → old/RELEASE_NOTES} +0 -0
  172. /data/docs/{TODO → old/TODO} +0 -0
  173. /data/examples/{ex_queue.rb → old/ex_queue.rb} +0 -0
  174. /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 (void(*cb)(const unsigned long, int, const char*, const unsigned long))
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
- return ConnectionDescriptor::SendDataToConnection (binding, data, data_length);
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
- return DatagramDescriptor::SendDatagram (binding, data, data_length, address, port);
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
- ConnectionDescriptor::CloseConnection (binding, (after_writing ? true : false));
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
- return ConnectionDescriptor::ReportErrorStatus (binding);
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
+ }