cztop 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +16 -0
  3. data/README.md +61 -56
  4. data/cztop.gemspec +2 -4
  5. data/lib/cztop/actor.rb +26 -22
  6. data/lib/cztop/certificate.rb +19 -11
  7. data/lib/cztop/message.rb +5 -1
  8. data/lib/cztop/send_receive_methods.rb +106 -2
  9. data/lib/cztop/socket/types.rb +18 -0
  10. data/lib/cztop/version.rb +1 -1
  11. data/lib/cztop/zsock_options.rb +16 -2
  12. metadata +3 -66
  13. data/.github/workflows/coverage.yml +0 -20
  14. data/.github/workflows/draft_api.yml +0 -27
  15. data/.github/workflows/stable_api.yml +0 -26
  16. data/.gitignore +0 -10
  17. data/.projections.json +0 -4
  18. data/.rspec +0 -2
  19. data/.rubocop.yml +0 -175
  20. data/.yardopts +0 -1
  21. data/Rakefile +0 -6
  22. data/ci/install-libczmq +0 -22
  23. data/ci/install-libzmq +0 -22
  24. data/examples/async/.gitignore +0 -1
  25. data/examples/async/Gemfile +0 -5
  26. data/examples/async/README.md +0 -1
  27. data/examples/async/async.rb +0 -35
  28. data/examples/ruby_actor/actor.rb +0 -100
  29. data/examples/simple_req_rep/rep.rb +0 -12
  30. data/examples/simple_req_rep/req.rb +0 -35
  31. data/examples/taxi_system/.gitignore +0 -2
  32. data/examples/taxi_system/Makefile +0 -2
  33. data/examples/taxi_system/README.gsl +0 -115
  34. data/examples/taxi_system/README.md +0 -276
  35. data/examples/taxi_system/broker.rb +0 -97
  36. data/examples/taxi_system/client.rb +0 -34
  37. data/examples/taxi_system/generate_keys.rb +0 -24
  38. data/examples/taxi_system/start_broker.sh +0 -2
  39. data/examples/taxi_system/start_clients.sh +0 -11
  40. data/examples/weather_pub_sub/pub.rb +0 -24
  41. data/examples/weather_pub_sub/sub.rb +0 -33
  42. data/lib/cztop/async.rb +0 -124
  43. data/perf/README.md +0 -80
  44. data/perf/inproc_lat.rb +0 -49
  45. data/perf/inproc_thru.rb +0 -42
  46. data/perf/local_lat.rb +0 -35
  47. data/perf/remote_lat.rb +0 -26
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cztop
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrik Wenger
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-04 00:00:00.000000000 Z
11
+ date: 2024-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: czmq-ffi-gen
@@ -122,20 +122,6 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: rubocop
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: 1.36.0
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 1.36.0
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: async
141
127
  requirement: !ruby/object:Gem::Requirement
@@ -150,20 +136,6 @@ dependencies:
150
136
  - - ">="
151
137
  - !ruby/object:Gem::Version
152
138
  version: 2.0.1
153
- - !ruby/object:Gem::Dependency
154
- name: async-io
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
139
  description: CZMQ binding based on the generated low-level FFI bindings of CZMQ
168
140
  email:
169
141
  - paddor@gmail.com
@@ -173,48 +145,18 @@ executables:
173
145
  extensions: []
174
146
  extra_rdoc_files: []
175
147
  files:
176
- - ".github/workflows/coverage.yml"
177
- - ".github/workflows/draft_api.yml"
178
- - ".github/workflows/stable_api.yml"
179
- - ".gitignore"
180
- - ".projections.json"
181
- - ".rspec"
182
- - ".rubocop.yml"
183
- - ".yardopts"
184
148
  - AUTHORS
185
149
  - CHANGES.md
186
150
  - Gemfile
187
151
  - LICENSE
188
152
  - README.md
189
- - Rakefile
190
153
  - bin/console
191
154
  - bin/setup
192
- - ci/install-libczmq
193
- - ci/install-libzmq
194
155
  - cztop.gemspec
