sidekick-client 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +52 -0
  6. data/VERSION +1 -0
  7. data/lib/ext/README +1 -0
  8. data/lib/ext/bunny-0.6.0/LICENSE +20 -0
  9. data/lib/ext/bunny-0.6.0/README.rdoc +66 -0
  10. data/lib/ext/bunny-0.6.0/Rakefile +24 -0
  11. data/lib/ext/bunny-0.6.0/bunny.gemspec +65 -0
  12. data/lib/ext/bunny-0.6.0/examples/simple_08.rb +30 -0
  13. data/lib/ext/bunny-0.6.0/examples/simple_09.rb +30 -0
  14. data/lib/ext/bunny-0.6.0/examples/simple_ack_08.rb +33 -0
  15. data/lib/ext/bunny-0.6.0/examples/simple_ack_09.rb +33 -0
  16. data/lib/ext/bunny-0.6.0/examples/simple_consumer_08.rb +53 -0
  17. data/lib/ext/bunny-0.6.0/examples/simple_consumer_09.rb +53 -0
  18. data/lib/ext/bunny-0.6.0/examples/simple_fanout_08.rb +39 -0
  19. data/lib/ext/bunny-0.6.0/examples/simple_fanout_09.rb +39 -0
  20. data/lib/ext/bunny-0.6.0/examples/simple_headers_08.rb +40 -0
  21. data/lib/ext/bunny-0.6.0/examples/simple_headers_09.rb +40 -0
  22. data/lib/ext/bunny-0.6.0/examples/simple_publisher_08.rb +27 -0
  23. data/lib/ext/bunny-0.6.0/examples/simple_publisher_09.rb +27 -0
  24. data/lib/ext/bunny-0.6.0/examples/simple_topic_08.rb +59 -0
  25. data/lib/ext/bunny-0.6.0/examples/simple_topic_09.rb +59 -0
  26. data/lib/ext/bunny-0.6.0/lib/bunny/channel08.rb +39 -0
  27. data/lib/ext/bunny-0.6.0/lib/bunny/channel09.rb +39 -0
  28. data/lib/ext/bunny-0.6.0/lib/bunny/client08.rb +494 -0
  29. data/lib/ext/bunny-0.6.0/lib/bunny/client09.rb +460 -0
  30. data/lib/ext/bunny-0.6.0/lib/bunny/exchange08.rb +175 -0
  31. data/lib/ext/bunny-0.6.0/lib/bunny/exchange09.rb +177 -0
  32. data/lib/ext/bunny-0.6.0/lib/bunny/queue08.rb +389 -0
  33. data/lib/ext/bunny-0.6.0/lib/bunny/queue09.rb +395 -0
  34. data/lib/ext/bunny-0.6.0/lib/bunny/subscription08.rb +85 -0
  35. data/lib/ext/bunny-0.6.0/lib/bunny/subscription09.rb +85 -0
  36. data/lib/ext/bunny-0.6.0/lib/bunny.rb +87 -0
  37. data/lib/ext/bunny-0.6.0/lib/qrack/channel.rb +18 -0
  38. data/lib/ext/bunny-0.6.0/lib/qrack/client.rb +204 -0
  39. data/lib/ext/bunny-0.6.0/lib/qrack/protocol/protocol08.rb +132 -0
  40. data/lib/ext/bunny-0.6.0/lib/qrack/protocol/protocol09.rb +133 -0
  41. data/lib/ext/bunny-0.6.0/lib/qrack/protocol/spec08.rb +823 -0
  42. data/lib/ext/bunny-0.6.0/lib/qrack/protocol/spec09.rb +521 -0
  43. data/lib/ext/bunny-0.6.0/lib/qrack/qrack08.rb +23 -0
  44. data/lib/ext/bunny-0.6.0/lib/qrack/qrack09.rb +23 -0
  45. data/lib/ext/bunny-0.6.0/lib/qrack/queue.rb +53 -0
  46. data/lib/ext/bunny-0.6.0/lib/qrack/subscription.rb +102 -0
  47. data/lib/ext/bunny-0.6.0/lib/qrack/transport/buffer08.rb +276 -0
  48. data/lib/ext/bunny-0.6.0/lib/qrack/transport/buffer09.rb +276 -0
  49. data/lib/ext/bunny-0.6.0/lib/qrack/transport/frame08.rb +112 -0
  50. data/lib/ext/bunny-0.6.0/lib/qrack/transport/frame09.rb +94 -0
  51. data/lib/ext/bunny-0.6.0/spec/spec_08/bunny_spec.rb +65 -0
  52. data/lib/ext/bunny-0.6.0/spec/spec_08/connection_spec.rb +12 -0
  53. data/lib/ext/bunny-0.6.0/spec/spec_08/exchange_spec.rb +162 -0
  54. data/lib/ext/bunny-0.6.0/spec/spec_08/queue_spec.rb +206 -0
  55. data/lib/ext/bunny-0.6.0/spec/spec_09/bunny_spec.rb +65 -0
  56. data/lib/ext/bunny-0.6.0/spec/spec_09/connection_spec.rb +12 -0
  57. data/lib/ext/bunny-0.6.0/spec/spec_09/exchange_spec.rb +162 -0
  58. data/lib/ext/bunny-0.6.0/spec/spec_09/queue_spec.rb +205 -0
  59. data/lib/ext/eventmachine-0.12.10/.gitignore +14 -0
  60. data/lib/ext/eventmachine-0.12.10/README +82 -0
  61. data/lib/ext/eventmachine-0.12.10/Rakefile +374 -0
  62. data/lib/ext/eventmachine-0.12.10/docs/COPYING +60 -0
  63. data/lib/ext/eventmachine-0.12.10/docs/ChangeLog +211 -0
  64. data/lib/ext/eventmachine-0.12.10/docs/DEFERRABLES +133 -0
  65. data/lib/ext/eventmachine-0.12.10/docs/EPOLL +141 -0
  66. data/lib/ext/eventmachine-0.12.10/docs/GNU +281 -0
  67. data/lib/ext/eventmachine-0.12.10/docs/INSTALL +13 -0
  68. data/lib/ext/eventmachine-0.12.10/docs/KEYBOARD +38 -0
  69. data/lib/ext/eventmachine-0.12.10/docs/LEGAL +25 -0
  70. data/lib/ext/eventmachine-0.12.10/docs/LIGHTWEIGHT_CONCURRENCY +70 -0
  71. data/lib/ext/eventmachine-0.12.10/docs/PURE_RUBY +75 -0
  72. data/lib/ext/eventmachine-0.12.10/docs/RELEASE_NOTES +94 -0
  73. data/lib/ext/eventmachine-0.12.10/docs/SMTP +2 -0
  74. data/lib/ext/eventmachine-0.12.10/docs/SPAWNED_PROCESSES +89 -0
  75. data/lib/ext/eventmachine-0.12.10/docs/TODO +8 -0
  76. data/lib/ext/eventmachine-0.12.10/eventmachine.gemspec +40 -0
  77. data/lib/ext/eventmachine-0.12.10/examples/ex_channel.rb +43 -0
  78. data/lib/ext/eventmachine-0.12.10/examples/ex_queue.rb +2 -0
  79. data/lib/ext/eventmachine-0.12.10/examples/helper.rb +2 -0
  80. data/lib/ext/eventmachine-0.12.10/ext/binder.cpp +125 -0
  81. data/lib/ext/eventmachine-0.12.10/ext/binder.h +46 -0
  82. data/lib/ext/eventmachine-0.12.10/ext/cmain.cpp +827 -0
  83. data/lib/ext/eventmachine-0.12.10/ext/cplusplus.cpp +202 -0
  84. data/lib/ext/eventmachine-0.12.10/ext/ed.cpp +1893 -0
  85. data/lib/ext/eventmachine-0.12.10/ext/ed.h +424 -0
  86. data/lib/ext/eventmachine-0.12.10/ext/em.cpp +2282 -0
  87. data/lib/ext/eventmachine-0.12.10/ext/em.h +232 -0
  88. data/lib/ext/eventmachine-0.12.10/ext/emwin.cpp +300 -0
  89. data/lib/ext/eventmachine-0.12.10/ext/emwin.h +94 -0
  90. data/lib/ext/eventmachine-0.12.10/ext/epoll.cpp +26 -0
  91. data/lib/ext/eventmachine-0.12.10/ext/epoll.h +25 -0
  92. data/lib/ext/eventmachine-0.12.10/ext/eventmachine.h +122 -0
  93. data/lib/ext/eventmachine-0.12.10/ext/eventmachine_cpp.h +96 -0
  94. data/lib/ext/eventmachine-0.12.10/ext/extconf.rb +148 -0
  95. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/extconf.rb +83 -0
  96. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/mapper.cpp +214 -0
  97. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/mapper.h +59 -0
  98. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/rubymain.cpp +127 -0
  99. data/lib/ext/eventmachine-0.12.10/ext/files.cpp +94 -0
  100. data/lib/ext/eventmachine-0.12.10/ext/files.h +65 -0
  101. data/lib/ext/eventmachine-0.12.10/ext/kb.cpp +81 -0
  102. data/lib/ext/eventmachine-0.12.10/ext/page.cpp +107 -0
  103. data/lib/ext/eventmachine-0.12.10/ext/page.h +51 -0
  104. data/lib/ext/eventmachine-0.12.10/ext/pipe.cpp +349 -0
  105. data/lib/ext/eventmachine-0.12.10/ext/project.h +151 -0
  106. data/lib/ext/eventmachine-0.12.10/ext/rubymain.cpp +1166 -0
  107. data/lib/ext/eventmachine-0.12.10/ext/sigs.cpp +89 -0
  108. data/lib/ext/eventmachine-0.12.10/ext/sigs.h +32 -0
  109. data/lib/ext/eventmachine-0.12.10/ext/ssl.cpp +460 -0
  110. data/lib/ext/eventmachine-0.12.10/ext/ssl.h +94 -0
  111. data/lib/ext/eventmachine-0.12.10/java/.classpath +8 -0
  112. data/lib/ext/eventmachine-0.12.10/java/.project +17 -0
  113. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EmReactor.java +570 -0
  114. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EmReactorException.java +40 -0
  115. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableChannel.java +69 -0
  116. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableDatagramChannel.java +189 -0
  117. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableSocketChannel.java +364 -0
  118. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Application.java +194 -0
  119. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Connection.java +74 -0
  120. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/ConnectionFactory.java +37 -0
  121. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +46 -0
  122. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/PeriodicTimer.java +38 -0
  123. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Timer.java +54 -0
  124. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/ApplicationTest.java +109 -0
  125. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/ConnectTest.java +148 -0
  126. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/EMTest.java +80 -0
  127. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestDatagrams.java +53 -0
  128. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestServers.java +75 -0
  129. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestTimers.java +90 -0
  130. data/lib/ext/eventmachine-0.12.10/lib/em/buftok.rb +138 -0
  131. data/lib/ext/eventmachine-0.12.10/lib/em/callback.rb +26 -0
  132. data/lib/ext/eventmachine-0.12.10/lib/em/channel.rb +57 -0
  133. data/lib/ext/eventmachine-0.12.10/lib/em/connection.rb +564 -0
  134. data/lib/ext/eventmachine-0.12.10/lib/em/deferrable.rb +192 -0
  135. data/lib/ext/eventmachine-0.12.10/lib/em/file_watch.rb +54 -0
  136. data/lib/ext/eventmachine-0.12.10/lib/em/future.rb +61 -0
  137. data/lib/ext/eventmachine-0.12.10/lib/em/messages.rb +66 -0
  138. data/lib/ext/eventmachine-0.12.10/lib/em/process_watch.rb +44 -0
  139. data/lib/ext/eventmachine-0.12.10/lib/em/processes.rb +119 -0
  140. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/header_and_content.rb +138 -0
  141. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/httpclient.rb +263 -0
  142. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/httpclient2.rb +590 -0
  143. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/line_and_text.rb +125 -0
  144. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/linetext2.rb +161 -0
  145. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/memcache.rb +323 -0
  146. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/object_protocol.rb +45 -0
  147. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/postgres3.rb +247 -0
  148. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/saslauth.rb +175 -0
  149. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/smtpclient.rb +357 -0
  150. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/smtpserver.rb +547 -0
  151. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/socks4.rb +66 -0
  152. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/stomp.rb +200 -0
  153. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/tcptest.rb +53 -0
  154. data/lib/ext/eventmachine-0.12.10/lib/em/protocols.rb +36 -0
  155. data/lib/ext/eventmachine-0.12.10/lib/em/queue.rb +61 -0
  156. data/lib/ext/eventmachine-0.12.10/lib/em/spawnable.rb +85 -0
  157. data/lib/ext/eventmachine-0.12.10/lib/em/streamer.rb +130 -0
  158. data/lib/ext/eventmachine-0.12.10/lib/em/timers.rb +56 -0
  159. data/lib/ext/eventmachine-0.12.10/lib/em/version.rb +3 -0
  160. data/lib/ext/eventmachine-0.12.10/lib/eventmachine.rb +1592 -0
  161. data/lib/ext/eventmachine-0.12.10/lib/evma/callback.rb +32 -0
  162. data/lib/ext/eventmachine-0.12.10/lib/evma/container.rb +75 -0
  163. data/lib/ext/eventmachine-0.12.10/lib/evma/factory.rb +77 -0
  164. data/lib/ext/eventmachine-0.12.10/lib/evma/protocol.rb +87 -0
  165. data/lib/ext/eventmachine-0.12.10/lib/evma/reactor.rb +48 -0
  166. data/lib/ext/eventmachine-0.12.10/lib/evma.rb +32 -0
  167. data/lib/ext/eventmachine-0.12.10/lib/jeventmachine.rb +257 -0
  168. data/lib/ext/eventmachine-0.12.10/lib/pr_eventmachine.rb +1022 -0
  169. data/lib/ext/eventmachine-0.12.10/setup.rb +1585 -0
  170. data/lib/ext/eventmachine-0.12.10/tasks/cpp.rake_example +77 -0
  171. data/lib/ext/eventmachine-0.12.10/tests/client.crt +31 -0
  172. data/lib/ext/eventmachine-0.12.10/tests/client.key +51 -0
  173. data/lib/ext/eventmachine-0.12.10/tests/test_attach.rb +126 -0
  174. data/lib/ext/eventmachine-0.12.10/tests/test_basic.rb +284 -0
  175. data/lib/ext/eventmachine-0.12.10/tests/test_channel.rb +63 -0
  176. data/lib/ext/eventmachine-0.12.10/tests/test_connection_count.rb +35 -0
  177. data/lib/ext/eventmachine-0.12.10/tests/test_defer.rb +47 -0
  178. data/lib/ext/eventmachine-0.12.10/tests/test_epoll.rb +160 -0
  179. data/lib/ext/eventmachine-0.12.10/tests/test_error_handler.rb +35 -0
  180. data/lib/ext/eventmachine-0.12.10/tests/test_errors.rb +82 -0
  181. data/lib/ext/eventmachine-0.12.10/tests/test_exc.rb +55 -0
  182. data/lib/ext/eventmachine-0.12.10/tests/test_file_watch.rb +49 -0
  183. data/lib/ext/eventmachine-0.12.10/tests/test_futures.rb +198 -0
  184. data/lib/ext/eventmachine-0.12.10/tests/test_get_sock_opt.rb +30 -0
  185. data/lib/ext/eventmachine-0.12.10/tests/test_handler_check.rb +37 -0
  186. data/lib/ext/eventmachine-0.12.10/tests/test_hc.rb +218 -0
  187. data/lib/ext/eventmachine-0.12.10/tests/test_httpclient.rb +218 -0
  188. data/lib/ext/eventmachine-0.12.10/tests/test_httpclient2.rb +153 -0
  189. data/lib/ext/eventmachine-0.12.10/tests/test_inactivity_timeout.rb +50 -0
  190. data/lib/ext/eventmachine-0.12.10/tests/test_kb.rb +60 -0
  191. data/lib/ext/eventmachine-0.12.10/tests/test_ltp.rb +182 -0
  192. data/lib/ext/eventmachine-0.12.10/tests/test_ltp2.rb +317 -0
  193. data/lib/ext/eventmachine-0.12.10/tests/test_next_tick.rb +133 -0
  194. data/lib/ext/eventmachine-0.12.10/tests/test_object_protocol.rb +37 -0
  195. data/lib/ext/eventmachine-0.12.10/tests/test_pause.rb +70 -0
  196. data/lib/ext/eventmachine-0.12.10/tests/test_pending_connect_timeout.rb +48 -0
  197. data/lib/ext/eventmachine-0.12.10/tests/test_process_watch.rb +48 -0
  198. data/lib/ext/eventmachine-0.12.10/tests/test_processes.rb +128 -0
  199. data/lib/ext/eventmachine-0.12.10/tests/test_proxy_connection.rb +92 -0
  200. data/lib/ext/eventmachine-0.12.10/tests/test_pure.rb +125 -0
  201. data/lib/ext/eventmachine-0.12.10/tests/test_queue.rb +44 -0
  202. data/lib/ext/eventmachine-0.12.10/tests/test_running.rb +42 -0
  203. data/lib/ext/eventmachine-0.12.10/tests/test_sasl.rb +72 -0
  204. data/lib/ext/eventmachine-0.12.10/tests/test_send_file.rb +242 -0
  205. data/lib/ext/eventmachine-0.12.10/tests/test_servers.rb +76 -0
  206. data/lib/ext/eventmachine-0.12.10/tests/test_smtpclient.rb +83 -0
  207. data/lib/ext/eventmachine-0.12.10/tests/test_smtpserver.rb +85 -0
  208. data/lib/ext/eventmachine-0.12.10/tests/test_spawn.rb +322 -0
  209. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_args.rb +79 -0
  210. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_methods.rb +50 -0
  211. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_verify.rb +82 -0
  212. data/lib/ext/eventmachine-0.12.10/tests/test_timers.rb +162 -0
  213. data/lib/ext/eventmachine-0.12.10/tests/test_ud.rb +36 -0
  214. data/lib/ext/eventmachine-0.12.10/tests/testem.rb +31 -0
  215. data/lib/ext/eventmachine-0.12.10/web/whatis +7 -0
  216. data/lib/ext/misc/README +1 -0
  217. data/lib/ext/misc/indifferent_access.rb +131 -0
  218. data/lib/ext/uuidtools-2.1.1/CHANGELOG +56 -0
  219. data/lib/ext/uuidtools-2.1.1/LICENSE +20 -0
  220. data/lib/ext/uuidtools-2.1.1/README +13 -0
  221. data/lib/ext/uuidtools-2.1.1/Rakefile +48 -0
  222. data/lib/ext/uuidtools-2.1.1/lib/compat/securerandom.rb +202 -0
  223. data/lib/ext/uuidtools-2.1.1/lib/uuidtools/version.rb +35 -0
  224. data/lib/ext/uuidtools-2.1.1/lib/uuidtools.rb +618 -0
  225. data/lib/ext/uuidtools-2.1.1/spec/spec.opts +1 -0
  226. data/lib/ext/uuidtools-2.1.1/spec/spec_helper.rb +7 -0
  227. data/lib/ext/uuidtools-2.1.1/spec/uuidtools/mac_address_spec.rb +15 -0
  228. data/lib/ext/uuidtools-2.1.1/spec/uuidtools/utility_spec.rb +21 -0
  229. data/lib/ext/uuidtools-2.1.1/spec/uuidtools/uuid_creation_spec.rb +121 -0
  230. data/lib/ext/uuidtools-2.1.1/spec/uuidtools/uuid_parsing_spec.rb +127 -0
  231. data/lib/ext/uuidtools-2.1.1/tasks/benchmark.rake +38 -0
  232. data/lib/ext/uuidtools-2.1.1/tasks/clobber.rake +2 -0
  233. data/lib/ext/uuidtools-2.1.1/tasks/gem.rake +68 -0
  234. data/lib/ext/uuidtools-2.1.1/tasks/git.rake +40 -0
  235. data/lib/ext/uuidtools-2.1.1/tasks/metrics.rake +22 -0
  236. data/lib/ext/uuidtools-2.1.1/tasks/rdoc.rake +29 -0
  237. data/lib/ext/uuidtools-2.1.1/tasks/rubyforge.rake +89 -0
  238. data/lib/ext/uuidtools-2.1.1/tasks/spec.rake +64 -0
  239. data/lib/ext/uuidtools-2.1.1/website/index.html +95 -0
  240. data/lib/sidekick/client/sidekick_client.rb +46 -0
  241. data/lib/sidekick/shared/sidekick_logger.rb +14 -0
  242. data/lib/sidekick/shared/sidekick_queue_publisher.rb +91 -0
  243. data/lib/sidekick-client.rb +7 -0
  244. data/sidekick-client.gemspec +289 -0
  245. data/test/helper.rb +10 -0
  246. data/test/test_sidekick-client.rb +7 -0
  247. metadata +311 -0
