Class: Orocos::Async::CORBA::OutputPort
- Inherits:
-
Port
show all
- Defined in:
- lib/orocos/async/ports.rb
Instance Attribute Summary
Attributes inherited from Port
#options
Attributes inherited from ObjectBase
#emitting, #event_loop, #name, #options, #pending_adds
Instance Method Summary
collapse
Methods inherited from Port
#reachable?, #task, #to_async, #to_proxy
Methods inherited from ObjectBase
define_event, define_events, #disable_emitting, #event, event_names, #event_names, #invalidate_delegator!, #listener?, #listeners, #number_of_listeners, #on_event, #proxy_event, #reachable?, #remove_all_listeners, #remove_proxy_event, #valid_delegator?, valid_event?, #valid_event?, validate_event, #validate_event, #wait
Constructor Details
#initialize(async_task, port, options = Hash.new) ⇒ OutputPort
Returns a new instance of OutputPort
246
247
248
249
|
# File 'lib/orocos/async/ports.rb', line 246
def initialize(async_task,port,options=Hash.new)
super
@readers = Array.new
end
|
Instance Method Details
#add_listener(listener) ⇒ Object
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
|
# File 'lib/orocos/async/ports.rb', line 343
def add_listener(listener)
super
if((listener.event == :data || listener.event == :raw_data) && !@global_reader)
reader(@options) do |reader|
if @global_reader
reader.disconnect
elsif number_of_listeners(:data) > 0 || number_of_listeners(:raw_data) > 0 @global_reader = reader
proxy_event(reader,:data,:raw_data)
@global_reader.period = @options[:period] if @options.has_key? :period
end
end
end
end
|
#last_sample ⇒ Object
251
252
253
|
# File 'lib/orocos/async/ports.rb', line 251
def last_sample
@global_reader.last_sample if @global_reader
end
|
#on_data(policy = Hash.new, &block) ⇒ Object
287
288
289
290
291
292
293
294
295
296
297
298
299
300
|
# File 'lib/orocos/async/ports.rb', line 287
def on_data(policy = Hash.new,&block)
@options = if policy.empty?
@options
elsif @options.empty? && !@global_reader
policy
elsif @options == policy
@options
else
Orocos.warn "Changing global reader policy for #{full_name} from #{@options} to #{policy}"
self.options = @options
@options
end
on_event :data,&block
end
|
#on_raw_data(policy = Hash.new, &block) ⇒ Object
302
303
304
305
306
307
308
309
310
311
312
313
314
315
|
# File 'lib/orocos/async/ports.rb', line 302
def on_raw_data(policy = Hash.new,&block)
@options = if policy.empty?
@options
elsif @options.empty? && !@global_reader
policy
elsif @options == policy
@options
else
Orocos.warn "Changing global reader policy for #{full_name} from #{@options} to #{policy}"
self.options = @options
@options
end
on_event :raw_data,&block
end
|
#options=(options) ⇒ Object
259
260
261
262
|
# File 'lib/orocos/async/ports.rb', line 259
def options=(options)
super
@global_reader = nil
end
|
#period=(value) ⇒ Object
317
318
319
320
|
# File 'lib/orocos/async/ports.rb', line 317
def period=(value)
@period = value
@global_reader.period = value if @global_reader.respond_to?(:period=)
end
|
#raw_last_sample ⇒ Object
255
256
257
|
# File 'lib/orocos/async/ports.rb', line 255
def raw_last_sample
@global_reader.raw_last_sample if @global_reader
end
|
#reachable!(port, options = Hash.new) ⇒ Object
378
379
380
381
382
383
384
385
386
387
|
# File 'lib/orocos/async/ports.rb', line 378
def reachable!(port,options = Hash.new)
super
if @global_reader
orig_reader(@global_reader.policy) do |reader,error|
unless error
@global_reader.reachable!(reader)
end
end
end
end
|
#reader(options = Hash.new, &block) ⇒ Object
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
|
# File 'lib/orocos/async/ports.rb', line 264
def reader(options = Hash.new,&block)
options, policy = Kernel.filter_options options, :period => nil
policy[:init] = true unless policy.has_key?(:init)
policy[:pull] = true unless policy.has_key?(:pull)
if block
orig_reader(policy) do |reader,error|
unless error
reader = OutputReader.new(self,reader,options)
proxy_event(reader,:error)
end
if block.arity == 2
block.call(reader,error)
elsif !error
block.call(reader)
end
end
else
reader = OutputReader.new(self,orig_reader(policy),options)
proxy_event(reader,:error)
reader
end
end
|
#really_add_listener(listener) ⇒ Object
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
|
# File 'lib/orocos/async/ports.rb', line 322
def really_add_listener(listener)
super
if listener.event == :data
if @global_reader
if listener.use_last_value?
if sample = @global_reader.last_sample
listener.call sample
end
end
end
elsif listener.event == :raw_data
if @global_reader
if listener.use_last_value?
if sample = @global_reader.raw_last_sample
listener.call sample
end
end
end
end
end
|
#remove_listener(listener) ⇒ Object
362
363
364
365
366
367
368
369
|
# File 'lib/orocos/async/ports.rb', line 362
def remove_listener(listener)
super
if number_of_listeners(:data) == 0 && number_of_listeners(:raw_data) == 0 && @global_reader
remove_proxy_event(@global_reader)
@global_reader.disconnect{} @global_reader = nil
end
end
|
#unreachable!(options = Hash.new) ⇒ Object
371
372
373
374
375
376
|
# File 'lib/orocos/async/ports.rb', line 371
def unreachable!(options = Hash.new)
if @global_reader.respond_to?(:unreachable!)
@global_reader.unreachable!
end
super
end
|