require 'dbus' class Exception def pp STDERR.puts self.inspect self.backtrace.each{|l| STDERR.puts " " + l } end end $bus = DBus::SessionBus.instance $path = %w(net luon trac rubydbus testsrv) $cli_path = %w(net luon trac rubydbus testcli) $service = $path.join "." $cli_service = $cli_path.join "." class TestCli < DBus::Object dbus_interface ($cli_path.join '.') do dbus_method :RecvToken, "in server:o, in token:u" do |server,token| begin STDERR.puts "RecvToken #{server}, #{token}" t = Thread.new { Thread.stop STDERR.puts "Query thread #{server}, #{token}" loop { sleep 1 begin STDERR.puts "Data: #{@server.GetData @token}" exit 0 rescue Exception pp $! end } } @server = service.object server @server.introspect @server.default_iface = $path.join '.' @token = token @server.AckToken @token t.wakeup rescue Exception pp $! end end end end $object = TestCli.new ('/' + $cli_path.join('/')) $service = $bus.service $service $cli_service = $bus.request_service $cli_service $cli_service.export $object server = $service.object ('/' + $path.join('/')) server.introspect server.default_iface = $path.join '.' server.Register $object.path loop = DBus::Main.new loop << $bus loop.run