rsmp 0.48.4 → 0.51.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/CHANGELOG.md +6 -0
- data/Gemfile.lock +19 -20
- data/README.md +27 -3
- data/Rakefile +3 -1
- data/documentation/cli.md +79 -4
- data/documentation/collecting_message.md +90 -170
- data/documentation/message_distribution.md +17 -3
- data/documentation/tasks.md +65 -117
- data/lib/rsmp/cli.rb +93 -5
- data/lib/rsmp/collect/collector.rb +117 -134
- data/lib/rsmp/collect/distributor.rb +16 -3
- data/lib/rsmp/collect/queue.rb +14 -6
- data/lib/rsmp/collect/receiver.rb +1 -1
- data/lib/rsmp/collect/state_collector.rb +11 -2
- data/lib/rsmp/collection.rb +12 -0
- data/lib/rsmp/completion.rb +49 -0
- data/lib/rsmp/component/component_base.rb +3 -3
- data/lib/rsmp/convert/export/json_schema/index.rb +8 -3
- data/lib/rsmp/convert/import/yaml.rb +12 -8
- data/lib/rsmp/delivery.rb +18 -0
- data/lib/rsmp/event.rb +19 -0
- data/lib/rsmp/event_source.rb +36 -0
- data/lib/rsmp/exchange.rb +10 -0
- data/lib/rsmp/failure.rb +23 -0
- data/lib/rsmp/helpers/error.rb +14 -23
- data/lib/rsmp/message.rb +9 -7
- data/lib/rsmp/node/node.rb +3 -21
- data/lib/rsmp/node/site/connections.rb +4 -9
- data/lib/rsmp/node/site/site.rb +31 -16
- data/lib/rsmp/node/supervisor/modules/connection.rb +19 -5
- data/lib/rsmp/node/supervisor/modules/sites.rb +16 -5
- data/lib/rsmp/node/supervisor/supervisor.rb +13 -14
- data/lib/rsmp/node/task.rb +59 -53
- data/lib/rsmp/proxy/modules/acknowledgements.rb +22 -9
- data/lib/rsmp/proxy/modules/lifecycle.rb +134 -0
- data/lib/rsmp/proxy/modules/receive.rb +109 -66
- data/lib/rsmp/proxy/modules/send.rb +109 -51
- data/lib/rsmp/proxy/modules/state.rb +15 -5
- data/lib/rsmp/proxy/modules/tasks.rb +96 -70
- data/lib/rsmp/proxy/modules/versions.rb +8 -8
- data/lib/rsmp/proxy/modules/watchdogs.rb +15 -2
- data/lib/rsmp/proxy/proxy.rb +4 -66
- data/lib/rsmp/proxy/site/connection.rb +27 -22
- data/lib/rsmp/proxy/site/modules/aggregated_status.rb +18 -8
- data/lib/rsmp/proxy/site/modules/alarms.rb +45 -38
- data/lib/rsmp/proxy/site/modules/commands.rb +18 -8
- data/lib/rsmp/proxy/site/modules/status.rb +44 -19
- data/lib/rsmp/proxy/site/site_proxy.rb +12 -10
- data/lib/rsmp/proxy/supervisor/modules/aggregated_status.rb +1 -1
- data/lib/rsmp/proxy/supervisor/modules/alarms.rb +1 -1
- data/lib/rsmp/proxy/supervisor/modules/commands.rb +1 -1
- data/lib/rsmp/proxy/supervisor/modules/message_buffer.rb +8 -9
- data/lib/rsmp/proxy/supervisor/modules/status.rb +1 -1
- data/lib/rsmp/proxy/supervisor/modules/status_updates.rb +1 -1
- data/lib/rsmp/proxy/supervisor/supervisor_proxy.rb +34 -30
- data/lib/rsmp/result.rb +95 -0
- data/lib/rsmp/schema/validation.rb +5 -3
- data/lib/rsmp/sxl/interface.rb +8 -1
- data/lib/rsmp/sxl/processing/catalogue.rb +61 -0
- data/lib/rsmp/sxl/processing/conflict_checker.rb +30 -0
- data/lib/rsmp/sxl/processing/dependency_graph.rb +37 -0
- data/lib/rsmp/sxl/processing/document.rb +158 -0
- data/lib/rsmp/sxl/processing/error.rb +8 -0
- data/lib/rsmp/sxl/processing/manifest.rb +144 -0
- data/lib/rsmp/sxl/processing/natural_sort.rb +22 -0
- data/lib/rsmp/sxl/processing/resolver.rb +94 -0
- data/lib/rsmp/sxl/processing/version_requirement.rb +86 -0
- data/lib/rsmp/sxl/processing.rb +18 -0
- data/lib/rsmp/sxl/supervisor_interface.rb +8 -1
- data/lib/rsmp/termination.rb +10 -0
- data/lib/rsmp/tlc/modules/plans.rb +0 -2
- data/lib/rsmp/tlc/proxy/control.rb +50 -16
- data/lib/rsmp/tlc/proxy/detectors.rb +15 -4
- data/lib/rsmp/tlc/proxy/io.rb +46 -31
- data/lib/rsmp/tlc/proxy/plans.rb +36 -19
- data/lib/rsmp/tlc/proxy/plans_bang.rb +44 -0
- data/lib/rsmp/tlc/proxy/status.rb +47 -23
- data/lib/rsmp/tlc/proxy/system.rb +16 -4
- data/lib/rsmp/tlc/supervisor_interface.rb +7 -1
- data/lib/rsmp/tlc/traffic_controller_site.rb +6 -9
- data/lib/rsmp/validation.rb +22 -0
- data/lib/rsmp/version.rb +1 -1
- data/lib/rsmp.rb +19 -4
- data/rsmp.gemspec +1 -1
- metadata +25 -4
- data/lib/rsmp/collect/collector/status.rb +0 -34
|
@@ -6,6 +6,7 @@ module RSMP
|
|
|
6
6
|
include Proxy::Control
|
|
7
7
|
include Proxy::IO
|
|
8
8
|
include Proxy::Plans
|
|
9
|
+
include Proxy::PlansBang
|
|
9
10
|
include Proxy::Status
|
|
10
11
|
include Proxy::Detectors
|
|
11
12
|
include Proxy::System
|
|
@@ -32,7 +33,8 @@ module RSMP
|
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
def subscribe_to_timeplan
|
|
35
|
-
validate_ready 'subscribe to timeplan'
|
|
36
|
+
readiness = validate_ready 'subscribe to timeplan'
|
|
37
|
+
return readiness if readiness.failure?
|
|
36
38
|
|
|
37
39
|
status_list = [
|
|
38
40
|
{ 'sCI' => 'S0014', 'n' => 'status', 'uRt' => '0' },
|
|
@@ -45,6 +47,10 @@ module RSMP
|
|
|
45
47
|
subscribe_to_status status_list, component: main.c_id
|
|
46
48
|
end
|
|
47
49
|
|
|
50
|
+
def subscribe_to_timeplan!(...)
|
|
51
|
+
subscribe_to_timeplan(...).value!
|
|
52
|
+
end
|
|
53
|
+
|
|
48
54
|
def process_status_update(message)
|
|
49
55
|
status_values = message.attribute('sS')
|
|
50
56
|
return unless status_values
|
|
@@ -28,9 +28,9 @@ module RSMP
|
|
|
28
28
|
'TLC'
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
def
|
|
31
|
+
def start_auxiliary_tasks(parent)
|
|
32
32
|
super
|
|
33
|
-
start_tlc_timer
|
|
33
|
+
start_tlc_timer(parent: parent)
|
|
34
34
|
main.initiate_startup_sequence
|
|
35
35
|
end
|
|
36
36
|
|
|
@@ -82,11 +82,11 @@ module RSMP
|
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
85
|
-
def start_tlc_timer
|
|
85
|
+
def start_tlc_timer(parent:)
|
|
86
86
|
task_name = 'tlc timer'
|
|
87
87
|
log "Starting #{task_name} with interval #{@interval} seconds", level: :debug
|
|
88
88
|
|
|
89
|
-
@timer =
|
|
89
|
+
@timer = parent.async do |task|
|
|
90
90
|
task.annotate task_name
|
|
91
91
|
run_tlc_timer task
|
|
92
92
|
end
|
|
@@ -96,9 +96,6 @@ module RSMP
|
|
|
96
96
|
next_time = Time.now.to_f
|
|
97
97
|
loop do
|
|
98
98
|
timer(@clock.now)
|
|
99
|
-
rescue StandardError => e
|
|
100
|
-
distribute_error e, level: :internal
|
|
101
|
-
ensure
|
|
102
99
|
# adjust sleep duration to avoid drift. so wake up always happens on the
|
|
103
100
|
# same fractional second.
|
|
104
101
|
# note that Time.now is not monotonic. If the clock is changed,
|
|
@@ -108,7 +105,7 @@ module RSMP
|
|
|
108
105
|
# if the clock is changed, the wake up would then happen on a different
|
|
109
106
|
# fractional second
|
|
110
107
|
next_time += @interval
|
|
111
|
-
duration = next_time - Time.now.to_f
|
|
108
|
+
duration = [next_time - Time.now.to_f, 0].max
|
|
112
109
|
task.sleep duration
|
|
113
110
|
end
|
|
114
111
|
end
|
|
@@ -116,7 +113,7 @@ module RSMP
|
|
|
116
113
|
def stop_tlc_timer
|
|
117
114
|
return unless @timer
|
|
118
115
|
|
|
119
|
-
@timer.
|
|
116
|
+
@timer.cancel if @timer.running?
|
|
120
117
|
@timer = nil
|
|
121
118
|
end
|
|
122
119
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module RSMP
|
|
2
|
+
# The result of validating a message against one or more schemas.
|
|
3
|
+
Validation = Data.define(:violations) do
|
|
4
|
+
def initialize(violations: [])
|
|
5
|
+
raise ArgumentError, 'violations must be an Array' unless violations.is_a?(Array)
|
|
6
|
+
|
|
7
|
+
super(violations: violations.map { |violation| Array(violation).dup.freeze }.freeze)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def valid?
|
|
11
|
+
violations.empty?
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def invalid?
|
|
15
|
+
!valid?
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def message
|
|
19
|
+
violations.map { |item| item.reject { |part| part == '' } }.compact.join(', ').strip
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/rsmp/version.rb
CHANGED
data/lib/rsmp.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'yaml'
|
|
2
2
|
require 'socket'
|
|
3
3
|
require 'time'
|
|
4
|
+
require 'English'
|
|
4
5
|
require 'async'
|
|
5
6
|
require 'io/endpoint'
|
|
6
7
|
require 'io/endpoint/host_endpoint'
|
|
@@ -10,16 +11,28 @@ require 'json'
|
|
|
10
11
|
require 'securerandom'
|
|
11
12
|
require 'json_schemer'
|
|
12
13
|
require 'async/queue'
|
|
14
|
+
require 'async/barrier'
|
|
15
|
+
require 'async/promise'
|
|
13
16
|
require_relative 'rsmp/schema_error'
|
|
17
|
+
require_relative 'rsmp/helpers/clock'
|
|
18
|
+
require_relative 'rsmp/helpers/deep_merge'
|
|
19
|
+
require_relative 'rsmp/helpers/error'
|
|
20
|
+
require_relative 'rsmp/failure'
|
|
21
|
+
require_relative 'rsmp/result'
|
|
22
|
+
require_relative 'rsmp/validation'
|
|
23
|
+
require_relative 'rsmp/event'
|
|
24
|
+
require_relative 'rsmp/event_source'
|
|
25
|
+
require_relative 'rsmp/completion'
|
|
26
|
+
require_relative 'rsmp/termination'
|
|
27
|
+
require_relative 'rsmp/collection'
|
|
28
|
+
require_relative 'rsmp/exchange'
|
|
29
|
+
require_relative 'rsmp/delivery'
|
|
14
30
|
require_relative 'rsmp/schema'
|
|
15
31
|
require_relative 'rsmp/convert/import/yaml'
|
|
16
32
|
require_relative 'rsmp/convert/export/json_schema'
|
|
17
33
|
|
|
18
34
|
require_relative 'rsmp/status_list'
|
|
19
35
|
require_relative 'rsmp/command_list'
|
|
20
|
-
require_relative 'rsmp/helpers/clock'
|
|
21
|
-
require_relative 'rsmp/helpers/deep_merge'
|
|
22
|
-
require_relative 'rsmp/helpers/error'
|
|
23
36
|
require_relative 'rsmp/log/logging'
|
|
24
37
|
require_relative 'rsmp/log/archive'
|
|
25
38
|
require_relative 'rsmp/log/filtering'
|
|
@@ -35,7 +48,6 @@ require_relative 'rsmp/component/component_proxy'
|
|
|
35
48
|
require_relative 'rsmp/collect/distributor'
|
|
36
49
|
require_relative 'rsmp/collect/receiver'
|
|
37
50
|
require_relative 'rsmp/collect/queue'
|
|
38
|
-
require_relative 'rsmp/collect/collector/status'
|
|
39
51
|
require_relative 'rsmp/collect/collector/reporting'
|
|
40
52
|
require_relative 'rsmp/collect/collector/logging'
|
|
41
53
|
require_relative 'rsmp/collect/collector'
|
|
@@ -71,11 +83,13 @@ require_relative 'rsmp/proxy/modules/send'
|
|
|
71
83
|
require_relative 'rsmp/proxy/modules/receive'
|
|
72
84
|
require_relative 'rsmp/proxy/modules/versions'
|
|
73
85
|
require_relative 'rsmp/proxy/modules/tasks'
|
|
86
|
+
require_relative 'rsmp/proxy/modules/lifecycle'
|
|
74
87
|
require_relative 'rsmp/proxy/proxy'
|
|
75
88
|
require_relative 'rsmp/sxl/interface'
|
|
76
89
|
require_relative 'rsmp/sxl/supervisor_interface'
|
|
77
90
|
require_relative 'rsmp/sxl/site_interface'
|
|
78
91
|
require_relative 'rsmp/sxl/registry'
|
|
92
|
+
require_relative 'rsmp/sxl/processing'
|
|
79
93
|
require_relative 'rsmp/proxy/supervisor/modules/status_updates'
|
|
80
94
|
require_relative 'rsmp/proxy/supervisor/modules/status'
|
|
81
95
|
require_relative 'rsmp/proxy/supervisor/modules/commands'
|
|
@@ -108,6 +122,7 @@ require_relative 'rsmp/tlc/proxy/control'
|
|
|
108
122
|
require_relative 'rsmp/tlc/proxy/detectors'
|
|
109
123
|
require_relative 'rsmp/tlc/proxy/io'
|
|
110
124
|
require_relative 'rsmp/tlc/proxy/plans'
|
|
125
|
+
require_relative 'rsmp/tlc/proxy/plans_bang'
|
|
111
126
|
require_relative 'rsmp/tlc/proxy/status'
|
|
112
127
|
require_relative 'rsmp/tlc/proxy/system'
|
|
113
128
|
require_relative 'rsmp/tlc/supervisor_interface'
|
data/rsmp.gemspec
CHANGED
|
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
|
31
31
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
32
32
|
spec.require_paths = ['lib']
|
|
33
33
|
|
|
34
|
-
spec.add_dependency 'async', '~> 2.
|
|
34
|
+
spec.add_dependency 'async', '~> 2.45'
|
|
35
35
|
spec.add_dependency 'colorize', '~> 1.1'
|
|
36
36
|
spec.add_dependency 'io-endpoint', '~> 0.17'
|
|
37
37
|
spec.add_dependency 'io-stream', '~> 0.13'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rsmp
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.51.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Emil Tin
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '2.
|
|
18
|
+
version: '2.45'
|
|
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: '2.
|
|
25
|
+
version: '2.45'
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: colorize
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -166,7 +166,6 @@ files:
|
|
|
166
166
|
- lib/rsmp/collect/collector.rb
|
|
167
167
|
- lib/rsmp/collect/collector/logging.rb
|
|
168
168
|
- lib/rsmp/collect/collector/reporting.rb
|
|
169
|
-
- lib/rsmp/collect/collector/status.rb
|
|
170
169
|
- lib/rsmp/collect/command_matcher.rb
|
|
171
170
|
- lib/rsmp/collect/command_response_collector.rb
|
|
172
171
|
- lib/rsmp/collect/distributor.rb
|
|
@@ -177,7 +176,9 @@ files:
|
|
|
177
176
|
- lib/rsmp/collect/state_collector.rb
|
|
178
177
|
- lib/rsmp/collect/status_collector.rb
|
|
179
178
|
- lib/rsmp/collect/status_matcher.rb
|
|
179
|
+
- lib/rsmp/collection.rb
|
|
180
180
|
- lib/rsmp/command_list.rb
|
|
181
|
+
- lib/rsmp/completion.rb
|
|
181
182
|
- lib/rsmp/component/alarm_state.rb
|
|
182
183
|
- lib/rsmp/component/component.rb
|
|
183
184
|
- lib/rsmp/component/component_base.rb
|
|
@@ -190,6 +191,11 @@ files:
|
|
|
190
191
|
- lib/rsmp/convert/export/json_schema/outputs.rb
|
|
191
192
|
- lib/rsmp/convert/export/json_schema/values.rb
|
|
192
193
|
- lib/rsmp/convert/import/yaml.rb
|
|
194
|
+
- lib/rsmp/delivery.rb
|
|
195
|
+
- lib/rsmp/event.rb
|
|
196
|
+
- lib/rsmp/event_source.rb
|
|
197
|
+
- lib/rsmp/exchange.rb
|
|
198
|
+
- lib/rsmp/failure.rb
|
|
193
199
|
- lib/rsmp/helpers/clock.rb
|
|
194
200
|
- lib/rsmp/helpers/deep_merge.rb
|
|
195
201
|
- lib/rsmp/helpers/error.rb
|
|
@@ -220,6 +226,7 @@ files:
|
|
|
220
226
|
- lib/rsmp/options/supervisor_options.rb
|
|
221
227
|
- lib/rsmp/options/traffic_controller_site_options.rb
|
|
222
228
|
- lib/rsmp/proxy/modules/acknowledgements.rb
|
|
229
|
+
- lib/rsmp/proxy/modules/lifecycle.rb
|
|
223
230
|
- lib/rsmp/proxy/modules/receive.rb
|
|
224
231
|
- lib/rsmp/proxy/modules/send.rb
|
|
225
232
|
- lib/rsmp/proxy/modules/state.rb
|
|
@@ -241,6 +248,7 @@ files:
|
|
|
241
248
|
- lib/rsmp/proxy/supervisor/modules/status.rb
|
|
242
249
|
- lib/rsmp/proxy/supervisor/modules/status_updates.rb
|
|
243
250
|
- lib/rsmp/proxy/supervisor/supervisor_proxy.rb
|
|
251
|
+
- lib/rsmp/result.rb
|
|
244
252
|
- lib/rsmp/schema.rb
|
|
245
253
|
- lib/rsmp/schema/core_sxl_resolution.rb
|
|
246
254
|
- lib/rsmp/schema/message_resolution.rb
|
|
@@ -248,9 +256,20 @@ files:
|
|
|
248
256
|
- lib/rsmp/schema_error.rb
|
|
249
257
|
- lib/rsmp/status_list.rb
|
|
250
258
|
- lib/rsmp/sxl/interface.rb
|
|
259
|
+
- lib/rsmp/sxl/processing.rb
|
|
260
|
+
- lib/rsmp/sxl/processing/catalogue.rb
|
|
261
|
+
- lib/rsmp/sxl/processing/conflict_checker.rb
|
|
262
|
+
- lib/rsmp/sxl/processing/dependency_graph.rb
|
|
263
|
+
- lib/rsmp/sxl/processing/document.rb
|
|
264
|
+
- lib/rsmp/sxl/processing/error.rb
|
|
265
|
+
- lib/rsmp/sxl/processing/manifest.rb
|
|
266
|
+
- lib/rsmp/sxl/processing/natural_sort.rb
|
|
267
|
+
- lib/rsmp/sxl/processing/resolver.rb
|
|
268
|
+
- lib/rsmp/sxl/processing/version_requirement.rb
|
|
251
269
|
- lib/rsmp/sxl/registry.rb
|
|
252
270
|
- lib/rsmp/sxl/site_interface.rb
|
|
253
271
|
- lib/rsmp/sxl/supervisor_interface.rb
|
|
272
|
+
- lib/rsmp/termination.rb
|
|
254
273
|
- lib/rsmp/tlc.rb
|
|
255
274
|
- lib/rsmp/tlc/detector_logic.rb
|
|
256
275
|
- lib/rsmp/tlc/input_states.rb
|
|
@@ -269,6 +288,7 @@ files:
|
|
|
269
288
|
- lib/rsmp/tlc/proxy/detectors.rb
|
|
270
289
|
- lib/rsmp/tlc/proxy/io.rb
|
|
271
290
|
- lib/rsmp/tlc/proxy/plans.rb
|
|
291
|
+
- lib/rsmp/tlc/proxy/plans_bang.rb
|
|
272
292
|
- lib/rsmp/tlc/proxy/status.rb
|
|
273
293
|
- lib/rsmp/tlc/proxy/system.rb
|
|
274
294
|
- lib/rsmp/tlc/signal_group.rb
|
|
@@ -279,6 +299,7 @@ files:
|
|
|
279
299
|
- lib/rsmp/tlc/supervisor_interface.rb
|
|
280
300
|
- lib/rsmp/tlc/traffic_controller.rb
|
|
281
301
|
- lib/rsmp/tlc/traffic_controller_site.rb
|
|
302
|
+
- lib/rsmp/validation.rb
|
|
282
303
|
- lib/rsmp/version.rb
|
|
283
304
|
- rsmp.gemspec
|
|
284
305
|
- schemas/core/3.1.2/aggregated_status.json
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
module RSMP
|
|
2
|
-
class Collector
|
|
3
|
-
# Status predicate methods for collectors
|
|
4
|
-
module Status
|
|
5
|
-
def collecting?
|
|
6
|
-
@status == :collecting
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def ok?
|
|
10
|
-
@status == :ok
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def timeout?
|
|
14
|
-
@status == :timeout
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def ready?
|
|
18
|
-
@status == :ready
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def cancelled?
|
|
22
|
-
@status == :cancelled
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def ingoing?
|
|
26
|
-
@ingoing == true
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def outgoing?
|
|
30
|
-
@outgoing == true
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|