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.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +17 -0
- data/Rakefile +52 -0
- data/VERSION +1 -0
- data/lib/ext/README +1 -0
- data/lib/ext/bunny-0.6.0/LICENSE +20 -0
- data/lib/ext/bunny-0.6.0/README.rdoc +66 -0
- data/lib/ext/bunny-0.6.0/Rakefile +24 -0
- data/lib/ext/bunny-0.6.0/bunny.gemspec +65 -0
- data/lib/ext/bunny-0.6.0/examples/simple_08.rb +30 -0
- data/lib/ext/bunny-0.6.0/examples/simple_09.rb +30 -0
- data/lib/ext/bunny-0.6.0/examples/simple_ack_08.rb +33 -0
- data/lib/ext/bunny-0.6.0/examples/simple_ack_09.rb +33 -0
- data/lib/ext/bunny-0.6.0/examples/simple_consumer_08.rb +53 -0
- data/lib/ext/bunny-0.6.0/examples/simple_consumer_09.rb +53 -0
- data/lib/ext/bunny-0.6.0/examples/simple_fanout_08.rb +39 -0
- data/lib/ext/bunny-0.6.0/examples/simple_fanout_09.rb +39 -0
- data/lib/ext/bunny-0.6.0/examples/simple_headers_08.rb +40 -0
- data/lib/ext/bunny-0.6.0/examples/simple_headers_09.rb +40 -0
- data/lib/ext/bunny-0.6.0/examples/simple_publisher_08.rb +27 -0
- data/lib/ext/bunny-0.6.0/examples/simple_publisher_09.rb +27 -0
- data/lib/ext/bunny-0.6.0/examples/simple_topic_08.rb +59 -0
- data/lib/ext/bunny-0.6.0/examples/simple_topic_09.rb +59 -0
- data/lib/ext/bunny-0.6.0/lib/bunny/channel08.rb +39 -0
- data/lib/ext/bunny-0.6.0/lib/bunny/channel09.rb +39 -0
- data/lib/ext/bunny-0.6.0/lib/bunny/client08.rb +494 -0
- data/lib/ext/bunny-0.6.0/lib/bunny/client09.rb +460 -0
- data/lib/ext/bunny-0.6.0/lib/bunny/exchange08.rb +175 -0
- data/lib/ext/bunny-0.6.0/lib/bunny/exchange09.rb +177 -0
- data/lib/ext/bunny-0.6.0/lib/bunny/queue08.rb +389 -0
- data/lib/ext/bunny-0.6.0/lib/bunny/queue09.rb +395 -0
- data/lib/ext/bunny-0.6.0/lib/bunny/subscription08.rb +85 -0
- data/lib/ext/bunny-0.6.0/lib/bunny/subscription09.rb +85 -0
- data/lib/ext/bunny-0.6.0/lib/bunny.rb +87 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/channel.rb +18 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/client.rb +204 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/protocol/protocol08.rb +132 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/protocol/protocol09.rb +133 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/protocol/spec08.rb +823 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/protocol/spec09.rb +521 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/qrack08.rb +23 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/qrack09.rb +23 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/queue.rb +53 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/subscription.rb +102 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/transport/buffer08.rb +276 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/transport/buffer09.rb +276 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/transport/frame08.rb +112 -0
- data/lib/ext/bunny-0.6.0/lib/qrack/transport/frame09.rb +94 -0
- data/lib/ext/bunny-0.6.0/spec/spec_08/bunny_spec.rb +65 -0
- data/lib/ext/bunny-0.6.0/spec/spec_08/connection_spec.rb +12 -0
- data/lib/ext/bunny-0.6.0/spec/spec_08/exchange_spec.rb +162 -0
- data/lib/ext/bunny-0.6.0/spec/spec_08/queue_spec.rb +206 -0
- data/lib/ext/bunny-0.6.0/spec/spec_09/bunny_spec.rb +65 -0
- data/lib/ext/bunny-0.6.0/spec/spec_09/connection_spec.rb +12 -0
- data/lib/ext/bunny-0.6.0/spec/spec_09/exchange_spec.rb +162 -0
- data/lib/ext/bunny-0.6.0/spec/spec_09/queue_spec.rb +205 -0
- data/lib/ext/eventmachine-0.12.10/.gitignore +14 -0
- data/lib/ext/eventmachine-0.12.10/README +82 -0
- data/lib/ext/eventmachine-0.12.10/Rakefile +374 -0
- data/lib/ext/eventmachine-0.12.10/docs/COPYING +60 -0
- data/lib/ext/eventmachine-0.12.10/docs/ChangeLog +211 -0
- data/lib/ext/eventmachine-0.12.10/docs/DEFERRABLES +133 -0
- data/lib/ext/eventmachine-0.12.10/docs/EPOLL +141 -0
- data/lib/ext/eventmachine-0.12.10/docs/GNU +281 -0
- data/lib/ext/eventmachine-0.12.10/docs/INSTALL +13 -0
- data/lib/ext/eventmachine-0.12.10/docs/KEYBOARD +38 -0
- data/lib/ext/eventmachine-0.12.10/docs/LEGAL +25 -0
- data/lib/ext/eventmachine-0.12.10/docs/LIGHTWEIGHT_CONCURRENCY +70 -0
- data/lib/ext/eventmachine-0.12.10/docs/PURE_RUBY +75 -0
- data/lib/ext/eventmachine-0.12.10/docs/RELEASE_NOTES +94 -0
- data/lib/ext/eventmachine-0.12.10/docs/SMTP +2 -0
- data/lib/ext/eventmachine-0.12.10/docs/SPAWNED_PROCESSES +89 -0
- data/lib/ext/eventmachine-0.12.10/docs/TODO +8 -0
- data/lib/ext/eventmachine-0.12.10/eventmachine.gemspec +40 -0
- data/lib/ext/eventmachine-0.12.10/examples/ex_channel.rb +43 -0
- data/lib/ext/eventmachine-0.12.10/examples/ex_queue.rb +2 -0
- data/lib/ext/eventmachine-0.12.10/examples/helper.rb +2 -0
- data/lib/ext/eventmachine-0.12.10/ext/binder.cpp +125 -0
- data/lib/ext/eventmachine-0.12.10/ext/binder.h +46 -0
- data/lib/ext/eventmachine-0.12.10/ext/cmain.cpp +827 -0
- data/lib/ext/eventmachine-0.12.10/ext/cplusplus.cpp +202 -0
- data/lib/ext/eventmachine-0.12.10/ext/ed.cpp +1893 -0
- data/lib/ext/eventmachine-0.12.10/ext/ed.h +424 -0
- data/lib/ext/eventmachine-0.12.10/ext/em.cpp +2282 -0
- data/lib/ext/eventmachine-0.12.10/ext/em.h +232 -0
- data/lib/ext/eventmachine-0.12.10/ext/emwin.cpp +300 -0
- data/lib/ext/eventmachine-0.12.10/ext/emwin.h +94 -0
- data/lib/ext/eventmachine-0.12.10/ext/epoll.cpp +26 -0
- data/lib/ext/eventmachine-0.12.10/ext/epoll.h +25 -0
- data/lib/ext/eventmachine-0.12.10/ext/eventmachine.h +122 -0
- data/lib/ext/eventmachine-0.12.10/ext/eventmachine_cpp.h +96 -0
- data/lib/ext/eventmachine-0.12.10/ext/extconf.rb +148 -0
- data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/extconf.rb +83 -0
- data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/mapper.cpp +214 -0
- data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/mapper.h +59 -0
- data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/rubymain.cpp +127 -0
- data/lib/ext/eventmachine-0.12.10/ext/files.cpp +94 -0
- data/lib/ext/eventmachine-0.12.10/ext/files.h +65 -0
- data/lib/ext/eventmachine-0.12.10/ext/kb.cpp +81 -0
- data/lib/ext/eventmachine-0.12.10/ext/page.cpp +107 -0
- data/lib/ext/eventmachine-0.12.10/ext/page.h +51 -0
- data/lib/ext/eventmachine-0.12.10/ext/pipe.cpp +349 -0
- data/lib/ext/eventmachine-0.12.10/ext/project.h +151 -0
- data/lib/ext/eventmachine-0.12.10/ext/rubymain.cpp +1166 -0
- data/lib/ext/eventmachine-0.12.10/ext/sigs.cpp +89 -0
- data/lib/ext/eventmachine-0.12.10/ext/sigs.h +32 -0
- data/lib/ext/eventmachine-0.12.10/ext/ssl.cpp +460 -0
- data/lib/ext/eventmachine-0.12.10/ext/ssl.h +94 -0
- data/lib/ext/eventmachine-0.12.10/java/.classpath +8 -0
- data/lib/ext/eventmachine-0.12.10/java/.project +17 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EmReactor.java +570 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EmReactorException.java +40 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableChannel.java +69 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableDatagramChannel.java +189 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableSocketChannel.java +364 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Application.java +194 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Connection.java +74 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/ConnectionFactory.java +37 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +46 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/PeriodicTimer.java +38 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Timer.java +54 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/ApplicationTest.java +109 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/ConnectTest.java +148 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/EMTest.java +80 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestDatagrams.java +53 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestServers.java +75 -0
- data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestTimers.java +90 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/buftok.rb +138 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/callback.rb +26 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/channel.rb +57 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/connection.rb +564 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/deferrable.rb +192 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/file_watch.rb +54 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/future.rb +61 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/messages.rb +66 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/process_watch.rb +44 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/processes.rb +119 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/header_and_content.rb +138 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/httpclient.rb +263 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/httpclient2.rb +590 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/line_and_text.rb +125 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/linetext2.rb +161 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/memcache.rb +323 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/object_protocol.rb +45 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/postgres3.rb +247 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/saslauth.rb +175 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/smtpclient.rb +357 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/smtpserver.rb +547 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/socks4.rb +66 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/stomp.rb +200 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols/tcptest.rb +53 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/protocols.rb +36 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/queue.rb +61 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/spawnable.rb +85 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/streamer.rb +130 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/timers.rb +56 -0
- data/lib/ext/eventmachine-0.12.10/lib/em/version.rb +3 -0
- data/lib/ext/eventmachine-0.12.10/lib/eventmachine.rb +1592 -0
- data/lib/ext/eventmachine-0.12.10/lib/evma/callback.rb +32 -0
- data/lib/ext/eventmachine-0.12.10/lib/evma/container.rb +75 -0
- data/lib/ext/eventmachine-0.12.10/lib/evma/factory.rb +77 -0
- data/lib/ext/eventmachine-0.12.10/lib/evma/protocol.rb +87 -0
- data/lib/ext/eventmachine-0.12.10/lib/evma/reactor.rb +48 -0
- data/lib/ext/eventmachine-0.12.10/lib/evma.rb +32 -0
- data/lib/ext/eventmachine-0.12.10/lib/jeventmachine.rb +257 -0
- data/lib/ext/eventmachine-0.12.10/lib/pr_eventmachine.rb +1022 -0
- data/lib/ext/eventmachine-0.12.10/setup.rb +1585 -0
- data/lib/ext/eventmachine-0.12.10/tasks/cpp.rake_example +77 -0
- data/lib/ext/eventmachine-0.12.10/tests/client.crt +31 -0
- data/lib/ext/eventmachine-0.12.10/tests/client.key +51 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_attach.rb +126 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_basic.rb +284 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_channel.rb +63 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_connection_count.rb +35 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_defer.rb +47 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_epoll.rb +160 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_error_handler.rb +35 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_errors.rb +82 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_exc.rb +55 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_file_watch.rb +49 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_futures.rb +198 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_get_sock_opt.rb +30 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_handler_check.rb +37 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_hc.rb +218 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_httpclient.rb +218 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_httpclient2.rb +153 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_inactivity_timeout.rb +50 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_kb.rb +60 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_ltp.rb +182 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_ltp2.rb +317 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_next_tick.rb +133 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_object_protocol.rb +37 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_pause.rb +70 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_pending_connect_timeout.rb +48 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_process_watch.rb +48 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_processes.rb +128 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_proxy_connection.rb +92 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_pure.rb +125 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_queue.rb +44 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_running.rb +42 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_sasl.rb +72 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_send_file.rb +242 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_servers.rb +76 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_smtpclient.rb +83 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_smtpserver.rb +85 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_spawn.rb +322 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_ssl_args.rb +79 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_ssl_methods.rb +50 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_ssl_verify.rb +82 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_timers.rb +162 -0
- data/lib/ext/eventmachine-0.12.10/tests/test_ud.rb +36 -0
- data/lib/ext/eventmachine-0.12.10/tests/testem.rb +31 -0
- data/lib/ext/eventmachine-0.12.10/web/whatis +7 -0
- data/lib/ext/misc/README +1 -0
- data/lib/ext/misc/indifferent_access.rb +131 -0
- data/lib/ext/uuidtools-2.1.1/CHANGELOG +56 -0
- data/lib/ext/uuidtools-2.1.1/LICENSE +20 -0
- data/lib/ext/uuidtools-2.1.1/README +13 -0
- data/lib/ext/uuidtools-2.1.1/Rakefile +48 -0
- data/lib/ext/uuidtools-2.1.1/lib/compat/securerandom.rb +202 -0
- data/lib/ext/uuidtools-2.1.1/lib/uuidtools/version.rb +35 -0
- data/lib/ext/uuidtools-2.1.1/lib/uuidtools.rb +618 -0
- data/lib/ext/uuidtools-2.1.1/spec/spec.opts +1 -0
- data/lib/ext/uuidtools-2.1.1/spec/spec_helper.rb +7 -0
- data/lib/ext/uuidtools-2.1.1/spec/uuidtools/mac_address_spec.rb +15 -0
- data/lib/ext/uuidtools-2.1.1/spec/uuidtools/utility_spec.rb +21 -0
- data/lib/ext/uuidtools-2.1.1/spec/uuidtools/uuid_creation_spec.rb +121 -0
- data/lib/ext/uuidtools-2.1.1/spec/uuidtools/uuid_parsing_spec.rb +127 -0
- data/lib/ext/uuidtools-2.1.1/tasks/benchmark.rake +38 -0
- data/lib/ext/uuidtools-2.1.1/tasks/clobber.rake +2 -0
- data/lib/ext/uuidtools-2.1.1/tasks/gem.rake +68 -0
- data/lib/ext/uuidtools-2.1.1/tasks/git.rake +40 -0
- data/lib/ext/uuidtools-2.1.1/tasks/metrics.rake +22 -0
- data/lib/ext/uuidtools-2.1.1/tasks/rdoc.rake +29 -0
- data/lib/ext/uuidtools-2.1.1/tasks/rubyforge.rake +89 -0
- data/lib/ext/uuidtools-2.1.1/tasks/spec.rake +64 -0
- data/lib/ext/uuidtools-2.1.1/website/index.html +95 -0
- data/lib/sidekick/client/sidekick_client.rb +46 -0
- data/lib/sidekick/shared/sidekick_logger.rb +14 -0
- data/lib/sidekick/shared/sidekick_queue_publisher.rb +91 -0
- data/lib/sidekick-client.rb +7 -0
- data/sidekick-client.gemspec +289 -0
- data/test/helper.rb +10 -0
- data/test/test_sidekick-client.rb +7 -0
- 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
|