dripdrop 0.10.0 → 0.11.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/README.md +4 -4
- data/example/combined.rb +3 -3
- data/example/complex/server.rb +3 -3
- data/example/http.rb +1 -1
- data/example/pubsub.rb +5 -5
- data/example/pushpull.rb +2 -2
- data/example/subclass.rb +2 -2
- data/example/xreq_xrep.rb +1 -1
- data/js/dripdrop.html +10 -9
- data/js/dripdrop.js +5 -5
- data/js/jquery.json.js +31 -0
- data/lib/dripdrop/handlers/http_server.rb +6 -1
- data/lib/dripdrop/handlers/websocket_server.rb +6 -1
- data/lib/dripdrop/handlers/zeromq.rb +8 -2
- data/lib/dripdrop/node.rb +8 -8
- data/lib/dripdrop/version.rb +1 -1
- data/spec/node/http_spec.rb +1 -1
- data/spec/node/websocket_spec.rb +1 -1
- data/spec/node/zmq_m2_spec.rb +2 -2
- data/spec/node/zmq_pushpull_spec.rb +2 -2
- data/spec/node/zmq_xrepxreq_spec.rb +2 -2
- metadata +3 -2
data/README.md
CHANGED
@@ -32,7 +32,7 @@ Let's start by looking at the normalized communication interface in a simple app
|
|
32
32
|
route :my_client, :http_client, 'http://127.0.0.1:2201'
|
33
33
|
|
34
34
|
# Our http server is a simple time server
|
35
|
-
my_server.
|
35
|
+
my_server.on_receive do |message,response|
|
36
36
|
response.send_message(:name => 'time', :body => {'time' => Time.now.to_s})
|
37
37
|
end
|
38
38
|
|
@@ -57,7 +57,7 @@ What we've done here is use HTTP as a simple messaging protocol. Yes, we've thro
|
|
57
57
|
|
58
58
|
That replaces the HTTP server and client with ultra-high performance zeromq sockets. Now, protocols have varying strengths and weaknesses, and ZeroMQ is not HTTP necessarily, for instance, given a :zmq_pub socket, you can only send_messages, but there is no response message, because :zmq_pub is the publishing end of a request/reply pattern. The messaging API attempts to reduce all methods on sockets to the following set:
|
59
59
|
|
60
|
-
*
|
60
|
+
* on_receive (sometimes takes a block with |message,response| if it can send a response)
|
61
61
|
* send_message
|
62
62
|
* on_open (Websockets only)
|
63
63
|
* on_close (Websockets only)
|
@@ -88,7 +88,7 @@ The tools mentioned above are useful, but if you try and build a larger app you'
|
|
88
88
|
# The method #run here is merely a convention
|
89
89
|
class StatsCollector < DripDrop::Node::Nodelet
|
90
90
|
def run
|
91
|
-
stats_raw.
|
91
|
+
stats_raw.on_receive do |raw_stat_msg|
|
92
92
|
# Custom filtering code could go here...
|
93
93
|
stats_filtered.send_message(raw_stat_msg)
|
94
94
|
end
|
@@ -103,7 +103,7 @@ The tools mentioned above are useful, but if you try and build a larger app you'
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def run
|
106
|
-
stats_ingress.
|
106
|
+
stats_ingress.on_receive do |message|
|
107
107
|
@name_counts[message.name] += 1
|
108
108
|
puts @name_counts.inspect
|
109
109
|
end
|
data/example/combined.rb
CHANGED
@@ -10,15 +10,15 @@ DripDrop::Node.new do
|
|
10
10
|
route :http_collector, :http_server, 'http://127.0.0.1:8080'
|
11
11
|
route :http_agent, :http_client, http_collector.address
|
12
12
|
|
13
|
-
stats_sub1.
|
13
|
+
stats_sub1.on_receive do |message|
|
14
14
|
puts "Receiver 1: #{message.body}"
|
15
15
|
end
|
16
|
-
stats_sub2.
|
16
|
+
stats_sub2.on_receive do |message|
|
17
17
|
puts "Receiver 2: #{message.body}"
|
18
18
|
end
|
19
19
|
|
20
20
|
i = 0
|
21
|
-
http_collector.
|
21
|
+
http_collector.on_receive do |message,response|
|
22
22
|
i += 1
|
23
23
|
stats_pub.send_message(message)
|
24
24
|
response.send_message(:name => 'ack', :body => {:seq => i})
|
data/example/complex/server.rb
CHANGED
@@ -29,7 +29,7 @@ class Coordinator < DripDrop::Node::Nodelet
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def proxy_reqs
|
32
|
-
reqs_in.
|
32
|
+
reqs_in.on_receive do |message, response|
|
33
33
|
puts "Proxying #{message.inspect} to htout"
|
34
34
|
reqs_htout.send_message(message) do |http_response|
|
35
35
|
puts "Received http response #{http_response.inspect} sending back"
|
@@ -58,7 +58,7 @@ class WSListener < DripDrop::Node::Nodelet
|
|
58
58
|
|
59
59
|
def broadcast_to_websockets
|
60
60
|
# Receives messages from Broadcast Out
|
61
|
-
broadcast_in.
|
61
|
+
broadcast_in.on_receive do |message|
|
62
62
|
puts "Broadcast In recv: #{message.inspect}"
|
63
63
|
@client_channel.push(message)
|
64
64
|
end
|
@@ -87,7 +87,7 @@ class WSListener < DripDrop::Node::Nodelet
|
|
87
87
|
@client_channel.unsubscribe sigs_sids[conn.signature]
|
88
88
|
end
|
89
89
|
|
90
|
-
ws.
|
90
|
+
ws.on_receive do |message,conn|
|
91
91
|
puts "WS Recv #{message.name}"
|
92
92
|
reqs_out.send_message(message) do |resp_message|
|
93
93
|
puts "Recvd resp_message #{resp_message.inspect}, sending back to client"
|
data/example/http.rb
CHANGED
data/example/pubsub.rb
CHANGED
@@ -4,24 +4,24 @@ Thread.abort_on_exception = true
|
|
4
4
|
|
5
5
|
#Define our handlers
|
6
6
|
DripDrop::Node.new do
|
7
|
-
route :pub, :zmq_publish, 'tcp://
|
7
|
+
route :pub, :zmq_publish, 'tcp://127.0.0.1:2200', :bind
|
8
8
|
route :sub1, :zmq_subscribe, pub.address, :connect, :topic_filter => /[13579]$/
|
9
9
|
route :sub2, :zmq_subscribe, pub.address, :connect, :topic_filter => /[02468]$/
|
10
10
|
route :sub3, :zmq_subscribe, pub.address, :connect
|
11
11
|
|
12
|
-
sub1.
|
12
|
+
sub1.on_receive do |message|
|
13
13
|
puts "Receiver 1 #{message.inspect}"
|
14
14
|
end
|
15
15
|
|
16
|
-
sub2.
|
16
|
+
sub2.on_receive do |message|
|
17
17
|
puts "Receiver 2 #{message.inspect}"
|
18
18
|
end
|
19
19
|
|
20
|
-
sub3.
|
20
|
+
sub3.on_receive do |message|
|
21
21
|
puts "Receiver 3 #{message.inspect}"
|
22
22
|
end
|
23
23
|
|
24
|
-
|
24
|
+
EM::PeriodicTimer.new(0.5) do
|
25
25
|
puts "Sending!"
|
26
26
|
#Sending a hash as a message implicitly transforms it into a DripDrop::Message
|
27
27
|
pub.send_message(:name => Time.now.to_i.to_s, :body => 'Test Payload')
|
data/example/pushpull.rb
CHANGED
@@ -4,10 +4,10 @@ Thread.abort_on_exception = true
|
|
4
4
|
DripDrop::Node.new do
|
5
5
|
z_addr = 'tcp://127.0.0.1:2200'
|
6
6
|
|
7
|
-
zmq_pull(z_addr, :connect).
|
7
|
+
zmq_pull(z_addr, :connect).on_receive do |message|
|
8
8
|
puts "Receiver 2 #{message.body}"
|
9
9
|
end
|
10
|
-
zmq_pull(z_addr, :connect).
|
10
|
+
zmq_pull(z_addr, :connect).on_receive do |message|
|
11
11
|
puts "Receiver 1 #{message.body}"
|
12
12
|
end
|
13
13
|
push = zmq_push(z_addr, :bind)
|
data/example/subclass.rb
CHANGED
@@ -36,13 +36,13 @@ node = DripDrop::Node.new do
|
|
36
36
|
pull1 = zmq_pull("tcp://127.0.0.1:2201", :connect)
|
37
37
|
pull2 = zmq_pull("tcp://127.0.0.1:2202", :connect)
|
38
38
|
|
39
|
-
pull1.
|
39
|
+
pull1.on_receive do |msg|
|
40
40
|
puts "Pull 1 #{msg.head.inspect}"
|
41
41
|
sleep 1
|
42
42
|
push2.send_message(msg)
|
43
43
|
end
|
44
44
|
|
45
|
-
pull2.
|
45
|
+
pull2.on_receive do |msg|
|
46
46
|
puts "Pull 2 #{msg.head.inspect}"
|
47
47
|
end
|
48
48
|
|
data/example/xreq_xrep.rb
CHANGED
@@ -5,7 +5,7 @@ DripDrop::Node.new do
|
|
5
5
|
route :xrep_server, :zmq_xrep, 'tcp://127.0.0.1:2200', :bind
|
6
6
|
route :xreq_client, :zmq_xreq, xrep_server.address, :connect
|
7
7
|
|
8
|
-
xrep_server.
|
8
|
+
xrep_server.on_receive do |message,response|
|
9
9
|
puts "REP #{message.body}"
|
10
10
|
response.send_message(message)
|
11
11
|
end
|
data/js/dripdrop.html
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
"http://www.w3.org/TR/html4/loose.dtd">
|
3
3
|
<html>
|
4
4
|
<head>
|
5
|
-
<script src="
|
6
|
-
<script src="
|
7
|
-
<script src="
|
5
|
+
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
|
6
|
+
<script src="jquery.json.js"></script>
|
7
|
+
<script src="dripdrop.js"></script>
|
8
8
|
|
9
9
|
<link rel="stylesheet" href="qunit.css" type="text/css" media="screen" />
|
10
10
|
<script type="text/javascript" src="qunit.js"></script>
|
@@ -15,7 +15,7 @@ $(document).ready(function(){
|
|
15
15
|
|
16
16
|
/* Test Helpers */
|
17
17
|
function TSock() {return new DD.WebSocket('ws://localhost:2702')};
|
18
|
-
function THTTP() {return new DD.
|
18
|
+
function THTTP() {return new DD.HTTPClient('http://localhost:2703')};
|
19
19
|
|
20
20
|
//Faked message to for a websocket
|
21
21
|
function FakeWSMessage(ddMessage) {
|
@@ -85,13 +85,13 @@ module("DD.WebSocket");
|
|
85
85
|
});
|
86
86
|
});
|
87
87
|
|
88
|
-
test("
|
88
|
+
test("onReceive should trigger the passed in callback", function() {
|
89
89
|
expect(3);
|
90
90
|
|
91
91
|
var expectedMsg = new DD.Message('foo');
|
92
92
|
|
93
93
|
var tSock = new TSock;
|
94
|
-
tSock.
|
94
|
+
tSock.onReceive(function(msg) {
|
95
95
|
ok(true, "Function executed");
|
96
96
|
equals(msg.constructor,DD.Message, "Is a DD.Message");
|
97
97
|
equals(msg.name, expectedMsg.name);
|
@@ -115,13 +115,14 @@ module("DD.WebSocket");
|
|
115
115
|
module("DD.HTTP");
|
116
116
|
|
117
117
|
test("Creation", function() {
|
118
|
-
var dht = new DD.
|
119
|
-
equals(dht.constructor, DD.
|
118
|
+
var dht = new DD.HTTPClient;
|
119
|
+
equals(dht.constructor, DD.HTTPClient, "Constructor Match");
|
120
120
|
});
|
121
121
|
|
122
|
+
// Not sure how to mock / stub this into working
|
122
123
|
test("Sending a message should call a get posting a JSON representation of the data",function() {
|
123
124
|
expect(1);
|
124
|
-
var tHTTP =
|
125
|
+
var tHTTP = THTTP;
|
125
126
|
tHTTP.sendMessage();
|
126
127
|
});
|
127
128
|
|
data/js/dripdrop.js
CHANGED
@@ -16,7 +16,7 @@ function DripDrop() {
|
|
16
16
|
/* A DripDrop friendly WebSocket Object.
|
17
17
|
This automatically converts messages to DD.Message objects.
|
18
18
|
Additionally, this uses friendlier callback methods, closer to the DripDrop
|
19
|
-
server-side API, like onOpen,
|
19
|
+
server-side API, like onOpen, onReceive, onError, and onClose. */
|
20
20
|
this.WebSocket = function(url) {
|
21
21
|
this.socket = new WebSocket(url);
|
22
22
|
|
@@ -25,7 +25,7 @@ function DripDrop() {
|
|
25
25
|
return this;
|
26
26
|
};
|
27
27
|
|
28
|
-
this.
|
28
|
+
this.onReceive = function(callback) {
|
29
29
|
this.socket.onmessage = function(wsMessage) {
|
30
30
|
var json = $.parseJSON(wsMessage.data)
|
31
31
|
var message = new DD.Message(json.name, {head: json.head, body: json.body});
|
@@ -56,14 +56,14 @@ function DripDrop() {
|
|
56
56
|
};
|
57
57
|
|
58
58
|
/* A DripDrop friendly HTTP Request. */
|
59
|
-
this.
|
59
|
+
this.HTTPClient = function(url) {
|
60
60
|
this.url = url;
|
61
61
|
|
62
|
-
this.
|
62
|
+
this.onReceive = function(data) {};
|
63
63
|
this.sendMessage = function() {
|
64
64
|
var response = new this.HTTPResponse;
|
65
65
|
$.post(this.url, function(json) {
|
66
|
-
this.
|
66
|
+
this.onReceive(new DD.Message(json.name, {head: json.head, body: json.body}));
|
67
67
|
});
|
68
68
|
};
|
69
69
|
};
|
data/js/jquery.json.js
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
(function($){$.toJSON=function(o)
|
3
|
+
{if(typeof(JSON)=='object'&&JSON.stringify)
|
4
|
+
return JSON.stringify(o);var type=typeof(o);if(o===null)
|
5
|
+
return"null";if(type=="undefined")
|
6
|
+
return undefined;if(type=="number"||type=="boolean")
|
7
|
+
return o+"";if(type=="string")
|
8
|
+
return $.quoteString(o);if(type=='object')
|
9
|
+
{if(typeof o.toJSON=="function")
|
10
|
+
return $.toJSON(o.toJSON());if(o.constructor===Date)
|
11
|
+
{var month=o.getUTCMonth()+1;if(month<10)month='0'+month;var day=o.getUTCDate();if(day<10)day='0'+day;var year=o.getUTCFullYear();var hours=o.getUTCHours();if(hours<10)hours='0'+hours;var minutes=o.getUTCMinutes();if(minutes<10)minutes='0'+minutes;var seconds=o.getUTCSeconds();if(seconds<10)seconds='0'+seconds;var milli=o.getUTCMilliseconds();if(milli<100)milli='0'+milli;if(milli<10)milli='0'+milli;return'"'+year+'-'+month+'-'+day+'T'+
|
12
|
+
hours+':'+minutes+':'+seconds+'.'+milli+'Z"';}
|
13
|
+
if(o.constructor===Array)
|
14
|
+
{var ret=[];for(var i=0;i<o.length;i++)
|
15
|
+
ret.push($.toJSON(o[i])||"null");return"["+ret.join(",")+"]";}
|
16
|
+
var pairs=[];for(var k in o){var name;var type=typeof k;if(type=="number")
|
17
|
+
name='"'+k+'"';else if(type=="string")
|
18
|
+
name=$.quoteString(k);else
|
19
|
+
continue;if(typeof o[k]=="function")
|
20
|
+
continue;var val=$.toJSON(o[k]);pairs.push(name+":"+val);}
|
21
|
+
return"{"+pairs.join(", ")+"}";}};$.evalJSON=function(src)
|
22
|
+
{if(typeof(JSON)=='object'&&JSON.parse)
|
23
|
+
return JSON.parse(src);return eval("("+src+")");};$.secureEvalJSON=function(src)
|
24
|
+
{if(typeof(JSON)=='object'&&JSON.parse)
|
25
|
+
return JSON.parse(src);var filtered=src;filtered=filtered.replace(/\\["\\\/bfnrtu]/g,'@');filtered=filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']');filtered=filtered.replace(/(?:^|:|,)(?:\s*\[)+/g,'');if(/^[\],:{}\s]*$/.test(filtered))
|
26
|
+
return eval("("+src+")");else
|
27
|
+
throw new SyntaxError("Error parsing JSON, source is not valid.");};$.quoteString=function(string)
|
28
|
+
{if(string.match(_escapeable))
|
29
|
+
{return'"'+string.replace(_escapeable,function(a)
|
30
|
+
{var c=_meta[a];if(typeof c==='string')return c;c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"';}
|
31
|
+
return'"'+string+'"';};var _escapeable=/["\\\x00-\x1f\x7f-\x9f]/g;var _meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};})(jQuery);
|
@@ -50,10 +50,15 @@ class DripDrop
|
|
50
50
|
@message_class = @opts[:message_class] || DripDrop.default_message_class
|
51
51
|
end
|
52
52
|
|
53
|
-
def
|
53
|
+
def on_receive(msg_format=:dripdrop_json,&block)
|
54
54
|
@recv_cbak = block
|
55
55
|
@conn = EM.start_server(@uri.host, @uri.port, HTTPEMServer, self)
|
56
56
|
self
|
57
57
|
end
|
58
|
+
|
59
|
+
def on_recv(*args,&block)
|
60
|
+
$stderr.write "DripDrop Warning :on_recv is deprecated in favor of :on_receive"
|
61
|
+
on_receive(*args,&block)
|
62
|
+
end
|
58
63
|
end
|
59
64
|
end
|
@@ -43,11 +43,16 @@ class DripDrop
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
def
|
46
|
+
def on_receive(&block)
|
47
47
|
@raw = false
|
48
48
|
@onmessage_handler = block
|
49
49
|
self
|
50
50
|
end
|
51
|
+
|
52
|
+
def on_recv(&block)
|
53
|
+
$stderr.write "DripDrop Warning :on_recv is deprecated in favor of :on_receive"
|
54
|
+
on_receive(&block)
|
55
|
+
end
|
51
56
|
|
52
57
|
def on_recv_raw(&block)
|
53
58
|
@raw = true
|
@@ -33,10 +33,15 @@ class DripDrop
|
|
33
33
|
@connection
|
34
34
|
end
|
35
35
|
|
36
|
-
def
|
36
|
+
def on_receive(msg_format=:dripdrop,&block)
|
37
37
|
@recv_cbak = block
|
38
38
|
self
|
39
39
|
end
|
40
|
+
|
41
|
+
def on_recv(*args,&block)
|
42
|
+
$stderr.write "DripDrop Warning :on_recv is deprecated in favor of :on_receive"
|
43
|
+
on_receive(*args,&block)
|
44
|
+
end
|
40
45
|
|
41
46
|
def address
|
42
47
|
self.connection.address
|
@@ -261,7 +266,8 @@ class DripDrop
|
|
261
266
|
@seq_counter = 0
|
262
267
|
@promises = {}
|
263
268
|
|
264
|
-
|
269
|
+
# should never be handled by the user
|
270
|
+
self.on_receive do |message|
|
265
271
|
begin
|
266
272
|
seq = message.head[SEQ_CTR_KEY]
|
267
273
|
raise "Missing Seq Counter" unless seq
|
data/lib/dripdrop/node.rb
CHANGED
@@ -179,7 +179,7 @@ class DripDrop
|
|
179
179
|
zmq_handler(DripDrop::Mongrel2Handler, [ZMQ::PULL, ZMQ::PUB], addresses, [:connect, :connect], opts)
|
180
180
|
end
|
181
181
|
|
182
|
-
# Creates a ZMQ::SUB type socket. Can only receive messages via +
|
182
|
+
# Creates a ZMQ::SUB type socket. Can only receive messages via +on_receive+.
|
183
183
|
# zmq_subscribe sockets have a +topic_filter+ option, which restricts which
|
184
184
|
# messages they can receive. It takes a regexp as an option.
|
185
185
|
def zmq_subscribe(address,socket_ctype,opts={},&block)
|
@@ -191,7 +191,7 @@ class DripDrop
|
|
191
191
|
zmq_handler(DripDrop::ZMQPubHandler,ZMQ::PUB,address,socket_ctype,opts)
|
192
192
|
end
|
193
193
|
|
194
|
-
# Creates a ZMQ::PULL type socket. Can only receive messages via +
|
194
|
+
# Creates a ZMQ::PULL type socket. Can only receive messages via +on_receive+
|
195
195
|
def zmq_pull(address,socket_ctype,opts={},&block)
|
196
196
|
zmq_handler(DripDrop::ZMQPullHandler,ZMQ::PULL,address,socket_ctype,opts)
|
197
197
|
end
|
@@ -205,11 +205,11 @@ class DripDrop
|
|
205
205
|
# powerful, so their functionality is currently limited. XREP sockets in DripDrop can reply
|
206
206
|
# to the original source of the message.
|
207
207
|
#
|
208
|
-
# Receiving with XREP sockets in DripDrop is different than other types of sockets,
|
208
|
+
# Receiving with XREP sockets in DripDrop is different than other types of sockets, on_receive
|
209
209
|
# passes 2 arguments to its callback, +message+, and +response+. A minimal example is shown below:
|
210
210
|
#
|
211
211
|
#
|
212
|
-
# zmq_xrep(z_addr, :bind).
|
212
|
+
# zmq_xrep(z_addr, :bind).on_receive do |message,response|
|
213
213
|
# response.send_message(message)
|
214
214
|
# end
|
215
215
|
#
|
@@ -223,12 +223,12 @@ class DripDrop
|
|
223
223
|
end
|
224
224
|
|
225
225
|
# Binds an EM websocket server connection to +address+. takes blocks for
|
226
|
-
# +on_open+, +
|
226
|
+
# +on_open+, +on_receive+, +on_close+ and +on_error+.
|
227
227
|
#
|
228
|
-
# For example +
|
228
|
+
# For example +on_receive+ could be used to echo incoming messages thusly:
|
229
229
|
# websocket_server(addr).on_open {|conn|
|
230
230
|
# ws.send_message(:name => 'ws_open_ack')
|
231
|
-
# }.
|
231
|
+
# }.on_receive {|msg,conn|
|
232
232
|
# conn.send(msg)
|
233
233
|
# }.on_close {|conn|
|
234
234
|
# }.on_error {|reason,conn|
|
@@ -249,7 +249,7 @@ class DripDrop
|
|
249
249
|
end
|
250
250
|
|
251
251
|
# Starts a new Thin HTTP server listening on address.
|
252
|
-
# Can have an +
|
252
|
+
# Can have an +on_receive+ handler that gets passed +msg+ and +response+ args.
|
253
253
|
# http_server(addr) {|msg,response| response.send_message(msg)}
|
254
254
|
def http_server(address,opts={},&block)
|
255
255
|
uri = URI.parse(address)
|
data/lib/dripdrop/version.rb
CHANGED
data/spec/node/http_spec.rb
CHANGED
data/spec/node/websocket_spec.rb
CHANGED
@@ -21,7 +21,7 @@ describe "websockets" do
|
|
21
21
|
server.on_open do |conn|
|
22
22
|
conn.send_message(open_message)
|
23
23
|
seen_signatures << conn.signature
|
24
|
-
end.
|
24
|
+
end.on_receive do |message,conn|
|
25
25
|
received << message
|
26
26
|
conn.send_message(message)
|
27
27
|
end.on_close do |conn|
|
data/spec/node/zmq_m2_spec.rb
CHANGED
@@ -38,12 +38,12 @@ describe "zmq m2" do
|
|
38
38
|
|
39
39
|
dd = zmq_m2([addr, addr2])
|
40
40
|
|
41
|
-
dd.
|
41
|
+
dd.on_receive do |req|
|
42
42
|
requests << req
|
43
43
|
dd.reply_http req, "Hello from DripDrop"
|
44
44
|
end
|
45
45
|
|
46
|
-
m2_recv.
|
46
|
+
m2_recv.on_receive do |msg|
|
47
47
|
responses << msg
|
48
48
|
end
|
49
49
|
|
@@ -16,11 +16,11 @@ describe "zmq push/pull" do
|
|
16
16
|
pull2 = zmq_pull(addr, :connect)
|
17
17
|
pull = [pull1, pull2]
|
18
18
|
|
19
|
-
pull1.
|
19
|
+
pull1.on_receive do |message|
|
20
20
|
message.head['recv_sock'] = 1
|
21
21
|
responses << message
|
22
22
|
end
|
23
|
-
pull2.
|
23
|
+
pull2.on_receive do |message|
|
24
24
|
message.head['recv_sock'] = 2
|
25
25
|
responses << message
|
26
26
|
end
|
@@ -13,7 +13,7 @@ describe "zmq xreq/xrep" do
|
|
13
13
|
rep = zmq_xrep(addr, :bind)
|
14
14
|
req = zmq_xreq(addr, :connect)
|
15
15
|
|
16
|
-
rep.
|
16
|
+
rep.on_receive do |message,response|
|
17
17
|
recvd << {:message => message, :response => response}
|
18
18
|
|
19
19
|
response.send_message :name => 'response', :body => {'orig_name' => message.name}
|
@@ -83,7 +83,7 @@ describe "zmq xreq/xrep" do
|
|
83
83
|
req1 = zmq_xreq(addr, :connect)
|
84
84
|
req2 = zmq_xreq(addr, :connect)
|
85
85
|
|
86
|
-
rep.
|
86
|
+
rep.on_receive do |message,response|
|
87
87
|
response.send_message(message)
|
88
88
|
end
|
89
89
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: dripdrop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.11.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Andrew Cholakian
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-03-
|
13
|
+
date: 2011-03-20 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- example/xreq_xrep.rb
|
112
112
|
- js/dripdrop.html
|
113
113
|
- js/dripdrop.js
|
114
|
+
- js/jquery.json.js
|
114
115
|
- js/qunit.css
|
115
116
|
- js/qunit.js
|
116
117
|
- lib/dripdrop.rb
|