omq-rfc-clientserver 0.1.1 → 0.2.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.
- checksums.yaml +4 -4
- data/lib/omq/rfc/clientserver/version.rb +1 -1
- data/lib/omq/routing/client.rb +23 -5
- data/lib/omq/routing/server.rb +23 -6
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 66df86a8254e8f9ecff91aae1fe325bbab16b3cb3a9aeaa32b18cafead1ba8fb
|
|
4
|
+
data.tar.gz: 9ab8ce1147441a6141714aac65f87a51922500583c0a32a598e2d312c514678f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5a7f273606aa1ab9a9b124270aabc655b6a94974da3b86a26f43587de6dbec72198f6d3f73e2a6c319b1440f94a993c9157edd51a77e0610af3f3ff3662d9263
|
|
7
|
+
data.tar.gz: 2865614168c2ecc3a1212837f234c9c34cfb66f6b3a691ca8742af93ded4396e5bf78c271d0939debd9989180a2801a3819d7920b7e1da0e140d7aaed2a342a6
|
data/lib/omq/routing/client.rb
CHANGED
|
@@ -8,27 +8,46 @@ module OMQ
|
|
|
8
8
|
#
|
|
9
9
|
class Client
|
|
10
10
|
include RoundRobin
|
|
11
|
-
include FairRecv
|
|
12
11
|
|
|
13
12
|
# @param engine [Engine]
|
|
14
13
|
#
|
|
15
14
|
def initialize(engine)
|
|
16
15
|
@engine = engine
|
|
17
|
-
@recv_queue =
|
|
16
|
+
@recv_queue = Routing.build_queue(engine.options.recv_hwm, :block)
|
|
18
17
|
@tasks = []
|
|
19
18
|
init_round_robin(engine)
|
|
20
19
|
end
|
|
21
20
|
|
|
22
21
|
|
|
23
|
-
# @return [
|
|
22
|
+
# @return [Async::LimitedQueue]
|
|
24
23
|
#
|
|
25
24
|
attr_reader :recv_queue
|
|
26
25
|
|
|
26
|
+
|
|
27
|
+
# Dequeues the next received message. Blocks until one is available.
|
|
28
|
+
#
|
|
29
|
+
# @return [Array<String>, nil]
|
|
30
|
+
#
|
|
31
|
+
def dequeue_recv
|
|
32
|
+
@recv_queue.dequeue
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# Wakes a blocked {#dequeue_recv} with a nil sentinel.
|
|
37
|
+
#
|
|
38
|
+
# @return [void]
|
|
39
|
+
#
|
|
40
|
+
def unblock_recv
|
|
41
|
+
@recv_queue.enqueue(nil)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
|
|
27
45
|
# @param connection [Connection]
|
|
28
46
|
#
|
|
29
47
|
def connection_added(connection)
|
|
30
48
|
@connections << connection
|
|
31
|
-
|
|
49
|
+
task = @engine.start_recv_pump(connection, @recv_queue)
|
|
50
|
+
@tasks << task if task
|
|
32
51
|
add_round_robin_send_connection(connection)
|
|
33
52
|
end
|
|
34
53
|
|
|
@@ -37,7 +56,6 @@ module OMQ
|
|
|
37
56
|
#
|
|
38
57
|
def connection_removed(connection)
|
|
39
58
|
@connections.delete(connection)
|
|
40
|
-
@recv_queue.remove_queue(connection)
|
|
41
59
|
remove_round_robin_send_connection(connection)
|
|
42
60
|
end
|
|
43
61
|
|
data/lib/omq/routing/server.rb
CHANGED
|
@@ -11,13 +11,11 @@ module OMQ
|
|
|
11
11
|
# routes to the identified connection.
|
|
12
12
|
#
|
|
13
13
|
class Server
|
|
14
|
-
include FairRecv
|
|
15
|
-
|
|
16
14
|
# @param engine [Engine]
|
|
17
15
|
#
|
|
18
16
|
def initialize(engine)
|
|
19
17
|
@engine = engine
|
|
20
|
-
@recv_queue =
|
|
18
|
+
@recv_queue = Routing.build_queue(engine.options.recv_hwm, :block)
|
|
21
19
|
@connections_by_routing_id = {}
|
|
22
20
|
@routing_id_by_connection = {}
|
|
23
21
|
@conn_queues = {}
|
|
@@ -26,10 +24,29 @@ module OMQ
|
|
|
26
24
|
end
|
|
27
25
|
|
|
28
26
|
|
|
29
|
-
# @return [
|
|
27
|
+
# @return [Async::LimitedQueue]
|
|
30
28
|
#
|
|
31
29
|
attr_reader :recv_queue
|
|
32
30
|
|
|
31
|
+
|
|
32
|
+
# Dequeues the next received message. Blocks until one is available.
|
|
33
|
+
#
|
|
34
|
+
# @return [Array<String>, nil]
|
|
35
|
+
#
|
|
36
|
+
def dequeue_recv
|
|
37
|
+
@recv_queue.dequeue
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# Wakes a blocked {#dequeue_recv} with a nil sentinel.
|
|
42
|
+
#
|
|
43
|
+
# @return [void]
|
|
44
|
+
#
|
|
45
|
+
def unblock_recv
|
|
46
|
+
@recv_queue.enqueue(nil)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
|
|
33
50
|
# @param connection [Connection]
|
|
34
51
|
#
|
|
35
52
|
def connection_added(connection)
|
|
@@ -37,7 +54,8 @@ module OMQ
|
|
|
37
54
|
@connections_by_routing_id[routing_id] = connection
|
|
38
55
|
@routing_id_by_connection[connection] = routing_id
|
|
39
56
|
|
|
40
|
-
|
|
57
|
+
task = @engine.start_recv_pump(connection, @recv_queue) { |msg| [routing_id, *msg] }
|
|
58
|
+
@tasks << task if task
|
|
41
59
|
|
|
42
60
|
q = Routing.build_queue(@engine.options.send_hwm, :block)
|
|
43
61
|
@conn_queues[connection] = q
|
|
@@ -50,7 +68,6 @@ module OMQ
|
|
|
50
68
|
def connection_removed(connection)
|
|
51
69
|
routing_id = @routing_id_by_connection.delete(connection)
|
|
52
70
|
@connections_by_routing_id.delete(routing_id) if routing_id
|
|
53
|
-
@recv_queue.remove_queue(connection)
|
|
54
71
|
@conn_queues.delete(connection)
|
|
55
72
|
@conn_send_tasks.delete(connection)&.stop
|
|
56
73
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: omq-rfc-clientserver
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Patrik Wenger
|
|
@@ -13,16 +13,16 @@ dependencies:
|
|
|
13
13
|
name: omq
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
|
-
- - "
|
|
16
|
+
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '0.
|
|
18
|
+
version: '0.21'
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
|
-
- - "
|
|
23
|
+
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '0.
|
|
25
|
+
version: '0.21'
|
|
26
26
|
description: CLIENT and SERVER socket types implementing ZeroMQ RFC 41 for the OMQ
|
|
27
27
|
pure-Ruby ZeroMQ library.
|
|
28
28
|
email:
|