ffi-czmq 0.0.9.pre → 0.1.1.pre
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/LICENSE +0 -11
- data/lib/czmq/utils.rb +8 -10
- data/lib/czmq/version.rb +1 -1
- data/lib/czmq/zactor.rb +11 -18
- data/lib/czmq/zcert.rb +42 -44
- data/lib/czmq/zcertstore.rb +7 -9
- data/lib/czmq/zclock.rb +30 -0
- data/lib/czmq/zconfig.rb +1 -1
- data/lib/czmq/zframe.rb +14 -3
- data/lib/czmq/zlogger.rb +25 -0
- data/lib/czmq/zloop.rb +8 -9
- data/lib/czmq/zmsg.rb +4 -22
- data/lib/czmq/zpoller.rb +4 -4
- data/lib/czmq/zsock.rb +10 -12
- data/lib/czmq/zstr.rb +7 -11
- data/lib/czmq/zsys.rb +6 -5
- data/lib/czmq.rb +2 -0
- data/lib/ffi-czmq.rb +2 -0
- data/lib/libzmq.rb +47 -0
- metadata +10 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c194cff3d41eae0f11f28592e0f941af8202e66c
|
|
4
|
+
data.tar.gz: ba4b758beb7306b357ac680f61b9ee2ba778468f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6789dc075cc8cc874b6035187e5db349c34fc92dec5ce60400658e0f59c4e9f36aedfce79fc4a0f3d548216bf4e4bd8e2337a67fcb00feb08cba99922189418b
|
|
7
|
+
data.tar.gz: 1394af326de53f42e345d6d92515ab82b59c2ad24c04038987c1a7c5142a868388165607167426336a3f5c02f1bb09eea3d7d4af22c787e16bb34e51d57ccae4
|
data/LICENSE
CHANGED
|
@@ -175,17 +175,6 @@ Apache License
|
|
|
175
175
|
|
|
176
176
|
END OF TERMS AND CONDITIONS
|
|
177
177
|
|
|
178
|
-
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
-
|
|
180
|
-
To apply the Apache License to your work, attach the following
|
|
181
|
-
boilerplate notice, with the fields enclosed by brackets "{}"
|
|
182
|
-
replaced with your own identifying information. (Don't include
|
|
183
|
-
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
-
comment syntax for the file format. We also recommend that a
|
|
185
|
-
file or class name and description of purpose be included on the
|
|
186
|
-
same "printed page" as the copyright notice for easier
|
|
187
|
-
identification within third-party archives.
|
|
188
|
-
|
|
189
178
|
Copyright 2014 Hendrik Beskow
|
|
190
179
|
|
|
191
180
|
Licensed under the Apache License, Version 2.0 (the "License");
|
data/lib/czmq/utils.rb
CHANGED
|
@@ -9,20 +9,20 @@ module CZMQ
|
|
|
9
9
|
|
|
10
10
|
attach_function :zmq_version, :zmq_version, [:buffer_in, :buffer_in, :buffer_in], :void, blocking: true
|
|
11
11
|
attach_function :zsys_version, :zsys_version, [:buffer_in, :buffer_in, :buffer_in], :void, blocking: true
|
|
12
|
-
attach_function :errno, :zmq_errno, [], :int
|
|
13
|
-
attach_function :strerror, :zmq_strerror, [:int], :string
|
|
12
|
+
attach_function :errno, :zmq_errno, [], :int
|
|
13
|
+
attach_function :strerror, :zmq_strerror, [:int], :string
|
|
14
14
|
|
|
15
15
|
module_function
|
|
16
16
|
|
|
17
17
|
def version
|
|
18
18
|
unless @version
|
|
19
|
-
z_major = FFI::MemoryPointer.new :
|
|
20
|
-
z_minor = FFI::MemoryPointer.new :
|
|
21
|
-
z_patch = FFI::MemoryPointer.new :
|
|
19
|
+
z_major = FFI::MemoryPointer.new :pointer
|
|
20
|
+
z_minor = FFI::MemoryPointer.new :pointer
|
|
21
|
+
z_patch = FFI::MemoryPointer.new :pointer
|
|
22
22
|
|
|
23
|
-
c_major = FFI::MemoryPointer.new :
|
|
24
|
-
c_minor = FFI::MemoryPointer.new :
|
|
25
|
-
c_patch = FFI::MemoryPointer.new :
|
|
23
|
+
c_major = FFI::MemoryPointer.new :pointer
|
|
24
|
+
c_minor = FFI::MemoryPointer.new :pointer
|
|
25
|
+
c_patch = FFI::MemoryPointer.new :pointer
|
|
26
26
|
|
|
27
27
|
zmq_version z_major, z_minor, z_patch
|
|
28
28
|
zsys_version c_major, c_minor, c_patch
|
|
@@ -54,8 +54,6 @@ module CZMQ
|
|
|
54
54
|
|
|
55
55
|
if version[:czmq][:major] < 3
|
|
56
56
|
fail LoadError, 'This needs at least czmq 3'
|
|
57
|
-
else
|
|
58
|
-
attach_function :has_curve, :zsys_has_curve, [], :bool, blocking: true
|
|
59
57
|
end
|
|
60
58
|
end
|
|
61
59
|
end
|
data/lib/czmq/version.rb
CHANGED
data/lib/czmq/zactor.rb
CHANGED
|
@@ -13,14 +13,13 @@ module CZMQ
|
|
|
13
13
|
czmq_function :resolve, :resolve, [:pointer], :pointer
|
|
14
14
|
attach_function :zauth, :zauth, [:pointer, :pointer], :void, blocking: true
|
|
15
15
|
attach_function :zbeacon, :zbeacon, [:pointer, :pointer], :void, blocking: true
|
|
16
|
-
attach_function :zgossip, :zgossip, [:pointer, :
|
|
16
|
+
attach_function :zgossip, :zgossip, [:pointer, :string], :void, blocking: true
|
|
17
17
|
attach_function :zmonitor, :zmonitor, [:pointer, :pointer], :void, blocking: true
|
|
18
18
|
attach_function :zproxy, :zproxy, [:pointer, :pointer], :void, blocking: true
|
|
19
19
|
|
|
20
20
|
def self.new_actor(&actor)
|
|
21
21
|
zactor_fn = FFI::Function.new(:void, [:pointer, :pointer], blocking: true) do |zsock_t, args|
|
|
22
|
-
|
|
23
|
-
actor.call(child_pipe)
|
|
22
|
+
yield Zsock.new_from_czmq_obj(zsock_t, nil)
|
|
24
23
|
end
|
|
25
24
|
|
|
26
25
|
new(zactor_fn, nil)
|
|
@@ -28,30 +27,24 @@ module CZMQ
|
|
|
28
27
|
|
|
29
28
|
[:zauth, :zbeacon, :zproxy].each do |meth|
|
|
30
29
|
instance_eval <<-RUBY, __FILE__, __LINE__
|
|
31
|
-
|
|
32
|
-
zactor_fn = FFI::Function.new(:void, [:pointer, :pointer], blocking: true) do |zsock_t, args|
|
|
33
|
-
#{meth.to_s}(zsock_t, args)
|
|
34
|
-
end
|
|
30
|
+
const_set("#{meth.to_s.upcase}", FFI::Function.new(:void, [:pointer, :pointer], blocking: true) {|zsock_t, args| #{meth.to_s}(zsock_t, args)})
|
|
35
31
|
|
|
36
|
-
|
|
32
|
+
def new_#{meth.to_s}
|
|
33
|
+
new(#{meth.to_s.upcase}, nil)
|
|
37
34
|
end
|
|
38
35
|
RUBY
|
|
39
36
|
end
|
|
40
37
|
|
|
41
|
-
|
|
42
|
-
zactor_fn = FFI::Function.new(:void, [:pointer, :pointer], blocking: true) do |zsock_t, args|
|
|
43
|
-
zmonitor(zsock_t, args)
|
|
44
|
-
end
|
|
38
|
+
ZMONITOR = FFI::Function.new(:void, [:pointer, :pointer], blocking: true) {|zsock_t, args| zmonitor(zsock_t, args)}
|
|
45
39
|
|
|
46
|
-
|
|
40
|
+
def self.new_zmonitor(sock)
|
|
41
|
+
new(ZMONITOR, Zsock.convert(sock))
|
|
47
42
|
end
|
|
48
43
|
|
|
49
|
-
|
|
50
|
-
zactor_fn = FFI::Function.new(:void, [:pointer, :string], blocking: true) do |zsock_t, args|
|
|
51
|
-
zgossip(zsock_t, args)
|
|
52
|
-
end
|
|
44
|
+
ZGOSSIP = FFI::Function.new(:void, [:pointer, :string], blocking: true) {|zsock_t, args| zgossip(zsock_t, args)}
|
|
53
45
|
|
|
54
|
-
|
|
46
|
+
def self.new_zgossip(logprefix)
|
|
47
|
+
new(ZGOSSIP, logprefix)
|
|
55
48
|
end
|
|
56
49
|
|
|
57
50
|
def tell(*msgs)
|
data/lib/czmq/zcert.rb
CHANGED
|
@@ -1,56 +1,54 @@
|
|
|
1
1
|
require_relative 'utils'
|
|
2
2
|
require_relative 'libczmq'
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
fail ArgumentError, "#{cert.class} is not a CZMQ::Zcert", caller
|
|
32
|
-
end
|
|
4
|
+
module CZMQ
|
|
5
|
+
class Zcert
|
|
6
|
+
extend ::LibCZMQ
|
|
7
|
+
|
|
8
|
+
czmq_constructor
|
|
9
|
+
czmq_destructor
|
|
10
|
+
|
|
11
|
+
czmq_function :public_txt, :public_txt, [:pointer], :string
|
|
12
|
+
czmq_function :secret_txt, :secret_txt, [:pointer], :string
|
|
13
|
+
czmq_function :load_zcert, :load, [:string], :pointer
|
|
14
|
+
czmq_function :save, :save, [:pointer, :string], :int
|
|
15
|
+
czmq_function :save_public, :save_public, [:pointer, :string], :int
|
|
16
|
+
czmq_function :save_secret, :save_secret, [:pointer, :string], :int
|
|
17
|
+
czmq_function :apply, :apply, [:pointer, :pointer], :void
|
|
18
|
+
czmq_function :dup_zcert, :dup, [:pointer], :pointer
|
|
19
|
+
czmq_function :eq, :eq, [:pointer, :pointer], :bool
|
|
20
|
+
|
|
21
|
+
def self.convert(cert)
|
|
22
|
+
if Utils.check_for_pointer(cert)
|
|
23
|
+
|
|
24
|
+
return cert
|
|
25
|
+
elsif cert.respond_to?(:to_zcert) &&
|
|
26
|
+
Utils.check_for_pointer(cert.to_zcert)
|
|
27
|
+
|
|
28
|
+
return cert.to_zcert
|
|
29
|
+
else
|
|
30
|
+
fail ArgumentError, "#{cert.class} is not a CZMQ::Zcert", caller
|
|
33
31
|
end
|
|
32
|
+
end
|
|
34
33
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
end
|
|
34
|
+
def self.load(filename)
|
|
35
|
+
unless (zcert = load_zcert(filename)).null?
|
|
36
|
+
new_from_czmq_obj(zcert)
|
|
37
|
+
else
|
|
38
|
+
fail IOError, Utils.error, caller
|
|
41
39
|
end
|
|
40
|
+
end
|
|
42
41
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
def dup
|
|
43
|
+
self.class.new_from_czmq_obj(dup_zcert)
|
|
44
|
+
end
|
|
46
45
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
def ==(other)
|
|
47
|
+
(object_id == other.object_id ||eq(self.class.convert(other)))
|
|
48
|
+
end
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
end
|
|
50
|
+
def !=(other)
|
|
51
|
+
! self.==(other)
|
|
54
52
|
end
|
|
55
53
|
end
|
|
56
54
|
end
|
data/lib/czmq/zcertstore.rb
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
require_relative 'utils'
|
|
2
2
|
require_relative 'libczmq'
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
extend ::LibCZMQ
|
|
4
|
+
module CZMQ
|
|
5
|
+
class Zcertstore
|
|
6
|
+
extend ::LibCZMQ
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
czmq_constructor [:string]
|
|
9
|
+
czmq_destructor
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
end
|
|
11
|
+
czmq_function :lookup, :lookup, [:pointer, :string], :pointer
|
|
12
|
+
czmq_function :insert_zcert, :insert, [:pointer, :pointer], :void
|
|
15
13
|
end
|
|
16
14
|
end
|
data/lib/czmq/zclock.rb
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require_relative 'libczmq'
|
|
2
|
+
require_relative 'zstr'
|
|
3
|
+
|
|
4
|
+
module CZMQ
|
|
5
|
+
class Zclock
|
|
6
|
+
extend ::LibCZMQ
|
|
7
|
+
|
|
8
|
+
czmq_function :sleep, :sleep, [:int], :void
|
|
9
|
+
czmq_function :time, :time, [], :int64
|
|
10
|
+
czmq_function :mono, :mono, [], :int64
|
|
11
|
+
czmq_function :usecs, :usecs, [], :int64
|
|
12
|
+
czmq_function :timestr, :timestr, [], :pointer
|
|
13
|
+
|
|
14
|
+
def self.time_str
|
|
15
|
+
Zstr.read_string(timestr)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.test(verbose = false)
|
|
19
|
+
start = Zclock.time
|
|
20
|
+
Zclock.sleep 10
|
|
21
|
+
raise unless (Zclock.time - start) >= 10
|
|
22
|
+
start = Zclock.mono
|
|
23
|
+
usecs = Zclock.usecs
|
|
24
|
+
Zclock.sleep 10
|
|
25
|
+
raise unless (Zclock.mono - start) >= 10
|
|
26
|
+
raise unless (Zclock.usecs - usecs) >= 10000
|
|
27
|
+
puts time_str if verbose
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
data/lib/czmq/zconfig.rb
CHANGED
|
@@ -44,7 +44,7 @@ module CZMQ
|
|
|
44
44
|
def execute(&block)
|
|
45
45
|
zconfig_fct = FFI::Function.new(:int, [:pointer, :pointer, :int], blocking: true) do |zconfig_t, args, level|
|
|
46
46
|
zconfig = self.class.new_from_czmq_obj(zconfig_t, nil)
|
|
47
|
-
|
|
47
|
+
yield zconfig, level
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
execute_zconfig(zconfig_fct, nil)
|
data/lib/czmq/zframe.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require_relative 'libczmq'
|
|
2
2
|
require_relative 'utils'
|
|
3
|
+
require_relative 'zstr'
|
|
3
4
|
require_relative 'zsock'
|
|
4
5
|
|
|
5
6
|
module CZMQ
|
|
@@ -20,8 +21,10 @@ module CZMQ
|
|
|
20
21
|
czmq_function :size, :size, [:pointer], :size_t
|
|
21
22
|
czmq_function :data, :data, [:pointer], :pointer
|
|
22
23
|
czmq_function :dup_zframe, :dup, [:pointer], :pointer
|
|
23
|
-
czmq_function :
|
|
24
|
-
czmq_function :
|
|
24
|
+
czmq_function :strhex, :strhex, [:pointer], :pointer
|
|
25
|
+
czmq_function :strdup, :strdup, [:pointer], :pointer
|
|
26
|
+
czmq_function :more, :more, [:pointer], :bool
|
|
27
|
+
czmq_function :set_more, :set_more, [:pointer, :bool], :void
|
|
25
28
|
czmq_function :eq, :eq, [:pointer, :pointer], :bool
|
|
26
29
|
czmq_function :reset, :reset, [:pointer, :buffer_in, :size_t], :void
|
|
27
30
|
czmq_function :print, :print, [:pointer, :string], :void
|
|
@@ -51,8 +54,16 @@ module CZMQ
|
|
|
51
54
|
self.class.new_from_czmq_obj(dup_zframe)
|
|
52
55
|
end
|
|
53
56
|
|
|
57
|
+
def str_hex
|
|
58
|
+
Zstr.read_string(strhex)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def str_dup
|
|
62
|
+
Zstr.read_string(strdup)
|
|
63
|
+
end
|
|
64
|
+
|
|
54
65
|
def more?
|
|
55
|
-
more
|
|
66
|
+
more
|
|
56
67
|
end
|
|
57
68
|
|
|
58
69
|
def <=>(other)
|
data/lib/czmq/zlogger.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require_relative 'zsys'
|
|
2
|
+
|
|
3
|
+
module CZMQ
|
|
4
|
+
class Zlogger
|
|
5
|
+
def fatal(message)
|
|
6
|
+
Zsys.error(message)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def error(message)
|
|
10
|
+
Zsys.warning(message)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def warn(message)
|
|
14
|
+
Zsys.notice(message)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def info(message)
|
|
18
|
+
Zsys.info(message)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def debug(message)
|
|
22
|
+
Zsys.debug(message)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
data/lib/czmq/zloop.rb
CHANGED
|
@@ -17,37 +17,36 @@ module CZMQ
|
|
|
17
17
|
czmq_function :start, :start, [:pointer], :int
|
|
18
18
|
|
|
19
19
|
def initialize
|
|
20
|
-
@reader_callbacks =
|
|
21
|
-
@timer_callbacks =
|
|
20
|
+
@reader_callbacks = {}
|
|
21
|
+
@timer_callbacks = {}
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def add_reader(zsock, &block)
|
|
25
25
|
zloop_reader_fn = FFI::Function.new(:int, [:pointer, :pointer, :pointer], blocking: true) do |zloop_t, zsock_t, args|
|
|
26
|
-
|
|
27
|
-
block.call(zsocky)
|
|
26
|
+
yield Zsock.new_from_czmq_obj(zsock_t, nil)
|
|
28
27
|
end
|
|
29
28
|
|
|
30
29
|
reader(Zsock.convert(zsock), zloop_reader_fn, nil)
|
|
31
|
-
@reader_callbacks
|
|
30
|
+
@reader_callbacks[zloop_reader_fn] = zsock
|
|
32
31
|
end
|
|
33
32
|
|
|
34
33
|
def remove_reader(zsock)
|
|
35
|
-
@reader_callbacks.delete_if {|reader|
|
|
34
|
+
@reader_callbacks.delete_if {|reader, sock| sock == zsock}
|
|
36
35
|
reader_end(Zsock.convert(zsock))
|
|
37
36
|
end
|
|
38
37
|
|
|
39
38
|
def add_timer(delay, times, &block)
|
|
40
39
|
zloop_timer_fn = FFI::Function.new(:int, [:pointer, :int, :pointer], blocking: true) do |zloop_t, timer_id, args|
|
|
41
|
-
|
|
40
|
+
yield timer_id
|
|
42
41
|
end
|
|
43
42
|
|
|
44
43
|
timer_id = timer(delay, times, zloop_timer_fn, nil)
|
|
45
|
-
@timer_callbacks
|
|
44
|
+
@timer_callbacks[timer_id] = zloop_timer_fn
|
|
46
45
|
timer_id
|
|
47
46
|
end
|
|
48
47
|
|
|
49
48
|
def remove_timer(timer_id)
|
|
50
|
-
@timer_callbacks.
|
|
49
|
+
@timer_callbacks.delete(timer_id)
|
|
51
50
|
timer_end(timer_id)
|
|
52
51
|
end
|
|
53
52
|
end
|
data/lib/czmq/zmsg.rb
CHANGED
|
@@ -54,7 +54,7 @@ module CZMQ
|
|
|
54
54
|
when Zframe
|
|
55
55
|
append_zframe(data)
|
|
56
56
|
when String
|
|
57
|
-
|
|
57
|
+
add_mem(data, data.bytesize)
|
|
58
58
|
when Fixnum
|
|
59
59
|
add_zstrf(INTF, :ssize_t, data)
|
|
60
60
|
when NilClass
|
|
@@ -71,7 +71,7 @@ module CZMQ
|
|
|
71
71
|
|
|
72
72
|
add_mem(data.data, data.size)
|
|
73
73
|
elsif data.respond_to?(:to_str)
|
|
74
|
-
|
|
74
|
+
add_mem(data.to_str, data.to_str.bytesize)
|
|
75
75
|
elsif data.nil?
|
|
76
76
|
add_mem(nil, 0)
|
|
77
77
|
else
|
|
@@ -90,7 +90,7 @@ module CZMQ
|
|
|
90
90
|
when Zframe
|
|
91
91
|
prepend_zframe(data)
|
|
92
92
|
when String
|
|
93
|
-
|
|
93
|
+
push_mem(data, data.bytesize)
|
|
94
94
|
when Fixnum
|
|
95
95
|
push_zstrf(INTF, :ssize_t, data)
|
|
96
96
|
when NilClass
|
|
@@ -107,7 +107,7 @@ module CZMQ
|
|
|
107
107
|
|
|
108
108
|
push_mem(data.data, data.size)
|
|
109
109
|
elsif data.respond_to?(:to_str)
|
|
110
|
-
|
|
110
|
+
push_mem(data.to_str, data.to_str.bytesize)
|
|
111
111
|
elsif data.nil?
|
|
112
112
|
push_mem(nil, 0)
|
|
113
113
|
else
|
|
@@ -165,23 +165,5 @@ module CZMQ
|
|
|
165
165
|
def self.decode(bytes)
|
|
166
166
|
new_from_czmq_obj(decode_zmsg(bytes, bytes.bytesize))
|
|
167
167
|
end
|
|
168
|
-
|
|
169
|
-
private
|
|
170
|
-
|
|
171
|
-
def add_string(string)
|
|
172
|
-
if string.encoding == Encoding::ASCII_8BIT
|
|
173
|
-
add_mem(string, string.size)
|
|
174
|
-
else
|
|
175
|
-
add_zstr(string)
|
|
176
|
-
end
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
def push_string(string)
|
|
180
|
-
if string.encoding == Encoding::ASCII_8BIT
|
|
181
|
-
push_mem(string, string.size)
|
|
182
|
-
else
|
|
183
|
-
push_zstr(string)
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
168
|
end
|
|
187
169
|
end
|
data/lib/czmq/zpoller.rb
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
require_relative 'libczmq'
|
|
2
|
+
require_relative 'zsock'
|
|
2
3
|
|
|
3
4
|
module CZMQ
|
|
4
5
|
class Zpoller
|
|
5
6
|
extend ::LibCZMQ
|
|
6
7
|
|
|
7
|
-
czmq_constructor [:
|
|
8
|
+
czmq_constructor [:varargs]
|
|
8
9
|
czmq_destructor
|
|
9
10
|
|
|
10
11
|
czmq_function :add, :add, [:pointer, :pointer], :int
|
|
@@ -20,12 +21,11 @@ module CZMQ
|
|
|
20
21
|
|
|
21
22
|
zsocks = []
|
|
22
23
|
pollitems.each do |pollitem|
|
|
24
|
+
zsocks << :pointer
|
|
23
25
|
zsocks << Zsock.convert(pollitem)
|
|
24
26
|
end
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
other_socks = ([ :pointer ] * zsocks.size).zip(zsocks).flatten
|
|
28
|
-
new(first_sock, *other_socks, :pointer, nil)
|
|
28
|
+
new(*zsocks, :pointer, nil)
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
end
|
data/lib/czmq/zsock.rb
CHANGED
|
@@ -42,9 +42,9 @@ module CZMQ
|
|
|
42
42
|
|
|
43
43
|
[:rep, :router, :pull, :pub, :xpub].each do |meth|
|
|
44
44
|
instance_eval <<-RUBY, __FILE__, __LINE__
|
|
45
|
-
def new_#{meth.to_s}(
|
|
46
|
-
sock = new(#{meth.inspect},
|
|
47
|
-
sock.attach(
|
|
45
|
+
def new_#{meth.to_s}(endpoint)
|
|
46
|
+
sock = new(#{meth.inspect}, endpoint)
|
|
47
|
+
sock.attach(endpoint, true)
|
|
48
48
|
sock
|
|
49
49
|
end
|
|
50
50
|
RUBY
|
|
@@ -52,20 +52,18 @@ module CZMQ
|
|
|
52
52
|
|
|
53
53
|
[:req, :dealer, :push, :xsub, :pair, :stream].each do |meth|
|
|
54
54
|
instance_eval <<-RUBY, __FILE__, __LINE__
|
|
55
|
-
def new_#{meth.to_s}(
|
|
56
|
-
sock = new(#{meth.inspect},
|
|
57
|
-
sock.attach(
|
|
55
|
+
def new_#{meth.to_s}(endpoint)
|
|
56
|
+
sock = new(#{meth.inspect}, endpoint)
|
|
57
|
+
sock.attach(endpoint, false)
|
|
58
58
|
sock
|
|
59
59
|
end
|
|
60
60
|
RUBY
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
-
def self.new_sub(
|
|
64
|
-
sock = new(:sub,
|
|
65
|
-
sock.attach(
|
|
66
|
-
|
|
67
|
-
sock.set_subscribe(subscription)
|
|
68
|
-
end
|
|
63
|
+
def self.new_sub(endpoint, subscribe = nil)
|
|
64
|
+
sock = new(:sub, endpoint)
|
|
65
|
+
sock.attach(endpoint, false)
|
|
66
|
+
sock.set_subscribe(subscribe) if subscribe
|
|
69
67
|
sock
|
|
70
68
|
end
|
|
71
69
|
|
data/lib/czmq/zstr.rb
CHANGED
|
@@ -15,15 +15,11 @@ module CZMQ
|
|
|
15
15
|
|
|
16
16
|
class << self
|
|
17
17
|
def read_string(str_ptr)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
str
|
|
24
|
-
else
|
|
25
|
-
fail ArgumentError, "#{str_ptr.class} is not a FFI::Pointer", caller
|
|
26
|
-
end
|
|
18
|
+
str = str_ptr.get_string(0)
|
|
19
|
+
free_ptr = FFI::MemoryPointer.new(:pointer)
|
|
20
|
+
free_ptr.write_pointer(str_ptr)
|
|
21
|
+
free(free_ptr)
|
|
22
|
+
str
|
|
27
23
|
end
|
|
28
24
|
|
|
29
25
|
def recv(socket)
|
|
@@ -31,7 +27,7 @@ module CZMQ
|
|
|
31
27
|
end
|
|
32
28
|
|
|
33
29
|
def sendx(socket, string, *strings)
|
|
34
|
-
if strings.size
|
|
30
|
+
if strings.size.zero?
|
|
35
31
|
fail ArgumentError, "Wrong number of Arguments, (2 for 3..n)", caller
|
|
36
32
|
end
|
|
37
33
|
|
|
@@ -55,7 +51,7 @@ module CZMQ
|
|
|
55
51
|
|
|
56
52
|
strings = []
|
|
57
53
|
buffers.select {|buffer| buffer != :buffer_out}.each do |buffer|
|
|
58
|
-
strings << buffer.read_pointer.
|
|
54
|
+
strings << buffer.read_pointer.get_string(0)
|
|
59
55
|
free(buffer)
|
|
60
56
|
end
|
|
61
57
|
strings
|
data/lib/czmq/zsys.rb
CHANGED
|
@@ -16,7 +16,7 @@ module CZMQ
|
|
|
16
16
|
czmq_function :set_rcvhwm, :set_rcvhwm, [:size_t], :void
|
|
17
17
|
czmq_function :set_pipehwm, :set_pipehwm, [:size_t], :void
|
|
18
18
|
czmq_function :pipehwm, :pipehwm, [], :size_t
|
|
19
|
-
czmq_function :set_ipv6, :set_ipv6, [:
|
|
19
|
+
czmq_function :set_ipv6, :set_ipv6, [:bool], :void
|
|
20
20
|
czmq_function :set_interface, :set_interface, [:string], :void
|
|
21
21
|
czmq_function :set_logident, :set_logident, [:string], :void
|
|
22
22
|
czmq_function :set_logstream, :set_logstream, [:pointer], :void
|
|
@@ -27,15 +27,16 @@ module CZMQ
|
|
|
27
27
|
czmq_function :notice, :notice, [:string], :void
|
|
28
28
|
czmq_function :info, :info, [:string], :void
|
|
29
29
|
czmq_function :debug, :debug, [:string], :void
|
|
30
|
+
czmq_function :has_curve, :has_curve, [], :bool
|
|
30
31
|
|
|
31
|
-
attach_variable :interrupted, :zsys_interrupted, :
|
|
32
|
-
attach_variable :zctx_interrupted, :zctx_interrupted, :
|
|
32
|
+
attach_variable :interrupted, :zsys_interrupted, :bool
|
|
33
|
+
attach_variable :zctx_interrupted, :zctx_interrupted, :bool
|
|
34
|
+
attach_variable :allocs, :zsys_allocs, :uint64
|
|
33
35
|
|
|
34
36
|
handler_set(nil)
|
|
35
|
-
set_ipv6(1)
|
|
36
37
|
|
|
37
38
|
at_exit do
|
|
38
|
-
zctx_interrupted = interrupted =
|
|
39
|
+
zctx_interrupted = interrupted = true
|
|
39
40
|
end
|
|
40
41
|
end
|
|
41
42
|
end
|
data/lib/czmq.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require_relative 'czmq/utils'
|
|
2
2
|
require_relative 'czmq/libczmq'
|
|
3
3
|
require_relative 'czmq/zsys'
|
|
4
|
+
require_relative 'czmq/zlogger'
|
|
4
5
|
require_relative 'czmq/zframe'
|
|
5
6
|
require_relative 'czmq/zmsg'
|
|
6
7
|
require_relative 'czmq/zsock'
|
|
@@ -12,3 +13,4 @@ require_relative 'czmq/zcertstore'
|
|
|
12
13
|
require_relative 'czmq/ziflist'
|
|
13
14
|
require_relative 'czmq/zconfig'
|
|
14
15
|
require_relative 'czmq/zstr'
|
|
16
|
+
require_relative 'czmq/zclock'
|
data/lib/ffi-czmq.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require_relative 'czmq/utils'
|
|
2
2
|
require_relative 'czmq/libczmq'
|
|
3
3
|
require_relative 'czmq/zsys'
|
|
4
|
+
require_relative 'czmq/zlogger'
|
|
4
5
|
require_relative 'czmq/zframe'
|
|
5
6
|
require_relative 'czmq/zmsg'
|
|
6
7
|
require_relative 'czmq/zsock'
|
|
@@ -12,3 +13,4 @@ require_relative 'czmq/zcertstore'
|
|
|
12
13
|
require_relative 'czmq/ziflist'
|
|
13
14
|
require_relative 'czmq/zconfig'
|
|
14
15
|
require_relative 'czmq/zstr'
|
|
16
|
+
require_relative 'czmq/zclock'
|
data/lib/libzmq.rb
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'ffi'
|
|
2
|
+
|
|
3
|
+
module Libzmq
|
|
4
|
+
extend FFI::Library
|
|
5
|
+
ffi_lib :libzmq, FFI::Library::LIBC
|
|
6
|
+
|
|
7
|
+
POLLIN = 1
|
|
8
|
+
POLLOUT = 2
|
|
9
|
+
POLLERR = 4
|
|
10
|
+
POLLPRI = 8
|
|
11
|
+
|
|
12
|
+
class PollItem < FFI::Struct
|
|
13
|
+
FD_TYPE = (FFI::Platform.windows? && FFI::Platform::ADDRESS_SIZE == 64) ? :uint64 : :int
|
|
14
|
+
|
|
15
|
+
layout :socket, :pointer,
|
|
16
|
+
:fd, FD_TYPE,
|
|
17
|
+
:events, :short,
|
|
18
|
+
:revents, :short
|
|
19
|
+
|
|
20
|
+
def readable?
|
|
21
|
+
(self[:revents] & POLLIN) > 0
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def writable?
|
|
25
|
+
(self[:revents] & POLLOUT) > 0
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def error?
|
|
29
|
+
(self[:revents] & POLLERR) > 0
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
attach_function :memmove, [:pointer, :pointer, :size_t], :pointer
|
|
34
|
+
attach_function :poll, :zmq_poll, [:pointer, :int, :long], :int, blocking: true
|
|
35
|
+
|
|
36
|
+
class PollItems < Array
|
|
37
|
+
def to_ptr
|
|
38
|
+
items_pointer = FFI::MemoryPointer.new(PollItem, size, true)
|
|
39
|
+
offset = 0
|
|
40
|
+
each do |item|
|
|
41
|
+
Libzmq.memmove(items_pointer + offset, item, item.size)
|
|
42
|
+
offset += item.size
|
|
43
|
+
end
|
|
44
|
+
items_pointer
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ffi-czmq
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.1.1.pre
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hendrik
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-
|
|
12
|
+
date: 2014-11-15 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: ffi
|
|
@@ -17,28 +17,28 @@ dependencies:
|
|
|
17
17
|
requirements:
|
|
18
18
|
- - ">="
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
|
-
version: 1.9.
|
|
20
|
+
version: 1.9.6
|
|
21
21
|
type: :runtime
|
|
22
22
|
prerelease: false
|
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
24
|
requirements:
|
|
25
25
|
- - ">="
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
|
-
version: 1.9.
|
|
27
|
+
version: 1.9.6
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
|
-
name:
|
|
29
|
+
name: rspec
|
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
|
31
31
|
requirements:
|
|
32
32
|
- - ">="
|
|
33
33
|
- !ruby/object:Gem::Version
|
|
34
|
-
version:
|
|
34
|
+
version: 3.1.0
|
|
35
35
|
type: :development
|
|
36
36
|
prerelease: false
|
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
38
|
requirements:
|
|
39
39
|
- - ">="
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
|
-
version:
|
|
41
|
+
version: 3.1.0
|
|
42
42
|
description: czmq ffi wrapper
|
|
43
43
|
email:
|
|
44
44
|
executables: []
|
|
@@ -55,9 +55,11 @@ files:
|
|
|
55
55
|
- lib/czmq/zactor.rb
|
|
56
56
|
- lib/czmq/zcert.rb
|
|
57
57
|
- lib/czmq/zcertstore.rb
|
|
58
|
+
- lib/czmq/zclock.rb
|
|
58
59
|
- lib/czmq/zconfig.rb
|
|
59
60
|
- lib/czmq/zframe.rb
|
|
60
61
|
- lib/czmq/ziflist.rb
|
|
62
|
+
- lib/czmq/zlogger.rb
|
|
61
63
|
- lib/czmq/zloop.rb
|
|
62
64
|
- lib/czmq/zmsg.rb
|
|
63
65
|
- lib/czmq/zpoller.rb
|
|
@@ -65,6 +67,7 @@ files:
|
|
|
65
67
|
- lib/czmq/zstr.rb
|
|
66
68
|
- lib/czmq/zsys.rb
|
|
67
69
|
- lib/ffi-czmq.rb
|
|
70
|
+
- lib/libzmq.rb
|
|
68
71
|
homepage: https://github.com/Asmod4n/ruby-ffi-czmq
|
|
69
72
|
licenses:
|
|
70
73
|
- Apache-2.0
|