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