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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d3d657d656abf8f6ef632439303ec0059551b1d899f7b49a101f53e77dd628ba
4
- data.tar.gz: 0b1320c47bfab9a99ba4db0c60debefe0b1656fcd7dc12ee53037d551c38a2c5
3
+ metadata.gz: 66df86a8254e8f9ecff91aae1fe325bbab16b3cb3a9aeaa32b18cafead1ba8fb
4
+ data.tar.gz: 9ab8ce1147441a6141714aac65f87a51922500583c0a32a598e2d312c514678f
5
5
  SHA512:
6
- metadata.gz: c79ddc223fc0558a46d941dc5e2cc394e619d67464a02d64ec2367a36765d5fc4e18c4d6e0924d1992a8c4185053449fe1b076987b1392ddc2f72cbd104b4a3d
7
- data.tar.gz: 74966ec22584ef760f6ad14dac08e1a348940744b15bf38956549e8ad63389fdd2a5d0052a805d3277290d9d0dfd4bc3896889d82742e39c68bdfa505adb9cdc
6
+ metadata.gz: 5a7f273606aa1ab9a9b124270aabc655b6a94974da3b86a26f43587de6dbec72198f6d3f73e2a6c319b1440f94a993c9157edd51a77e0610af3f3ff3662d9263
7
+ data.tar.gz: 2865614168c2ecc3a1212837f234c9c34cfb66f6b3a691ca8742af93ded4396e5bf78c271d0939debd9989180a2801a3819d7920b7e1da0e140d7aaed2a342a6
@@ -4,7 +4,7 @@ module OMQ
4
4
  module RFC
5
5
  # CLIENT/SERVER socket types extension (ZeroMQ RFC 41).
6
6
  module ClientServer
7
- VERSION = "0.1.1"
7
+ VERSION = "0.2.0"
8
8
  end
9
9
  end
10
10
  end
@@ -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 = FairQueue.new
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 [FairQueue]
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
- add_fair_recv_connection(connection)
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
 
@@ -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 = FairQueue.new
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 [FairQueue]
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
- add_fair_recv_connection(connection) { |msg| [routing_id, *msg] }
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.1.1
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.20'
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.20'
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: