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,23 @@
1
+ $: << File.expand_path(File.dirname(__FILE__))
2
+
3
+ require 'protocol/spec08'
4
+ require 'protocol/protocol08'
5
+
6
+ require 'transport/buffer08'
7
+ require 'transport/frame08'
8
+
9
+ require 'qrack/client'
10
+ require 'qrack/channel'
11
+ require 'qrack/queue'
12
+ require 'qrack/subscription'
13
+
14
+ module Qrack
15
+
16
+ include Protocol
17
+ include Transport
18
+
19
+ # Errors
20
+ class BufferOverflowError < StandardError; end
21
+ class InvalidTypeError < StandardError; end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ $: << File.expand_path(File.dirname(__FILE__))
2
+
3
+ require 'protocol/spec09'
4
+ require 'protocol/protocol09'
5
+
6
+ require 'transport/buffer09'
7
+ require 'transport/frame09'
8
+
9
+ require 'qrack/client'
10
+ require 'qrack/channel'
11
+ require 'qrack/queue'
12
+ require 'qrack/subscription'
13
+
14
+ module Qrack
15
+
16
+ include Protocol09
17
+ include Transport09
18
+
19
+ # Errors
20
+ class BufferOverflowError < StandardError; end
21
+ class InvalidTypeError < StandardError; end
22
+
23
+ end
@@ -0,0 +1,53 @@
1
+ module Qrack
2
+
3
+ # Queue ancestor class
4
+ class Queue
5
+
6
+ attr_reader :name, :client
7
+ attr_accessor :delivery_tag, :subscription
8
+
9
+ =begin rdoc
10
+
11
+ === DESCRIPTION:
12
+
13
+ Returns consumer count from Queue#status.
14
+
15
+ =end
16
+
17
+ def consumer_count
18
+ s = status
19
+ s[:consumer_count]
20
+ end
21
+
22
+ =begin rdoc
23
+
24
+ === DESCRIPTION:
25
+
26
+ Returns message count from Queue#status.
27
+
28
+ =end
29
+
30
+ def message_count
31
+ s = status
32
+ s[:message_count]
33
+ end
34
+
35
+ =begin rdoc
36
+
37
+ === DESCRIPTION:
38
+
39
+ Publishes a message to the queue via the default nameless '' direct exchange.
40
+
41
+ ==== RETURNS:
42
+
43
+ nil
44
+
45
+ =end
46
+
47
+ def publish(data, opts = {})
48
+ exchange.publish(data, opts)
49
+ end
50
+
51
+ end
52
+
53
+ end
@@ -0,0 +1,102 @@
1
+ module Qrack
2
+ # Subscription ancestor class
3
+ class Subscription
4
+
5
+ attr_accessor :consumer_tag, :delivery_tag, :message_max, :timeout, :ack, :exclusive
6
+ attr_reader :client, :queue, :message_count
7
+
8
+ def initialize(client, queue, opts = {})
9
+ @client = client
10
+ @queue = queue
11
+
12
+ # Get timeout value
13
+ @timeout = opts[:timeout] || nil
14
+
15
+ # Get maximum amount of messages to process
16
+ @message_max = opts[:message_max] || nil
17
+
18
+ # If a consumer tag is not passed in the server will generate one
19
+ @consumer_tag = opts[:consumer_tag] || nil
20
+
21
+ # Ignore the :nowait option if passed, otherwise program will hang waiting for a
22
+ # response from the server causing an error.
23
+ opts.delete(:nowait)
24
+
25
+ # Do we want to have to provide an acknowledgement?
26
+ @ack = opts[:ack] || nil
27
+
28
+ # Does this consumer want exclusive use of the queue?
29
+ @exclusive = opts[:exclusive] || false
30
+
31
+ # Initialize message counter
32
+ @message_count = 0
33
+
34
+ # Give queue reference to this subscription
35
+ @queue.subscription = self
36
+
37
+ # Store options
38
+ @opts = opts
39
+
40
+ end
41
+
42
+ def start(&blk)
43
+
44
+ # Do not process any messages if zero message_max
45
+ if message_max == 0
46
+ return
47
+ end
48
+
49
+ # Notify server about new consumer
50
+ setup_consumer
51
+
52
+ # Start subscription loop
53
+ loop do
54
+
55
+ begin
56
+ method = client.next_method(:timeout => timeout)
57
+ rescue Qrack::ClientTimeout
58
+ queue.unsubscribe()
59
+ break
60
+ end
61
+
62
+ # Increment message counter
63
+ @message_count += 1
64
+
65
+ # get delivery tag to use for acknowledge
66
+ queue.delivery_tag = method.delivery_tag if @ack
67
+
68
+ header = client.next_payload
69
+
70
+ # If maximum frame size is smaller than message payload body then message
71
+ # will have a message header and several message bodies
72
+ msg = ''
73
+ while msg.length < header.size
74
+ msg += client.next_payload
75
+ end
76
+
77
+ # If block present, pass the message info to the block for processing
78
+ blk.call({:header => header, :payload => msg, :delivery_details => method.arguments}) if !blk.nil?
79
+
80
+ # Exit loop if message_max condition met
81
+ if (!message_max.nil? and message_count == message_max)
82
+ # Stop consuming messages
83
+ queue.unsubscribe()
84
+ # Acknowledge receipt of the final message
85
+ queue.ack() if @ack
86
+ # Quit the loop
87
+ break
88
+ end
89
+
90
+ # Have to do the ack here because the ack triggers the release of messages from the server
91
+ # if you are using Client#qos prefetch and you will get extra messages sent through before
92
+ # the unsubscribe takes effect to stop messages being sent to this consumer unless the ack is
93
+ # deferred.
94
+ queue.ack() if @ack
95
+
96
+ end
97
+
98
+ end
99
+
100
+ end
101
+
102
+ end
@@ -0,0 +1,276 @@
1
+ if [].map.respond_to? :with_index
2
+ class Array #:nodoc:
3
+ def enum_with_index
4
+ each.with_index
5
+ end
6
+ end
7
+ else
8
+ require 'enumerator'
9
+ end
10
+
11
+ module Qrack
12
+ module Transport #:nodoc: all
13
+ class Buffer
14
+
15
+ def initialize data = ''
16
+ @data = data
17
+ @pos = 0
18
+ end
19
+
20
+ attr_reader :pos
21
+
22
+ def data
23
+ @data.clone
24
+ end
25
+ alias :contents :data
26
+ alias :to_s :data
27
+
28
+ def << data
29
+ @data << data.to_s
30
+ self
31
+ end
32
+
33
+ def length
34
+ @data.length
35
+ end
36
+
37
+ def empty?
38
+ pos == length
39
+ end
40
+
41
+ def rewind
42
+ @pos = 0
43
+ end
44
+
45
+ def read_properties *types
46
+ types.shift if types.first == :properties
47
+
48
+ i = 0
49
+ values = []
50
+
51
+ while props = read(:short)
52
+ (0..14).each do |n|
53
+ # no more property types
54
+ break unless types[i]
55
+
56
+ # if flag is set
57
+ if props & (1<<(15-n)) != 0
58
+ if types[i] == :bit
59
+ # bit values exist in flags only
60
+ values << true
61
+ else
62
+ # save type name for later reading
63
+ values << types[i]
64
+ end
65
+ else
66
+ # property not set or is false bit
67
+ values << (types[i] == :bit ? false : nil)
68
+ end
69
+
70
+ i+=1
71
+ end
72
+
73
+ # bit(0) == 0 means no more property flags
74
+ break unless props & 1 == 1
75
+ end
76
+
77
+ values.map do |value|
78
+ value.is_a?(Symbol) ? read(value) : value
79
+ end
80
+ end
81
+
82
+ def read *types
83
+ if types.first == :properties
84
+ return read_properties(*types)
85
+ end
86
+
87
+ values = types.map do |type|
88
+ case type
89
+ when :octet
90
+ _read(1, 'C')
91
+ when :short
92
+ _read(2, 'n')
93
+ when :long
94
+ _read(4, 'N')
95
+ when :longlong
96
+ upper, lower = _read(8, 'NN')
97
+ upper << 32 | lower
98
+ when :shortstr
99
+ _read read(:octet)
100
+ when :longstr
101
+ _read read(:long)
102
+ when :timestamp
103
+ Time.at read(:longlong)
104
+ when :table
105
+ t = Hash.new
106
+
107
+ table = Buffer.new(read(:longstr))
108
+ until table.empty?
109
+ key, type = table.read(:shortstr, :octet)
110
+ key = key.intern
111
+ t[key] ||= case type
112
+ when 83 # 'S'
113
+ table.read(:longstr)
114
+ when 73 # 'I'
115
+ table.read(:long)
116
+ when 68 # 'D'
117
+ exp = table.read(:octet)
118
+ num = table.read(:long)
119
+ num / 10.0**exp
120
+ when 84 # 'T'
121
+ table.read(:timestamp)
122
+ when 70 # 'F'
123
+ table.read(:table)
124
+ end
125
+ end
126
+
127
+ t
128
+ when :bit
129
+ if (@bits ||= []).empty?
130
+ val = read(:octet)
131
+ @bits = (0..7).map{|i| (val & 1<<i) != 0 }
132
+ end
133
+
134
+ @bits.shift
135
+ else
136
+ raise Qrack::InvalidTypeError, "Cannot read data of type #{type}"
137
+ end
138
+ end
139
+
140
+ types.size == 1 ? values.first : values
141
+ end
142
+
143
+ def write type, data
144
+ case type
145
+ when :octet
146
+ _write(data, 'C')
147
+ when :short
148
+ _write(data, 'n')
149
+ when :long
150
+ _write(data, 'N')
151
+ when :longlong
152
+ lower = data & 0xffffffff
153
+ upper = (data & ~0xffffffff) >> 32
154
+ _write([upper, lower], 'NN')
155
+ when :shortstr
156
+ data = (data || '').to_s
157
+ _write([data.length, data], 'Ca*')
158
+ when :longstr
159
+ if data.is_a? Hash
160
+ write(:table, data)
161
+ else
162
+ data = (data || '').to_s
163
+ _write([data.length, data], 'Na*')
164
+ end
165
+ when :timestamp
166
+ write(:longlong, data.to_i)
167
+ when :table
168
+ data ||= {}
169
+ write :longstr, (data.inject(Buffer.new) do |table, (key, value)|
170
+ table.write(:shortstr, key.to_s)
171
+
172
+ case value
173
+ when String
174
+ table.write(:octet, 83) # 'S'
175
+ table.write(:longstr, value.to_s)
176
+ when Fixnum
177
+ table.write(:octet, 73) # 'I'
178
+ table.write(:long, value)
179
+ when Float
180
+ table.write(:octet, 68) # 'D'
181
+ # XXX there's gotta be a better way to do this..
182
+ exp = value.to_s.split('.').last.length
183
+ num = value * 10**exp
184
+ table.write(:octet, exp)
185
+ table.write(:long, num)
186
+ when Time
187
+ table.write(:octet, 84) # 'T'
188
+ table.write(:timestamp, value)
189
+ when Hash
190
+ table.write(:octet, 70) # 'F'
191
+ table.write(:table, value)
192
+ end
193
+
194
+ table
195
+ end)
196
+ when :bit
197
+ [*data].to_enum(:each_slice, 8).each{|bits|
198
+ write(:octet, bits.enum_with_index.inject(0){ |byte, (bit, i)|
199
+ byte |= 1<<i if bit
200
+ byte
201
+ })
202
+ }
203
+ when :properties
204
+ values = []
205
+ data.enum_with_index.inject(0) do |short, ((type, value), i)|
206
+ n = i % 15
207
+ last = i+1 == data.size
208
+
209
+ if (n == 0 and i != 0) or last
210
+ if data.size > i+1
211
+ short |= 1<<0
212
+ elsif last and value
213
+ values << [type,value]
214
+ short |= 1<<(15-n)
215
+ end
216
+
217
+ write(:short, short)
218
+ short = 0
219
+ end
220
+
221
+ if value and !last
222
+ values << [type,value]
223
+ short |= 1<<(15-n)
224
+ end
225
+
226
+ short
227
+ end
228
+
229
+ values.each do |type, value|
230
+ write(type, value) unless type == :bit
231
+ end
232
+ else
233
+ raise Qrack::InvalidTypeError, "Cannot write data of type #{type}"
234
+ end
235
+
236
+ self
237
+ end
238
+
239
+ def extract
240
+ begin
241
+ cur_data, cur_pos = @data.clone, @pos
242
+ yield self
243
+ rescue Qrack::BufferOverflowError
244
+ @data, @pos = cur_data, cur_pos
245
+ nil
246
+ end
247
+ end
248
+
249
+ def _read(size, pack = nil)
250
+ if @data.is_a?(Qrack::Client)
251
+ raw = @data.read(size)
252
+ return raw if raw.nil? or pack.nil?
253
+ return raw.unpack(pack).first
254
+ end
255
+
256
+ if @pos + size > length
257
+ raise Qrack::BufferOverflowError
258
+ else
259
+ data = @data[@pos,size]
260
+ @data[@pos,size] = ''
261
+ if pack
262
+ data = data.unpack(pack)
263
+ data = data.pop if data.size == 1
264
+ end
265
+ data
266
+ end
267
+ end
268
+
269
+ def _write data, pack = nil
270
+ data = [*data].pack(pack) if pack
271
+ @data[@pos,0] = data
272
+ @pos += data.length
273
+ end
274
+ end
275
+ end
276
+ end