195
- - examples/async/.gitignore
196
- - examples/async/Gemfile
197
- - examples/async/README.md
198
- - examples/async/async.rb
199
- - examples/ruby_actor/actor.rb
200
- - examples/simple_req_rep/rep.rb
201
- - examples/simple_req_rep/req.rb
202
- - examples/taxi_system/.gitignore
203
- - examples/taxi_system/Makefile
204
- - examples/taxi_system/README.gsl
205
- - examples/taxi_system/README.md
206
- - examples/taxi_system/broker.rb
207
- - examples/taxi_system/client.rb
208
- - examples/taxi_system/generate_keys.rb
209
- - examples/taxi_system/start_broker.sh
210
- - examples/taxi_system/start_clients.sh
211
- - examples/weather_pub_sub/pub.rb
212
- - examples/weather_pub_sub/sub.rb
213
156
  - exe/z85decode
214
157
  - exe/z85encode
215
158
  - lib/cztop.rb
216
159
  - lib/cztop/actor.rb
217
- - lib/cztop/async.rb
218
160
  - lib/cztop/authenticator.rb
219
161
  - lib/cztop/beacon.rb
220
162
  - lib/cztop/cert_store.rb
@@ -244,11 +186,6 @@ files:
244
186
  - lib/cztop/z85/pipe.rb
245
187
  - lib/cztop/zap.rb
246
188
  - lib/cztop/zsock_options.rb
247
- - perf/README.md
248
- - perf/inproc_lat.rb
249
- - perf/inproc_thru.rb
250
- - perf/local_lat.rb
251
- - perf/remote_lat.rb
252
189
  homepage: https://rubygems.org/gems/cztop
253
190
  licenses:
254
191
  - ISC
@@ -264,7 +201,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
264
201
  requirements:
265
202
  - - ">="
266
203
  - !ruby/object:Gem::Version
267
- version: 3.0.0
204
+ version: 3.2.0
268
205
  required_rubygems_version: !ruby/object:Gem::Requirement
269
206
  requirements:
270
207
  - - ">="