@@ -0,0 +1,232 @@
1
+ /*****************************************************************************
2
+
3
+ $Id$
4
+
5
+ File: em.h
6
+ Date: 06Apr06
7
+
8
+ Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
+ Gmail: blackhedd
10
+
11
+ This program is free software; you can redistribute it and/or modify
12
+ it under the terms of either: 1) the GNU General Public License
13
+ as published by the Free Software Foundation; either version 2 of the
14
+ License, or (at your option) any later version; or 2) Ruby's License.
15
+
16
+ See the file COPYING for complete licensing information.
17
+
18
+ *****************************************************************************/
19
+
20
+
21
+
22
+ #ifdef OS_WIN32
23
+ #include "emwin.h"
24
+ #endif
25
+
26
+
27
+ // THIS ENTIRE FILE WILL EVENTUALLY BE FOR UNIX BUILDS ONLY.
28
+ //#ifdef OS_UNIX
29
+
30
+ #ifndef __EventMachine__H_
31
+ #define __EventMachine__H_
32
+
33
+ #ifdef BUILD_FOR_RUBY
34
+ #include <ruby.h>
35
+ #define EmSelect rb_thread_select
36
+
37
+ #if defined(HAVE_RBTRAP)
38
+ #include <rubysig.h>
39
+ #elif defined(HAVE_RB_THREAD_CHECK_INTS)
40
+ extern "C" {
41
+ void rb_enable_interrupt(void);
42
+ void rb_disable_interrupt(void);
43
+ }
44
+
45
+ #define TRAP_BEG rb_enable_interrupt()
46
+ #define TRAP_END do { rb_disable_interrupt(); rb_thread_check_ints(); } while(0)
47
+ #else
48
+ #define TRAP_BEG
49
+ #define TRAP_END
50
+ #endif
51
+
52
+ // 1.9.0 compat
53
+ #ifndef RUBY_UBF_IO
54
+ #define RUBY_UBF_IO RB_UBF_DFL
55
+ #endif
56
+ #else
57
+ #define EmSelect select
58
+ #endif
59
+
60
+
61
+ #ifdef OS_UNIX
62
+ typedef long long Int64;
63
+ #endif
64
+ #ifdef OS_WIN32
65
+ typedef __int64 Int64;
66
+ #endif
67
+
68
+ extern Int64 gCurrentLoopTime;
69
+
70
+ class EventableDescriptor;
71
+ class InotifyDescriptor;
72
+
73
+
74
+ /********************
75
+ class EventMachine_t
76
+ ********************/
77
+
78
+ class EventMachine_t
79
+ {
80
+ public:
81
+ static int GetMaxTimerCount();
82
+ static void SetMaxTimerCount (int);
83
+
84
+ public:
85
+ EventMachine_t (void(*event_callback)(const unsigned long, int, const char*, const unsigned long));
86
+ virtual ~EventMachine_t();
87
+
88
+ void Run();
89
+ void ScheduleHalt();
90
+ void SignalLoopBreaker();
91
+ const unsigned long InstallOneshotTimer (int);
92
+ const unsigned long ConnectToServer (const char *, int, const char *, int);
93
+ const unsigned long ConnectToUnixServer (const char *);
94
+
95
+ const unsigned long CreateTcpServer (const char *, int);
96
+ const unsigned long OpenDatagramSocket (const char *, int);
97
+ const unsigned long CreateUnixDomainServer (const char*);
98
+ const unsigned long _OpenFileForWriting (const char*);
99
+ const unsigned long OpenKeyboard();
100
+ //const char *Popen (const char*, const char*);
101
+ const unsigned long Socketpair (char* const*);
102
+
103
+ void Add (EventableDescriptor*);
104
+ void Modify (EventableDescriptor*);
105
+
106
+ const unsigned long AttachFD (int, bool);
107
+ int DetachFD (EventableDescriptor*);
108
+
109
+ void ArmKqueueWriter (EventableDescriptor*);
110
+ void ArmKqueueReader (EventableDescriptor*);
111
+
112
+ void SetTimerQuantum (int);
113
+ static void SetuidString (const char*);
114
+ static int SetRlimitNofile (int);
115
+
116
+ pid_t SubprocessPid;
117
+ int SubprocessExitStatus;
118
+
119
+ int GetConnectionCount();
120
+ float GetHeartbeatInterval();
121
+ int SetHeartbeatInterval(float);
122
+
123
+ const unsigned long WatchFile (const char*);
124
+ void UnwatchFile (int);
125
+ void UnwatchFile (const unsigned long);
126
+
127
+ #ifdef HAVE_KQUEUE
128
+ void _HandleKqueueFileEvent (struct kevent*);
129
+ void _RegisterKqueueFileEvent(int);
130
+ #endif
131
+
132
+ const unsigned long WatchPid (int);
133
+ void UnwatchPid (int);
134
+ void UnwatchPid (const unsigned long);
135
+
136
+ #ifdef HAVE_KQUEUE
137
+ void _HandleKqueuePidEvent (struct kevent*);
138
+ #endif
139
+
140
+ // Temporary:
141
+ void _UseEpoll();
142
+ void _UseKqueue();
143
+
144
+ bool UsingKqueue() { return bKqueue; }
145
+ bool UsingEpoll() { return bEpoll; }
146
+
147
+ private:
148
+ bool _RunOnce();
149
+ bool _RunTimers();
150
+ void _UpdateTime();
151
+ void _AddNewDescriptors();
152
+ void _ModifyDescriptors();
153
+ void _InitializeLoopBreaker();
154
+
155
+ bool _RunSelectOnce();
156
+ bool _RunEpollOnce();
157
+ bool _RunKqueueOnce();
158
+
159
+ void _ModifyEpollEvent (EventableDescriptor*);
160
+
161
+ public:
162
+ void _ReadLoopBreaker();
163
+ void _ReadInotifyEvents();
164
+
165
+ private:
166
+ enum {
167
+ MaxEpollDescriptors = 64*1024,
168
+ MaxEvents = 4096
169
+ };
170
+ int HeartbeatInterval;
171
+ void (*EventCallback)(const unsigned long, int, const char*, const unsigned long);
172
+
173
+ class Timer_t: public Bindable_t {
174
+ };
175
+
176
+ multimap<Int64, Timer_t> Timers;
177
+ map<int, Bindable_t*> Files;
178
+ map<int, Bindable_t*> Pids;
179
+ vector<EventableDescriptor*> Descriptors;
180
+ vector<EventableDescriptor*> NewDescriptors;
181
+ set<EventableDescriptor*> ModifiedDescriptors;
182
+
183
+ Int64 NextHeartbeatTime;
184
+
185
+ int LoopBreakerReader;
186
+ int LoopBreakerWriter;
187
+ #ifdef OS_WIN32
188
+ struct sockaddr_in LoopBreakerTarget;
189
+ #endif
190
+
191
+ timeval Quantum;
192
+
193
+ private:
194
+ bool bEpoll;
195
+ int epfd; // Epoll file-descriptor
196
+ #ifdef HAVE_EPOLL
197
+ struct epoll_event epoll_events [MaxEvents];
198
+ #endif
199
+
200
+ bool bKqueue;
201
+ int kqfd; // Kqueue file-descriptor
202
+ #ifdef HAVE_KQUEUE
203
+ struct kevent Karray [MaxEvents];
204
+ #endif
205
+
206
+ InotifyDescriptor *inotify; // pollable descriptor for our inotify instance
207
+ };
208
+
209
+
210
+ /*******************
211
+ struct SelectData_t
212
+ *******************/
213
+
214
+ struct SelectData_t
215
+ {
216
+ SelectData_t();
217
+
218
+ int _Select();
219
+
220
+ int maxsocket;
221
+ fd_set fdreads;
222
+ fd_set fdwrites;
223
+ fd_set fderrors;
224
+ timeval tv;
225
+ int nSockets;
226
+ };
227
+
228
+
229
+
230
+ #endif // __EventMachine__H_
231
+
232
+ //#endif // OS_UNIX
@@ -0,0 +1,300 @@
1
+ /*****************************************************************************
2
+
3
+ $Id$
4
+
5
+ File: emwin.cpp
6
+ Date: 05May06
7
+
8
+ Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
+ Gmail: blackhedd
10
+
11
+ This program is free software; you can redistribute it and/or modify
12
+ it under the terms of either: 1) the GNU General Public License
13
+ as published by the Free Software Foundation; either version 2 of the
14
+ License, or (at your option) any later version; or 2) Ruby's License.
15
+
16
+ See the file COPYING for complete licensing information.
17
+
18
+ *****************************************************************************/
19
+
20
+
21
+ // THIS ENTIRE FILE IS FOR WINDOWS BUILDS ONLY
22
+ // INCOMPLETE AND DISABLED FOR NOW.
23
+ #ifdef xOS_WIN32
24
+
25
+ #include "project.h"
26
+
27
+
28
+ // Keep a global variable floating around
29
+ // with the current loop time as set by the Event Machine.
30
+ // This avoids the need for frequent expensive calls to time(NULL);
31
+ time_t gCurrentLoopTime;
32
+
33
+
34
+ /******************************
35
+ EventMachine_t::EventMachine_t
36
+ ******************************/
37
+
38
+ EventMachine_t::EventMachine_t (void (*event_callback)(const char*, int, const char*, int)):
39
+ EventCallback (event_callback),
40
+ NextHeartbeatTime (0)
41
+ {
42
+ gTerminateSignalReceived = false;
43
+ Iocp = NULL;
44
+ }
45
+
46
+
47
+ /*******************************
48
+ EventMachine_t::~EventMachine_t
49
+ *******************************/
50
+
51
+ EventMachine_t::~EventMachine_t()
52
+ {
53
+ cerr << "EM __dt\n";
54
+ if (Iocp)
55
+ CloseHandle (Iocp);
56
+ }
57
+
58
+
59
+ /****************************
60
+ EventMachine_t::ScheduleHalt
61
+ ****************************/
62
+
63
+ void EventMachine_t::ScheduleHalt()
64
+ {
65
+ /* This is how we stop the machine.
66
+ * This can be called by clients. Signal handlers will probably
67
+ * set the global flag.
68
+ * For now this means there can only be one EventMachine ever running at a time.
69
+ */
70
+ gTerminateSignalReceived = true;
71
+ }
72
+
73
+
74
+
75
+ /*******************
76
+ EventMachine_t::Run
77
+ *******************/
78
+
79
+ void EventMachine_t::Run()
80
+ {
81
+ HookControlC (true);
82
+
83
+ Iocp = CreateIoCompletionPort (INVALID_HANDLE_VALUE, NULL, 0, 0);
84
+ if (Iocp == NULL)
85
+ throw std::runtime_error ("no completion port");
86
+
87
+
88
+ DWORD nBytes, nCompletionKey;
89
+ LPOVERLAPPED Overlapped;
90
+
91
+ do {
92
+ gCurrentLoopTime = time(NULL);
93
+ // Have some kind of strategy that will dequeue maybe up to 10 completions
94
+ // without running the timers as long as they are available immediately.
95
+ // Otherwise in a busy server we're calling them every time through the loop.
96
+ if (!_RunTimers())
97
+ break;
98
+ if (GetQueuedCompletionStatus (Iocp, &nBytes, &nCompletionKey, &Overlapped, 1000)) {
99
+ }
100
+ cerr << "+";
101
+ } while (!gTerminateSignalReceived);
102
+
103
+
104
+ /*
105
+ while (true) {
106
+ gCurrentLoopTime = time(NULL);
107
+ if (!_RunTimers())
108
+ break;
109
+ _AddNewDescriptors();
110
+ if (!_RunOnce())
111
+ break;
112
+ if (gTerminateSignalReceived)
113
+ break;
114
+ }
115
+ */
116
+
117
+ HookControlC (false);
118
+ }
119
+
120
+
121
+ /**************************
122
+ EventMachine_t::_RunTimers
123
+ **************************/
124
+
125
+ bool EventMachine_t::_RunTimers()
126
+ {
127
+ // These are caller-defined timer handlers.
128
+ // Return T/F to indicate whether we should continue the main loop.
129
+ // We rely on the fact that multimaps sort by their keys to avoid
130
+ // inspecting the whole list every time we come here.
131
+ // Just keep inspecting and processing the list head until we hit
132
+ // one that hasn't expired yet.
133
+
134
+ while (true) {
135
+ multimap<time_t,Timer_t>::iterator i = Timers.begin();
136
+ if (i == Timers.end())
137
+ break;
138
+ if (i->first > gCurrentLoopTime)
139
+ break;
140
+ if (EventCallback)
141
+ (*EventCallback) (NULL, EM_TIMER_FIRED, NULL, i->second.GetBinding());
142
+ Timers.erase (i);
143
+ }
144
+ return true;
145
+ }
146
+
147
+
148
+ /***********************************
149
+ EventMachine_t::InstallOneshotTimer
150
+ ***********************************/
151
+
152
+ const char *EventMachine_t::InstallOneshotTimer (int seconds)
153
+ {
154
+ if (Timers.size() > MaxOutstandingTimers)
155
+ return false;
156
+ // Don't use the global loop-time variable here, because we might
157
+ // get called before the main event machine is running.
158
+
159
+ Timer_t t;
160
+ Timers.insert (make_pair (time(NULL) + seconds, t));
161
+ return t.GetBinding();
162
+ }
163
+
164
+
165
+ /**********************************
166
+ EventMachine_t::OpenDatagramSocket
167
+ **********************************/
168
+
169
+ const char *EventMachine_t::OpenDatagramSocket (const char *address, int port)
170
+ {
171
+ cerr << "OPEN DATAGRAM SOCKET\n";
172
+ return "Unimplemented";
173
+ }
174
+
175
+
176
+ /*******************************
177
+ EventMachine_t::CreateTcpServer
178
+ *******************************/
179
+
180
+ const char *EventMachine_t::CreateTcpServer (const char *server, int port)
181
+ {
182
+ /* Create a TCP-acceptor (server) socket and add it to the event machine.
183
+ * Return the binding of the new acceptor to the caller.
184
+ * This binding will be referenced when the new acceptor sends events
185
+ * to indicate accepted connections.
186
+ */
187
+
188
+ const char *output_binding = NULL;
189
+
190
+ struct sockaddr_in sin;
191
+
192
+ SOCKET sd_accept = socket (AF_INET, SOCK_STREAM, 0);
193
+ if (sd_accept == INVALID_SOCKET) {
194
+ goto fail;
195
+ }
196
+
197
+ memset (&sin, 0, sizeof(sin));
198
+ sin.sin_family = AF_INET;
199
+ sin.sin_addr.s_addr = INADDR_ANY;
200
+ sin.sin_port = htons (port);
201
+
202
+ if (server && *server) {
203
+ sin.sin_addr.s_addr = inet_addr (server);
204
+ if (sin.sin_addr.s_addr == INADDR_NONE) {
205
+ hostent *hp = gethostbyname (server);
206
+ if (hp == NULL) {
207
+ //__warning ("hostname not resolved: ", server);
208
+ goto fail;
209
+ }
210
+ sin.sin_addr.s_addr = ((in_addr*)(hp->h_addr))->s_addr;
211
+ }
212
+ }
213
+
214
+
215
+ // No need to set reuseaddr on Windows.
216
+
217
+
218
+ if (bind (sd_accept, (struct sockaddr*)&sin, sizeof(sin))) {
219
+ //__warning ("binding failed");
220
+ goto fail;
221
+ }
222
+
223
+ if (listen (sd_accept, 100)) {
224
+ //__warning ("listen failed");
225
+ goto fail;
226
+ }
227
+
228
+ { // Looking good.
229
+ AcceptorDescriptor *ad = new AcceptorDescriptor (this, sd_accept);
230
+ if (!ad)
231
+ throw std::runtime_error ("unable to allocate acceptor");
232
+ Add (ad);
233
+ output_binding = ad->GetBinding();
234
+
235
+ CreateIoCompletionPort ((HANDLE)sd_accept, Iocp, NULL, 0);
236
+ SOCKET sd = socket (AF_INET, SOCK_STREAM, 0);
237
+ CreateIoCompletionPort ((HANDLE)sd, Iocp, NULL, 0);
238
+ AcceptEx (sd_accept, sd,
239
+ }
240
+
241
+ return output_binding;
242
+
243
+ fail:
244
+ if (sd_accept != INVALID_SOCKET)
245
+ closesocket (sd_accept);
246
+ return NULL;
247
+ }
248
+
249
+
250
+ /*******************************
251
+ EventMachine_t::ConnectToServer
252
+ *******************************/
253
+
254
+ const char *EventMachine_t::ConnectToServer (const char *server, int port)
255
+ {
256
+ if (!server || !*server || !port)
257
+ return NULL;
258
+
259
+ sockaddr_in pin;
260
+ unsigned long HostAddr;
261
+
262
+ HostAddr = inet_addr (server);
263
+ if (HostAddr == INADDR_NONE) {
264
+ hostent *hp = gethostbyname (server);
265
+ if (!hp)
266
+ return NULL;
267
+ HostAddr = ((in_addr*)(hp->h_addr))->s_addr;
268
+ }
269
+
270
+ memset (&pin, 0, sizeof(pin));
271
+ pin.sin_family = AF_INET;
272
+ pin.sin_addr.s_addr = HostAddr;
273
+ pin.sin_port = htons (port);
274
+
275
+ int sd = socket (AF_INET, SOCK_STREAM, 0);
276
+ if (sd == INVALID_SOCKET)
277
+ return NULL;
278
+
279
+
280
+ LPOVERLAPPED olap = (LPOVERLAPPED) calloc (1, sizeof (OVERLAPPED));
281
+ cerr << "I'm dying now\n";
282
+ throw runtime_error ("UNIMPLEMENTED!!!\n");
283
+
284
+ }
285
+
286
+
287
+
288
+ /*******************
289
+ EventMachine_t::Add
290
+ *******************/
291
+
292
+ void EventMachine_t::Add (EventableDescriptor *ed)
293
+ {
294
+ cerr << "ADD\n";
295
+ }
296
+
297
+
298
+
299
+ #endif // OS_WIN32
300
+