omf_common 6.0.2.pre.2 → 6.0.2
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.
- data/bin/file_broadcaster.rb +5 -0
- data/bin/file_receiver.rb +5 -0
- data/bin/omf_keygen +3 -3
- data/bin/omf_send_configure +114 -0
- data/bin/omf_send_request +19 -4
- data/example/engine_alt.rb +13 -7
- data/example/viz/garage_monitor.rb +69 -0
- data/example/viz/garage_viz.rb +52 -0
- data/example/viz/htdocs/image/garage.png +0 -0
- data/example/viz/htdocs/template/garage_banner.html +2 -0
- data/example/viz/layout.yaml +44 -0
- data/example/vm_alt.rb +5 -0
- data/lib/omf_common.rb +17 -8
- data/lib/omf_common/auth.rb +5 -0
- data/lib/omf_common/auth/certificate.rb +21 -2
- data/lib/omf_common/auth/certificate_store.rb +50 -20
- data/lib/omf_common/auth/ssh_pub_key_convert.rb +7 -0
- data/lib/omf_common/comm.rb +6 -1
- data/lib/omf_common/comm/amqp/amqp_communicator.rb +88 -12
- data/lib/omf_common/comm/amqp/amqp_file_transfer.rb +5 -0
- data/lib/omf_common/comm/amqp/amqp_topic.rb +37 -18
- data/lib/omf_common/comm/local/local_communicator.rb +5 -0
- data/lib/omf_common/comm/local/local_topic.rb +5 -0
- data/lib/omf_common/comm/topic.rb +32 -13
- data/lib/omf_common/comm/xmpp/communicator.rb +11 -1
- data/lib/omf_common/comm/xmpp/topic.rb +5 -0
- data/lib/omf_common/comm/xmpp/xmpp_mp.rb +5 -0
- data/lib/omf_common/command.rb +5 -0
- data/lib/omf_common/core_ext/string.rb +5 -0
- data/lib/omf_common/default_logging.rb +23 -5
- data/lib/omf_common/eventloop.rb +40 -23
- data/lib/omf_common/eventloop/em.rb +18 -5
- data/lib/omf_common/eventloop/local_evl.rb +18 -15
- data/lib/omf_common/exec_app.rb +44 -24
- data/lib/omf_common/key.rb +5 -0
- data/lib/omf_common/measure.rb +5 -0
- data/lib/omf_common/message.rb +5 -0
- data/lib/omf_common/message/json/json_message.rb +13 -5
- data/lib/omf_common/message/xml/message.rb +19 -4
- data/lib/omf_common/message/xml/relaxng_schema.rb +5 -0
- data/lib/omf_common/message/xml/topic_message.rb +5 -0
- data/lib/omf_common/version.rb +6 -1
- data/omf_common.gemspec +3 -2
- data/test/fixture/1st_level.pem +20 -0
- data/test/fixture/2nd_level.pem +19 -0
- data/test/fixture/3rd_level.pem +19 -0
- data/test/fixture/pubsub.rb +5 -0
- data/test/fixture/rc.pem +18 -0
- data/test/fixture/root.pem +17 -0
- data/test/omf_common/auth/certificate_spec.rb +27 -0
- data/test/omf_common/auth/certificate_store_spec.rb +58 -0
- data/test/omf_common/auth/ssh_pub_key_convert_spec.rb +5 -0
- data/test/omf_common/comm/topic_spec.rb +7 -1
- data/test/omf_common/comm/xmpp/communicator_spec.rb +5 -0
- data/test/omf_common/comm/xmpp/topic_spec.rb +5 -0
- data/test/omf_common/comm_spec.rb +5 -0
- data/test/omf_common/command_spec.rb +5 -0
- data/test/omf_common/core_ext/string_spec.rb +5 -0
- data/test/omf_common/message/xml/message_spec.rb +5 -0
- data/test/omf_common/message_spec.rb +8 -3
- data/test/test_helper.rb +5 -0
- metadata +48 -11
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2012 National ICT Australia Limited (NICTA).
|
2
|
+
# This software may be used and distributed solely under the terms of the MIT license (License).
|
3
|
+
# You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
|
4
|
+
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
|
+
|
1
6
|
require 'omf_common/comm/local/local_topic'
|
2
7
|
require 'securerandom'
|
3
8
|
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2012 National ICT Australia Limited (NICTA).
|
2
|
+
# This software may be used and distributed solely under the terms of the MIT license (License).
|
3
|
+
# You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
|
4
|
+
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
|
+
|
1
6
|
|
2
7
|
|
3
8
|
module OmfCommon
|
@@ -1,5 +1,11 @@
|
|
1
|
+
# Copyright (c) 2012 National ICT Australia Limited (NICTA).
|
2
|
+
# This software may be used and distributed solely under the terms of the MIT license (License).
|
3
|
+
# You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
|
4
|
+
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
|
+
|
1
6
|
require 'monitor'
|
2
7
|
require 'securerandom'
|
8
|
+
require 'openssl'
|
3
9
|
|
4
10
|
module OmfCommon
|
5
11
|
class Comm
|
@@ -94,22 +100,35 @@ module OmfCommon
|
|
94
100
|
define_method(mname) do |*args, &message_block|
|
95
101
|
warn_deprecation(mname, :on_message, :on_inform)
|
96
102
|
|
97
|
-
add_message_handler(itype, &message_block)
|
103
|
+
add_message_handler(itype, args.first, &message_block)
|
98
104
|
end
|
99
105
|
end
|
100
106
|
|
101
|
-
def on_message(
|
102
|
-
add_message_handler(:message, &message_block)
|
107
|
+
def on_message(key = nil, &message_block)
|
108
|
+
add_message_handler(:message, key, &message_block)
|
103
109
|
end
|
104
110
|
|
105
|
-
def on_inform(
|
106
|
-
add_message_handler(:inform, &message_block)
|
111
|
+
def on_inform(key = nil, &message_block)
|
112
|
+
add_message_handler(:inform, key, &message_block)
|
107
113
|
end
|
108
114
|
|
109
|
-
#
|
115
|
+
# Remove all registered callbacks for 'key'. Will also unsubscribe from the underlying
|
116
|
+
# comms layer if no callbacks remain.
|
110
117
|
#
|
111
|
-
def unsubscribe()
|
112
|
-
|
118
|
+
def unsubscribe(key)
|
119
|
+
@lock.synchronize do
|
120
|
+
@handlers.each do |name, cbks|
|
121
|
+
if cbks.delete(key)
|
122
|
+
# remove altogether if no callback left
|
123
|
+
if cbks.empty?
|
124
|
+
@handlers.delete(name)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
if @handlers.empty?
|
129
|
+
warn "Should unsubscribe '#{id}'"
|
130
|
+
end
|
131
|
+
end
|
113
132
|
end
|
114
133
|
|
115
134
|
def on_subscribed(&block)
|
@@ -157,8 +176,7 @@ module OmfCommon
|
|
157
176
|
# Process a message received from this topic.
|
158
177
|
#
|
159
178
|
# @param [OmfCommon::Message] msg Message received
|
160
|
-
#
|
161
|
-
# @option auth_info [Symbol] :signer Id
|
179
|
+
#
|
162
180
|
def on_incoming_message(msg)
|
163
181
|
type = msg.operation
|
164
182
|
debug "(#{id}) Deliver message '#{type}': #{msg.inspect}"
|
@@ -178,7 +196,7 @@ module OmfCommon
|
|
178
196
|
end
|
179
197
|
|
180
198
|
debug "(#{id}) Message type '#{htypes.inspect}' (#{msg.class}:#{msg.cid})"
|
181
|
-
hs = htypes.map { |ht| @handlers[ht] }.compact.flatten
|
199
|
+
hs = htypes.map { |ht| (@handlers[ht] || {}).values }.compact.flatten
|
182
200
|
debug "(#{id}) Distributing message to '#{hs.inspect}'"
|
183
201
|
hs.each do |block|
|
184
202
|
block.call msg
|
@@ -190,11 +208,12 @@ module OmfCommon
|
|
190
208
|
end
|
191
209
|
end
|
192
210
|
|
193
|
-
def add_message_handler(handler_name, &message_block)
|
211
|
+
def add_message_handler(handler_name, key, &message_block)
|
194
212
|
raise ArgumentError, 'Missing message callback' if message_block.nil?
|
195
213
|
debug "(#{id}) register handler for '#{handler_name}'"
|
196
214
|
@lock.synchronize do
|
197
|
-
|
215
|
+
key ||= OpenSSL::Digest::SHA1.new(message_block.source_location.to_s).to_s
|
216
|
+
(@handlers[handler_name] ||= {})[key] = message_block
|
198
217
|
end
|
199
218
|
self
|
200
219
|
end
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2012 National ICT Australia Limited (NICTA).
|
2
|
+
# This software may be used and distributed solely under the terms of the MIT license (License).
|
3
|
+
# You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
|
4
|
+
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
|
+
|
1
6
|
require 'blather/client/dsl'
|
2
7
|
|
3
8
|
require 'omf_common/comm/xmpp/xmpp_mp'
|
@@ -20,7 +25,8 @@ class Comm
|
|
20
25
|
:fields => [
|
21
26
|
{ :var => "FORM_TYPE", :type => 'hidden', :value => "http://jabber.org/protocol/pubsub#node_config" },
|
22
27
|
{ :var => "pubsub#persist_items", :value => "0" },
|
23
|
-
{ :var => "pubsub#
|
28
|
+
{ :var => "pubsub#purge_offline", :value => "1" },
|
29
|
+
{ :var => "pubsub#send_last_published_item", :value => "never" },
|
24
30
|
{ :var => "pubsub#notify_retract", :value => "0" },
|
25
31
|
{ :var => "pubsub#publish_model", :value => "open" }]
|
26
32
|
})
|
@@ -160,6 +166,10 @@ class Comm
|
|
160
166
|
raise StandardError, "Invalid message" unless message.valid?
|
161
167
|
|
162
168
|
message = message.marshall[1] unless message.kind_of? String
|
169
|
+
if message.nil?
|
170
|
+
debug "Cannot publish empty message, using authentication and not providing a proper cert?"
|
171
|
+
return nil
|
172
|
+
end
|
163
173
|
|
164
174
|
new_block = proc do |stanza|
|
165
175
|
published_messages << OpenSSL::Digest::SHA1.new(message.to_s)
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2012 National ICT Australia Limited (NICTA).
|
2
|
+
# This software may be used and distributed solely under the terms of the MIT license (License).
|
3
|
+
# You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
|
4
|
+
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
|
+
|
1
6
|
module OmfCommon
|
2
7
|
class Comm
|
3
8
|
class XMPP
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2012 National ICT Australia Limited (NICTA).
|
2
|
+
# This software may be used and distributed solely under the terms of the MIT license (License).
|
3
|
+
# You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
|
4
|
+
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
|
+
|
1
6
|
require 'oml4r'
|
2
7
|
|
3
8
|
module OmfCommon
|
data/lib/omf_common/command.rb
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2012 National ICT Australia Limited (NICTA).
|
2
|
+
# This software may be used and distributed solely under the terms of the MIT license (License).
|
3
|
+
# You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
|
4
|
+
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
|
+
|
1
6
|
require 'open3'
|
2
7
|
|
3
8
|
module OmfCommon::Command
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2012 National ICT Australia Limited (NICTA).
|
2
|
+
# This software may be used and distributed solely under the terms of the MIT license (License).
|
3
|
+
# You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
|
4
|
+
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
|
+
|
1
6
|
class String
|
2
7
|
def ducktype
|
3
8
|
Integer(self) rescue Float(self) rescue self
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2012 National ICT Australia Limited (NICTA).
|
2
|
+
# This software may be used and distributed solely under the terms of the MIT license (License).
|
3
|
+
# You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
|
4
|
+
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
|
+
|
1
6
|
require 'logging'
|
2
7
|
|
3
8
|
module OmfCommon
|
@@ -14,28 +19,35 @@ module OmfCommon
|
|
14
19
|
Logging.logger.root.level = :info
|
15
20
|
|
16
21
|
# Alias logging method using default logger
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
#
|
25
|
+
# info 'Information'
|
26
|
+
# # Additional logger name will generate a new child logger in the context of default logger
|
27
|
+
# info 'Information', 'logger name'
|
28
|
+
#
|
17
29
|
def info(*args, &block)
|
18
|
-
|
30
|
+
get_logger(args[1]).info(args[0], &block)
|
19
31
|
end
|
20
32
|
|
21
33
|
# @see #info
|
22
34
|
def debug(*args, &block)
|
23
|
-
|
35
|
+
get_logger(args[1]).debug(args[0], &block)
|
24
36
|
end
|
25
37
|
|
26
38
|
# @see #info
|
27
39
|
def error(*args, &block)
|
28
|
-
|
40
|
+
get_logger(args[1]).error(args[0], &block)
|
29
41
|
end
|
30
42
|
|
31
43
|
# @see #info
|
32
44
|
def fatal(*args, &block)
|
33
|
-
|
45
|
+
get_logger(args[1]).fatal(args[0], &block)
|
34
46
|
end
|
35
47
|
|
36
48
|
# @see #info
|
37
49
|
def warn(*args, &block)
|
38
|
-
|
50
|
+
get_logger(args[1]).warn(args[0], &block)
|
39
51
|
end
|
40
52
|
|
41
53
|
# Log a warning message for deprecated methods
|
@@ -48,5 +60,11 @@ module OmfCommon
|
|
48
60
|
logger.warn "[DEPRECATION] '#{deprecated_name}' is deprecated and not supported. Please do not use it."
|
49
61
|
end
|
50
62
|
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def get_logger(name = nil)
|
67
|
+
name.nil? ? logger : Logging::Logger["#{logger.name}::#{name.to_s}"]
|
68
|
+
end
|
51
69
|
end
|
52
70
|
end
|
data/lib/omf_common/eventloop.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
+
# Copyright (c) 2012 National ICT Australia Limited (NICTA).
|
2
|
+
# This software may be used and distributed solely under the terms of the MIT license (License).
|
3
|
+
# You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
|
4
|
+
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
|
+
|
1
6
|
module OmfCommon
|
2
7
|
# Providing event loop support.
|
3
8
|
class Eventloop
|
4
|
-
|
9
|
+
|
5
10
|
@@providers = {
|
6
11
|
em: {
|
7
12
|
require: 'omf_common/eventloop/em',
|
@@ -13,7 +18,8 @@ module OmfCommon
|
|
13
18
|
}
|
14
19
|
}
|
15
20
|
@@instance = nil
|
16
|
-
|
21
|
+
@@on_stop_proc = []
|
22
|
+
|
17
23
|
#
|
18
24
|
# opts:
|
19
25
|
# :type - eventloop provider
|
@@ -43,66 +49,77 @@ module OmfCommon
|
|
43
49
|
@@instance = inst
|
44
50
|
inst
|
45
51
|
end
|
46
|
-
|
52
|
+
|
47
53
|
def self.instance
|
48
54
|
@@instance
|
49
55
|
end
|
50
|
-
|
56
|
+
|
51
57
|
# Execute block after some time
|
52
58
|
#
|
53
|
-
# @param [
|
54
|
-
# @param [block] block to execute
|
59
|
+
# @param [Float] delay_sec in sec
|
55
60
|
#
|
56
61
|
def after(delay_sec, &block)
|
57
62
|
raise "Missing implementation 'after'"
|
58
63
|
end
|
59
|
-
|
64
|
+
|
60
65
|
# Periodically call block every interval_sec
|
61
66
|
#
|
62
|
-
# @param [
|
63
|
-
# @param [block] block to execute
|
67
|
+
# @param [Float] interval_sec in sec
|
64
68
|
#
|
65
69
|
def every(interval_sec, &block)
|
66
70
|
raise "Missing implementation 'every'"
|
67
71
|
end
|
68
|
-
|
72
|
+
|
73
|
+
# Call 'block' in the context of a separate thread.
|
74
|
+
#
|
75
|
+
def defer(&block)
|
76
|
+
raise "Missing implementation 'defer'"
|
77
|
+
end
|
78
|
+
|
69
79
|
# Block calling thread until eventloop exits
|
70
80
|
def join()
|
71
81
|
raise "Missing implementation 'join'"
|
72
82
|
end
|
73
|
-
|
83
|
+
|
74
84
|
def run()
|
75
|
-
raise "Missing implementation 'run'"
|
85
|
+
raise "Missing implementation 'run'"
|
76
86
|
end
|
77
|
-
|
87
|
+
|
78
88
|
def stop()
|
79
|
-
|
80
|
-
|
81
|
-
|
89
|
+
@@on_stop_proc.each do |block|
|
90
|
+
begin
|
91
|
+
block.call()
|
92
|
+
rescue => ex
|
93
|
+
error "Exception '#{ex}'"
|
94
|
+
debug "#{ex}\n\t#{ex.backtrace.join("\n\t")}"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
82
99
|
# Calling 'block' before stopping eventloop
|
83
100
|
#
|
84
101
|
def on_stop(&block)
|
85
|
-
|
102
|
+
@@on_stop_proc << block
|
86
103
|
end
|
87
|
-
|
104
|
+
|
88
105
|
# Calling 'block' when having trapped an INT signal
|
89
106
|
#
|
90
107
|
def on_int_signal(&block)
|
91
108
|
# trap(:INT)
|
92
|
-
warn "Missing implementation 'on_int_signal'"
|
109
|
+
warn "Missing implementation 'on_int_signal'"
|
93
110
|
end
|
94
111
|
|
95
112
|
# Calling 'block' when having trapped a TERM signal
|
96
113
|
#
|
97
114
|
def on_term_signal(&block)
|
98
115
|
# trap(:TERM) {}
|
99
|
-
warn "Missing implementation 'on_term_signal'"
|
116
|
+
warn "Missing implementation 'on_term_signal'"
|
100
117
|
end
|
101
|
-
|
118
|
+
|
102
119
|
private
|
103
120
|
def initialize(opts = {}, &block)
|
104
121
|
#run(&block) if block
|
105
122
|
end
|
106
|
-
|
123
|
+
|
107
124
|
end
|
108
|
-
end
|
125
|
+
end
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2012 National ICT Australia Limited (NICTA).
|
2
|
+
# This software may be used and distributed solely under the terms of the MIT license (License).
|
3
|
+
# You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
|
4
|
+
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
|
+
|
1
6
|
require 'eventmachine'
|
2
7
|
|
3
8
|
module OmfCommon
|
@@ -14,13 +19,20 @@ module OmfCommon
|
|
14
19
|
|
15
20
|
# Execute block after some time
|
16
21
|
#
|
17
|
-
# @param [Float]
|
22
|
+
# @param [Float] delay_sec in sec
|
18
23
|
def after(delay_sec, &block)
|
19
24
|
if EM.reactor_running?
|
20
|
-
EM.add_timer(delay_sec
|
25
|
+
EM.add_timer(delay_sec) do
|
26
|
+
begin
|
27
|
+
block.call()
|
28
|
+
rescue => ex
|
29
|
+
error "Exception '#{ex}'"
|
30
|
+
debug "#{ex}\n\t#{ex.backtrace.join("\n\t")}"
|
31
|
+
end
|
32
|
+
end
|
21
33
|
else
|
22
34
|
@deferred << lambda do
|
23
|
-
|
35
|
+
after(delay_sec, &block)
|
24
36
|
end
|
25
37
|
end
|
26
38
|
end
|
@@ -41,7 +53,7 @@ module OmfCommon
|
|
41
53
|
|
42
54
|
# Periodically call block every interval_sec
|
43
55
|
#
|
44
|
-
# @param [Float]
|
56
|
+
# @param [Float] interval_sec in sec
|
45
57
|
def every(interval_sec, &block)
|
46
58
|
# to allow canceling the periodic timer we need to
|
47
59
|
# hand back a reference to it which responds to 'cancel'
|
@@ -82,7 +94,8 @@ module OmfCommon
|
|
82
94
|
end
|
83
95
|
|
84
96
|
def stop()
|
85
|
-
|
97
|
+
super
|
98
|
+
EM.next_tick { EM.stop }
|
86
99
|
end
|
87
100
|
end # class
|
88
101
|
end
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2012 National ICT Australia Limited (NICTA).
|
2
|
+
# This software may be used and distributed solely under the terms of the MIT license (License).
|
3
|
+
# You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
|
4
|
+
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
|
+
|
1
6
|
|
2
7
|
|
3
8
|
module OmfCommon
|
@@ -5,32 +10,30 @@ module OmfCommon
|
|
5
10
|
# Implements a simple eventloop which only deals with timer events
|
6
11
|
#
|
7
12
|
class Local < Eventloop
|
8
|
-
|
13
|
+
|
9
14
|
def initialize(opts = {}, &block)
|
10
15
|
super
|
11
16
|
@tasks = []
|
12
17
|
@running = false
|
13
18
|
after(0, &block) if block
|
14
19
|
end
|
15
|
-
|
20
|
+
|
16
21
|
# Execute block after some time
|
17
22
|
#
|
18
|
-
# @param [
|
19
|
-
# @param [block] block to execute
|
23
|
+
# @param [Float] delay_sec in sec
|
20
24
|
#
|
21
25
|
def after(delay_sec, &block)
|
22
26
|
@tasks << [Time.now + delay_sec, block]
|
23
27
|
end
|
24
|
-
|
28
|
+
|
25
29
|
# Periodically call block every interval_sec
|
26
30
|
#
|
27
|
-
# @param [
|
28
|
-
# @param [block] block to execute
|
31
|
+
# @param [Float] interval_sec in sec
|
29
32
|
#
|
30
33
|
def every(interval_sec, &block)
|
31
34
|
@tasks << [Time.now + interval_sec, block, :periodic => interval_sec]
|
32
35
|
end
|
33
|
-
|
36
|
+
|
34
37
|
# Call 'block' in the context of a separate thread.
|
35
38
|
#
|
36
39
|
def defer(&block)
|
@@ -44,17 +47,17 @@ module OmfCommon
|
|
44
47
|
end
|
45
48
|
end
|
46
49
|
end
|
47
|
-
|
48
|
-
|
49
|
-
def stop
|
50
|
+
|
51
|
+
|
52
|
+
def stop
|
50
53
|
@running = false
|
51
54
|
end
|
52
|
-
|
55
|
+
|
53
56
|
def run(&block)
|
54
57
|
after(0, &block) if block
|
55
58
|
return if @running
|
56
59
|
@running = true
|
57
|
-
|
60
|
+
|
58
61
|
while @running do
|
59
62
|
now = Time.now
|
60
63
|
@tasks = @tasks.sort
|
@@ -86,8 +89,8 @@ module OmfCommon
|
|
86
89
|
end
|
87
90
|
end
|
88
91
|
end
|
89
|
-
end
|
92
|
+
end
|
90
93
|
end # class
|
91
94
|
end
|
92
95
|
end
|
93
|
-
|
96
|
+
|