Class: Roby::Log::Client

Inherits:
Object show all
Defined in:
lib/roby/log/server.rb

Constant Summary collapse

MIN_DISPLAY_DURATION =
5

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(server) ⇒ Client

Returns a new instance of Client.



419
420
421
422
423
# File 'lib/roby/log/server.rb', line 419

def initialize(server)
    @server  = server
    @pending = Hash.new
    connect
end

Instance Attribute Details

#last_updateObject (readonly)

Returns the value of attribute last_update.



443
444
445
# File 'lib/roby/log/server.rb', line 443

def last_update
  @last_update
end

#serverObject (readonly)

The remote display server



417
418
419
# File 'lib/roby/log/server.rb', line 417

def server
  @server
end

Class Method Details

.remote_streams_finalizer(server, drb_object) ⇒ Object



508
509
510
511
512
513
514
515
516
517
# File 'lib/roby/log/server.rb', line 508

def self.remote_streams_finalizer(server, drb_object)
    Proc.new do
 begin
      server.disconnect(drb_object)
 rescue DRb::DRbConnError
 rescue Exception => e
      STDERR.puts e.full_message
 end
    end
end

Instance Method Details

#added_stream(klass_name, id, name, type) ⇒ Object



429
430
431
432
433
434
435
436
437
# File 'lib/roby/log/server.rb', line 429

def added_stream(klass_name, id, name, type)
    begin
 require klass_name.underscore
    rescue LoadError
    end
    
    @streams[id] = RemoteStream.new(klass_name.constantize, id, name, type)
    super if defined? super
end

#connectObject



490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
# File 'lib/roby/log/server.rb', line 490

def connect
    if connected?
 raise ArgumentError, "already connected"
    end

    @streams = Hash.new
    server.connect(DRbObject.new(self)).
 each do |klass, id, name, type|
      added_stream(klass, id, name, type)
 end

    ObjectSpace.define_finalizer(self, Client.remote_streams_finalizer(server, DRbObject.new(self)))

rescue Exception
    disconnect
    raise
end

#connected?Boolean

Returns:

  • (Boolean)


489
# File 'lib/roby/log/server.rb', line 489

def connected?; !!@streams end

#demux(calls) ⇒ Object



445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
# File 'lib/roby/log/server.rb', line 445

def demux(calls)
    calls.each do |args|
 send(*args)
    end

    streams.each do |s|
 while s.has_sample?
      s.synchronize do
  s.advance
      end
 end
    end

    sleep(0.5)
end

#disconnectObject



519
520
521
522
523
# File 'lib/roby/log/server.rb', line 519

def disconnect
    @streams = nil
    server.disconnect(DRbObject.new(self))
rescue DRb::DRbConnError
end

#init(id, data) ⇒ Object



469
470
471
472
473
474
475
476
477
478
479
# File 'lib/roby/log/server.rb', line 469

def init(id, data)
    s = @streams[id]
    Server.info "initializing #{s}"
    s.synchronize do
 s.init(data) do |sample|
      s.decoders.each do |dec|
  dec.process(sample)
      end
 end
    end
end

#push(id, time, data) ⇒ Object



485
486
487
# File 'lib/roby/log/server.rb', line 485

def push(id, time, data)
    @streams[id].push(time, data)
end

#quitObject



525
526
527
528
# File 'lib/roby/log/server.rb', line 525

def quit
    @streams = nil
    @server  = nil
end

#reinit(id) ⇒ Object



481
482
483
# File 'lib/roby/log/server.rb', line 481

def reinit(id)
    @streams[id].reinit = true
end

#removed_stream(id) ⇒ Object



438
439
440
441
# File 'lib/roby/log/server.rb', line 438

def removed_stream(id)
    @streams.delete(id)
    super if defined? super
end

#streamsObject



425
426
427
# File 'lib/roby/log/server.rb', line 425

def streams
    @streams.values
end

#subscribe(stream) ⇒ Object



461
462
463
# File 'lib/roby/log/server.rb', line 461

def subscribe(stream)
    @server.subscribe(stream.id, DRbObject.new(self))
end

#unsubscribe(stream) ⇒ Object



465
466
467
# File 'lib/roby/log/server.rb', line 465

def unsubscribe(stream)
    @server.unsubscribe(stream.id, DRbObject.new(self))
end