@@ -1,20 +0,0 @@
1
- name: Coverage
2
-
3
- on: [push,pull_request]
4
-
5
- jobs:
6
- build:
7
- runs-on: ubuntu-22.04
8
- steps:
9
- - uses: actions/checkout@v4
10
- - name: Set up Ruby
11
- uses: ruby/setup-ruby@v1
12
- with:
13
- ruby-version: 3.3
14
- - name: Install CZMQ
15
- run: sudo apt-get install libczmq-dev
16
- - name: Run the default task
17
- run: |
18
- gem install bundler
19
- bundle install
20
- env REPORT_COVERAGE=true bundle exec rake
@@ -1,27 +0,0 @@
1
- name: DRAFT API
2
-
3
- on: [push,pull_request]
4
-
5
- jobs:
6
- build:
7
- runs-on: ubuntu-22.04
8
- timeout-minutes: 15
9
- steps:
10
- - uses: actions/checkout@v4
11
- - name: Set up Ruby
12
- uses: ruby/setup-ruby@v1
13
- with:
14
- ruby-version: '3.3'
15
- - name: Install ZMQ and CZMQ
16
- run: |
17
- export PKG_CONFIG_PATH=$HOME/lib/pkgconfig # custom libs (for linking)
18
- env
19
- env ZMQ_VERSION=HEAD ci/install-libzmq
20
- env CZMQ_VERSION=HEAD ci/install-libczmq
21
- - name: Run the default task
22
- run: |
23
- export LD_LIBRARY_PATH=$HOME/lib # custom libs (for execution)
24
- env
25
- gem install bundler
26
- bundle install
27
- bundle exec rake
@@ -1,26 +0,0 @@
1
- name: STABLE API
2
-
3
- on: [push,pull_request]
4
-
5
- jobs:
6
- build:
7
- runs-on: ubuntu-22.04
8
- strategy:
9
- matrix:
10
- ruby:
11
- - '3.1'
12
- - '3.2'
13
- - '3.3'
14
- steps:
15
- - uses: actions/checkout@v4
16
- - name: Set up Ruby ${{ matrix.ruby }}
17
- uses: ruby/setup-ruby@v1
18
- with:
19
- ruby-version: ${{ matrix.ruby }}
20
- - name: Install CZMQ
21
- run: sudo apt-get install libczmq-dev
22
- - name: Run the default task
23
- run: |
24
- gem install bundler
25
- bundle install
26
- bundle exec rake
data/.gitignore DELETED
@@ -1,10 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- /*.vimsession
data/.projections.json DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "lib/*.rb": { "alternate": "spec/{}_spec.rb" },
3
- "spec/*_spec.rb": { "alternate": "lib/{}.rb", "dispatch": "bundle exec rspec -ff {file}" }
4
- }
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
data/.rubocop.yml DELETED
@@ -1,175 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 2.7
3
- NewCops: enable
4
- Layout/EmptyLineAfterMagicComment:
5
- Enabled: true
6
- Layout/ExtraSpacing:
7
- AllowForAlignment: true
8
- Layout/EmptyLines:
9
- Enabled: false
10
- Layout/EmptyLineBetweenDefs:
11
- NumberOfEmptyLines: 2
12
- Layout/MultilineOperationIndentation:
13
- Enabled: true
14
- Gemspec/DeprecatedAttributeAssignment: # new in 1.30
15
- Enabled: true
16
- Gemspec/RequireMFA: # new in 1.23
17
- Enabled: true
18
- Layout/LineContinuationLeadingSpace: # new in 1.31
19
- Enabled: true
20
- Layout/LineContinuationSpacing: # new in 1.31
21
- Enabled: true
22
- Layout/LineEndStringConcatenationIndentation: # new in 1.18
23
- Enabled: true
24
- Layout/SpaceBeforeBrackets: # new in 1.7
25
- Enabled: true
26
- Lint/AmbiguousAssignment: # new in 1.7
27
- Enabled: true
28
- Lint/AmbiguousOperatorPrecedence: # new in 1.21
29
- Enabled: false
30
- Lint/AmbiguousRange: # new in 1.19
31
- Enabled: true
32
- Lint/ConstantOverwrittenInRescue: # new in 1.31
33
- Enabled: true
34
- Lint/DeprecatedConstants: # new in 1.8
35
- Enabled: true
36
- Lint/DuplicateBranch: # new in 1.3
37
- Enabled: true
38
- Lint/DuplicateRegexpCharacterClassElement: # new in 1.1
39
- Enabled: true
40
- Lint/EmptyBlock: # new in 1.1
41
- Enabled: true
42
- Lint/EmptyClass: # new in 1.3
43
- Enabled: true
44
- Lint/EmptyInPattern: # new in 1.16
45
- Enabled: true
46
- Lint/IncompatibleIoSelectWithFiberScheduler: # new in 1.21
47
- Enabled: true
48
- Lint/LambdaWithoutLiteralBlock: # new in 1.8
49
- Enabled: true
50
- Lint/NoReturnInBeginEndBlocks: # new in 1.2
51
- Enabled: true
52
- Lint/NonAtomicFileOperation: # new in 1.31
53
- Enabled: true
54
- Lint/NumberedParameterAssignment: # new in 1.9
55
- Enabled: true
56
- Lint/OrAssignmentToConstant: # new in 1.9
57
- Enabled: true
58
- Lint/RedundantDirGlobSort: # new in 1.8
59
- Enabled: true
60
- Lint/RefinementImportMethods: # new in 1.27
61
- Enabled: true
62
- Lint/RequireRangeParentheses: # new in 1.32
63
- Enabled: true
64
- Lint/RequireRelativeSelfPath: # new in 1.22
65
- Enabled: true
66
- Lint/SymbolConversion: # new in 1.9
67
- Enabled: true
68
- Lint/ToEnumArguments: # new in 1.1
69
- Enabled: true
70
- Lint/TripleQuotes: # new in 1.9
71
- Enabled: true
72
- Lint/UnexpectedBlockArity: # new in 1.5
73
- Enabled: true
74
- Lint/UnmodifiedReduceAccumulator: # new in 1.1
75
- Enabled: true
76
- Lint/UselessRuby2Keywords: # new in 1.23
77
- Enabled: true
78
- Naming/BlockForwarding: # new in 1.24
79
- Enabled: true
80
- Security/CompoundHash: # new in 1.28
81
- Enabled: true
82
- Security/IoMethods: # new in 1.22
83
- Enabled: true
84
- Style/AndOr:
85
- EnforcedStyle: conditionals
86
- Style/InfiniteLoop:
87
- Enabled: false
88
- Style/ArgumentsForwarding: # new in 1.1
89
- Enabled: true
90
- Style/CollectionCompact: # new in 1.2
91
- Enabled: true
92
- Style/DocumentDynamicEvalDefinition: # new in 1.1
93
- Enabled: true
94
- Style/EmptyHeredoc: # new in 1.32
95
- Enabled: true
96
- Style/EndlessMethod: # new in 1.8
97
- Enabled: true
98
- Style/EnvHome: # new in 1.29
99
- Enabled: true
100
- Style/FetchEnvVar: # new in 1.28
101
- Enabled: true
102
- Style/FileRead: # new in 1.24
103
- Enabled: true
104
- Style/FileWrite: # new in 1.24
105
- Enabled: true
106
- Style/FrozenStringLiteralComment:
107
- EnforcedStyle: always_true
108
- Style/HashConversion: # new in 1.10
109
- Enabled: true
110
- Style/HashExcept: # new in 1.7
111
- Enabled: true
112
- Style/IfWithBooleanLiteralBranches: # new in 1.9
113
- Enabled: true
114
- Style/InPatternThen: # new in 1.16
115
- Enabled: true
116
- Style/MagicCommentFormat: # new in 1.35
117
- Enabled: true
118
- Style/MapCompactWithConditionalBlock: # new in 1.30
119
- Enabled: true
120
- Style/MapToHash: # new in 1.24
121
- Enabled: true
122
- Style/MultilineInPatternThen: # new in 1.16
123
- Enabled: true
124
- Style/NegatedIfElseCondition: # new in 1.2
125
- Enabled: true
126
- Style/NestedFileDirname: # new in 1.26
127
- Enabled: true
128
- Style/NilLambda: # new in 1.3
129
- Enabled: true
130
- Style/NumberedParameters: # new in 1.22
131
- Enabled: true
132
- Style/NumberedParametersLimit: # new in 1.22
133
- Enabled: true
134
- Style/ObjectThen: # new in 1.28
135
- Enabled: true
136
- Style/OpenStructUse: # new in 1.23
137
- Enabled: true
138
- Style/QuotedSymbols: # new in 1.16
139
- Enabled: true
140
- Style/RedundantArgument: # new in 1.4
141
- Enabled: true
142
- Style/RedundantInitialize: # new in 1.27
143
- Enabled: true
144
- Style/RedundantSelfAssignmentBranch: # new in 1.19
145
- Enabled: true
146
- Style/SelectByRegexp: # new in 1.22
147
- Enabled: true
148
- Style/StringChars: # new in 1.12
149
- Enabled: true
150
- Style/SwapValues: # new in 1.1
151
- Enabled: true
152
- Style/ClassAndModuleChildren:
153
- Enabled: false
154
- Style/StringConcatenation:
155
- Enabled: false
156
- Style/RescueModifier:
157
- Enabled: false
158
- Style/YodaCondition:
159
- Enabled: false
160
- Lint/AmbiguousRegexpLiteral:
161
- Enabled: false
162
- Style/WordArray:
163
- Enabled: false
164
- Style/Semicolon:
165
- Enabled: false
166
- Naming/MethodName:
167
- Enabled: false
168
- Style/EmptyMethod:
169
- Enabled: false
170
- Layout/EmptyLinesAroundClassBody:
171
- Enabled: true
172
- EnforcedStyle: empty_lines_except_namespace
173
- Layout/EmptyLinesAroundModuleBody:
174
- Enabled: true
175
- EnforcedStyle: empty_lines_except_namespace
data/.yardopts DELETED
@@ -1 +0,0 @@
1
- --private lib/**/*.rb - README.md LICENSE
data/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec
data/ci/install-libczmq DELETED
@@ -1,22 +0,0 @@
1
- #!/bin/sh -x
2
- # vim: ft=sh
3
- set -e
4
- mkdir -p ~/src
5
- cd ~/src
6
-
7
- case "$CZMQ_VERSION" in
8
- HEAD)
9
- echo "Using HEAD and compiling with --enable-drafts ..."
10
- git clone https://github.com/zeromq/czmq czmq
11
- CONFIGURE_OPTS="--enable-drafts=yes"
12
- ;;
13
- *)
14
- echo '$CZMQ_VERSION not set.'
15
- exit 1
16
- esac
17
-
18
- cd czmq
19
- ./autogen.sh
20
- ./configure --prefix=$HOME $CONFIGURE_OPTS
21
- make
22
- make install
data/ci/install-libzmq DELETED
@@ -1,22 +0,0 @@
1
- #!/bin/sh -x
2
- # vim: ft=sh
3
- set -e
4
- mkdir -p ~/src
5
- cd ~/src
6
-
7
- case "$ZMQ_VERSION" in
8
- HEAD)
9
- echo "Using HEAD and compiling with --enable-drafts ..."
10
- git clone https://github.com/zeromq/libzmq libzmq
11
- CONFIGURE_OPTS="--enable-drafts=yes"
12
- ;;
13
- *)
14
- echo '$ZMQ_VERSION not set.'
15
- exit 1
16
- esac
17
-
18
- cd libzmq
19
- ./autogen.sh
20
- ./configure --prefix=$HOME $CONFIGURE_OPTS
21
- make
22
- make install
@@ -1 +0,0 @@
1
- /Gemfile.lock
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'async'
4
- gem 'cztop', path: '../../'
5
- gem 'async-io'
@@ -1 +0,0 @@
1
- Run: `bundle exec ./async.rb`
@@ -1,35 +0,0 @@
1
- #! /usr/bin/env ruby
2
-
3
- require 'cztop/async'
4
-
5
- Async do |task|
6
- task.async do |t|
7
- socket = CZTop::Socket::REP.new("inproc://req_rep_example")
8
- io = Async::IO.try_convert socket
9
-
10
- socket.options.rcvtimeo = 50 # ms
11
-
12
- loop do
13
- msg = io.receive
14
- puts "<<< #{msg.to_a.inspect}"
15
- io << msg.to_a.map(&:upcase)
16
- rescue IO::TimeoutError
17
- break
18
- end
19
-
20
- puts "REP done."
21
- end
22
-
23
- task.async do
24
- socket = CZTop::Socket::REQ.new("inproc://req_rep_example")
25
- io = Async::IO.try_convert socket
26
-
27
- 10.times do |i|
28
- io << "foobar ##{i}"
29
- msg = io.receive
30
- puts ">>> #{msg.to_a.inspect}"
31
- end
32
-
33
- puts "REQ done."
34
- end
35
- end
@@ -1,100 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'cztop'
3
-
4
- ##
5
- # This example shows how to create a simple actor using a Ruby block.
6
- # Of course it also supports the CZMQ-native way, passing a pointer to
7
- # a C function. That's how CZTop::Beacon, CZTop::Authenticator, ... are
8
- # implemented.
9
- #
10
-
11
- counter = 0
12
- actor = CZTop::Actor.new do |msg, pipe|
13
- # This block is called once for every received message.
14
-
15
- case command = msg[0]
16
- when "UPCASE"
17
- # Upcase second message frame and send back.
18
- word = msg[1]
19
- puts ">>> Actor converts #{word.inspect} to uppercase."
20
- pipe << word.upcase
21
- when "COUNT"
22
- # Count up.
23
- counter += 1
24
- puts ">>> Actor has incremented counter to: #{counter}"
25
- when "PRODUCE"
26
- # Produce multiple messages.
27
- num = msg[1].to_i
28
- puts ">>> Actor produces #{num} messages."
29
- num.times { |i| pipe << "FOO #{i+1}/#{num}" }
30
- else
31
- # crashes actor #=> Actor#dead? and Actor#crashed? will return true
32
- # also, Actor#exception will return this exception.
33
- raise "invalid command: #{command}"
34
- end
35
- end
36
- puts ">>> Actor created."
37
-
38
- ##
39
- # Let actor count.
40
- #
41
- # Actor#<< is thread-safe.
42
- #
43
- actor << "COUNT"
44
- actor << "COUNT"
45
- actor << "COUNT"
46
- actor << "COUNT"
47
- actor << "COUNT"
48
- actor << "COUNT"
49
-
50
-
51
- ##
52
- # Request a response from actor.
53
- #
54
- # Actor#request is thread-safe and ensures that the right response gets
55
- # returned.
56
- #
57
- puts actor.request(["UPCASE", "foobar"]).inspect
58
- #=> #<CZTop::Message:0x7f98c8d96000 frames=1 content_size=6 content=["FOOBAR"]>
59
-
60
-
61
- ##
62
- # Let actor produce some messages.
63
- #
64
- # Actor#receive is thread-safe, but doesn't guarantee any particular order.
65
- #
66
- actor << %w[ PRODUCE 5 ]
67
- puts actor.receive[0] #1
68
- puts actor.receive[0] #2
69
- puts actor.receive[0] #3
70
- puts actor.receive[0] #4
71
- puts actor.receive[0] #5
72
-
73
- ##
74
- # Let actor die.
75
- #
76
- # Blocks until dead.
77
- actor.terminate
78
- actor.dead? #=> true
79
- actor.crashed? #=> false
80
- actor.exception #=> nil, because it didn't crash
81
-
82
-
83
- __END__
84
- Example output:
85
-
86
- >>> Actor created.
87
- >>> Actor has incremented counter to: 1
88
- >>> Actor has incremented counter to: 2
89
- >>> Actor has incremented counter to: 3
90
- >>> Actor has incremented counter to: 4
91
- >>> Actor has incremented counter to: 5
92
- >>> Actor has incremented counter to: 6
93
- >>> Actor converts "foobar" to uppercase.
94
- #<CZTop::Message:0x7f81c55bdca0 frames=1 content_size=6 content=["FOOBAR"]>
95
- >>> Actor produces 5 messages.
96
- FOO 1/5
97
- FOO 2/5
98
- FOO 3/5
99
- FOO 4/5
100
- FOO 5/5
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'cztop'
3
-
4
- # create and bind socket
5
- socket = CZTop::Socket::REP.new("ipc:///tmp/req_rep_example")
6
- puts "<<< Socket bound to #{socket.last_endpoint.inspect}"
7
-
8
- # Simply echo every message, with every frame String#upcase'd.
9
- while msg = socket.receive
10
- puts "<<< #{msg.to_a.inspect}"
11
- socket << msg.to_a.map(&:upcase)
12
- end
@@ -1,35 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'cztop'
3
-
4
- # connect
5
- socket = CZTop::Socket::REQ.new("ipc:///tmp/req_rep_example")
6
- puts ">>> Socket connected."
7
-
8
- # simple string
9
- socket << "foobar"
10
- msg = socket.receive
11
- puts ">>> #{msg.to_a.inspect}"
12
-
13
- # multi frame message as array
14
- socket << %w[foo bar baz]
15
- msg = socket.receive
16
- puts ">>> #{msg.to_a.inspect}"
17
-
18
- # manually instantiating a Message
19
- msg = CZTop::Message.new("bla")
20
- msg << "another frame" # append a frame
21
- socket << msg
22
- msg = socket.receive
23
- puts ">>> #{msg.to_a.inspect}"
24
-
25
- ##
26
- # This will send 20 additional messages:
27
- #
28
- # ./req.rb 20
29
- #
30
- if ARGV.first
31
- ARGV.first.to_i.times do
32
- socket << ["fooooooooo", "baaaaaar"]
33
- puts ">>> " + socket.receive.to_a.inspect
34
- end
35
- end
@@ -1,2 +0,0 @@
1
- secret_keys/
2
- public_keys/
@@ -1,2 +0,0 @@
1
- README.md: README.gsl generate_keys.rb broker.rb client.rb start_broker.sh start_clients.sh
2
- gsl README