oldmoe-reactor 0.2.0 → 0.2.1
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/lib/reactor.rb +26 -2
- data/reactor.gemspec +1 -1
- metadata +1 -1
data/lib/reactor.rb
CHANGED
@@ -107,7 +107,6 @@ module Reactor
|
|
107
107
|
# object is already attached. If it is set to true (default) then the reactor will
|
108
108
|
# append the new call back till the original caller detaches it. If set to false
|
109
109
|
# then the reactor will just override the old callback with the new one
|
110
|
-
|
111
110
|
def attach(mode, io, wait_if_attached = true, &callback)
|
112
111
|
selectables = @selectables[mode] || raise("mode is not :read or :write")
|
113
112
|
raise "you must supply a callback block" if callback.nil?
|
@@ -118,6 +117,14 @@ module Reactor
|
|
118
117
|
selectables[:callbacks][io.object_id] = [callback]
|
119
118
|
selectables[:dirty] = true
|
120
119
|
end
|
120
|
+
@on_attach.call(mode, io) if @on_attach
|
121
|
+
end
|
122
|
+
|
123
|
+
# Supply a callback to on_attach that will be called
|
124
|
+
# after each attach operation and supplied with
|
125
|
+
# the mode and io object of the attach method
|
126
|
+
def on_attach(&block)
|
127
|
+
@on_attach = block
|
121
128
|
end
|
122
129
|
|
123
130
|
# Detach an IO object from the reactor
|
@@ -125,15 +132,23 @@ module Reactor
|
|
125
132
|
# mode can be either :read or :write
|
126
133
|
def detach(mode, io, force=false)
|
127
134
|
selectables = @selectables[mode] || raise("mode is not :read or :write")
|
128
|
-
if !force && selectables[:callbacks][io.object_id].length >
|
135
|
+
if !force && selectables[:callbacks][io.object_id].length > 1
|
129
136
|
selectables[:callbacks][io.object_id].shift
|
130
137
|
else
|
131
138
|
selectables[:ios].delete(io.object_id)
|
132
139
|
selectables[:callbacks].delete(io.object_id)
|
133
140
|
selectables[:dirty] = true
|
134
141
|
end
|
142
|
+
@on_detach.call(mode, io) if @on_attach
|
135
143
|
end
|
136
144
|
|
145
|
+
# Supply a callback to on_detach that will be called
|
146
|
+
# after each detach operation and supplied with
|
147
|
+
# the mode and io object of the detach method
|
148
|
+
def on_detach(&block)
|
149
|
+
@on_detach = block
|
150
|
+
end
|
151
|
+
|
137
152
|
# Detach all IO objects of a certain mode from the reactor
|
138
153
|
#
|
139
154
|
# mode can be either :read or :write
|
@@ -152,6 +167,15 @@ module Reactor
|
|
152
167
|
# Add a block of code that will fire after some time
|
153
168
|
def add_timer(time, periodical=false, &block)
|
154
169
|
timer = Timer.new(@timers, time, periodical, &block)
|
170
|
+
@on_add_timer.call(timer) if @on_add_timer
|
171
|
+
timer
|
172
|
+
end
|
173
|
+
|
174
|
+
# Supply a callback to on_add_timer that will be called
|
175
|
+
# after each add_timer operation and supplied with
|
176
|
+
# the timer object
|
177
|
+
def on_add_timer(&block)
|
178
|
+
@on_add_timer = block
|
155
179
|
end
|
156
180
|
|
157
181
|
# Add a block of code that will fire periodically after some time passes
|
data/reactor.gemspec
CHANGED