pangdudu-robots 0.2.3 → 0.2.3.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/README.rdoc CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  Local messaging with dbus working, need to make service avahi discoverable.
4
4
 
5
- Well, fork, dbus is not really remote capable right now. Ohh, I so much don't want to write that myself,... ;(...
6
-
7
5
  Let's try to built a nice easy to use multiagent framework
8
6
  based on all the cool stuff we can get for ruby.
9
7
 
@@ -11,18 +9,17 @@ rObOts!
11
9
 
12
10
  == Installation
13
11
 
14
- #on ubuntu you need stuff like this to build dbus
15
- sudo apt-get install avahi-daemon avahi-utils libavahi-client-dev libavahi-common-dev libavahi-compat-libdnssd-dev libnss-mdns libdbus-1-dev libdbus-glib-1-dev
16
- #essential gems
17
- sudo gem install pangdudu-ruby-dbus --source=http://gems.github.com
18
- sudo gem install pangdudu-ruby-dbus-daemon --source=http://gems.github.com
19
- sudo gem install pangdudu-rofl --source=http://gems.github.com
20
12
  sudo gem install pangdudu-robots --source=http://gems.github.com
21
- #for xml parsing and building
22
- sudo gem install hpricot builder
23
13
 
24
14
  == Usage
25
15
 
16
+ sorry, this section was actualy missing before.
17
+
18
+ oki, if you choose sessiontype 'robots', start the daemon with the 'start_dbus_session.sh'
19
+ script in 'config/'.
20
+
21
+ then start one of the robots from examples or the robots_prototype.
22
+
26
23
  == Rule the universe!
27
24
 
28
25
  Robots are coming!
@@ -1,2 +1,2 @@
1
1
  #!/bin/bash
2
- dbus-daemon --config-file=$HOME/.robots/config/remote.session.dbus.conf
2
+ dbus-daemon --print-address --config-file=$HOME/.robots/config/remote.session.dbus.conf
data/lib/robots.rb CHANGED
@@ -28,7 +28,7 @@ module Robots
28
28
  @haz_robots = @robotsagent.nil?
29
29
  if @haz_robots
30
30
  @robotsagent = Robot.new
31
- @hostname = @robotsagent.hostname
31
+ @hostname = @robotsagent.config[:hostname]
32
32
  @robotsagent.run
33
33
  @robotsagent.add_listener self
34
34
  end
data/lib/robots_agent.rb CHANGED
@@ -1,35 +1,38 @@
1
1
  require 'rubygems'
2
2
  require 'dbus' #gem install pangdudu-ruby-dbus --source=http://gems.github.com
3
- require 'dbus-daemon' #gem install pangdudu-ruby-dbus-daemon --source=http://gems.github.com
4
3
  require 'rofl' #gem install pangdudu-rofl --source=http://gems.github.com
5
4
  #local requires, actually don't need them, just to let you know whats going on
6
5
  require 'robots_infrastructure'
7
6
 
8
7
  class Robot
9
- attr_accessor :dbusdaemon #in case we use a custom dbus-daemon
10
8
  attr_accessor :avahi #for mdns service discovery
11
9
  attr_accessor :emitters,:infrastructure,:listeners #stuff a robot needs
12
- attr_accessor :hostname #infos
10
+ attr_accessor :config #hash with lots of config magic inside
13
11
 
14
12
  def initialize
15
13
  dlog "new Robot initialized."
16
- @localhost = Socket.gethostname
17
- @daemonhost = "127.0.0.1"
18
- @remote = false #if you want to connect remotely, change this value
19
- @sessiontype = "robots" #could be session,system or robots (use robots, if you want it to work over multiple hosts)
20
- @daemonconfig = "~/.robots/config/remote.session.dbus.conf" #listens on tcp
21
- @robots_socket_name = "tcp:host=#{@daemonhost},port=2687,family=ipv4" #look at: ~/.robots/config/remote.session.dbus.conf
22
- @robotsservice = "org.robots.Service"
23
- @emitterpath = "/org/robots/Service/Emitter"
24
- @emitterinterface = "org.robots.Service.EmitterInterface"
25
- @coreservice, @dbussession, @dbusdaemon = nil,nil,nil
14
+ @config = get_default_config
15
+ @coreservice, @dbussession = nil,nil
26
16
  @listeners,@emitters,@infrastructure = [],{},{}
27
17
  @servicetypes = fill_servicetypes #refer to robots_infrastructure.rb
28
18
  end
29
19
 
20
+ def get_default_config
21
+ config = {}
22
+ config[:localhost] = Socket.gethostname
23
+ config[:daemonhost] = "127.0.0.1"
24
+ config[:daemonport] = "2687"
25
+ config[:remote] = false #if you want to connect remotely, change this value
26
+ config[:sessiontype] = "robots" #could be session,system or robots (use robots, if you want it to work over multiple hosts)
27
+ config[:robots_socket_name] = "tcp:host=#{config[:daemonhost]},port=#{config[:daemonport]},family=ipv4" #look at: ~/.robots/config/remote.session.dbus.conf
28
+ config[:robotsservice] = "org.robots.Service"
29
+ config[:emitterpath] = "/org/robots/Service/Emitter"
30
+ config[:emitterinterface] = "org.robots.Service.EmitterInterface"
31
+ return config
32
+ end
33
+
30
34
  #start the mojo
31
35
  def run
32
- check_for_dbus_daemon if @sessiontype.eql? "robots" #will start a dbus-daemon if necessary
33
36
  setup_robots_service
34
37
  register_callbacks
35
38
  #test_messages; #main_loop;
@@ -37,11 +40,11 @@ class Robot
37
40
 
38
41
  #setup the robots service
39
42
  def setup_robots_service
40
- robots_running = running? @robotsservice
43
+ robots_running = running? @config[:robotsservice]
41
44
  dlog "robots service has already been started." if robots_running
42
45
  unless robots_running
43
46
  ilog "will now setup robots service infrastructure."
44
- start_core_service @robotsservice
47
+ start_core_service @config[:robotsservice]
45
48
  init_robots_infrastructure
46
49
  end
47
50
  get_robots_infrastructure
@@ -53,45 +56,21 @@ class Robot
53
56
  the following methods are only called, if the robots service is not already running
54
57
  =end
55
58
 
56
- #check if a dbus-daemon suitable for robots is running, otherwise start one
57
- def check_for_dbus_daemon
58
- unless @remote
59
- @daemonconfig = File.expand_path(@daemonconfig) #dbus-daemon won't accept otherwise
60
- #ok, no config file, not good!
61
- unless File.exist? @daemonconfig
62
- wlog "no daemon config: #{@daemonconfig}!"
63
- wlog "will sleep for 5 seconds,..."
64
- sleep 5 #give the user time to realize
65
- end
66
- #if the config file is there
67
- if File.exist? @daemonconfig
68
- @dbusdaemon = DbusDaemon.new @daemonconfig
69
- got_twins = @dbusdaemon.got_twin_daemon? #check if a daemon like this is already running
70
- ilog "custom dbus-daemon is already running." if got_twins #inform user
71
- unless got_twins #no suitable dbus-daemon running, start one
72
- @dbusdaemon.start_daemon
73
- ilog "custom dbus-daemon started and running, check \"ps x | grep \"dbus-daemon\", if plan a CTRL-C."
74
- #@dbusdaemon.stop_daemon #must get called sometimes, super nasty, use " ps x | grep "dbus-daemon" "
75
- end
76
- end
77
- end
78
- end
79
-
80
59
  #setup the infrastructure objects for communication
81
60
  def init_robots_infrastructure
82
- emitter = Emitter.new(@emitterpath,self)
61
+ emitter = Emitter.new(config[:emitterpath],self)
83
62
  @coreservice.export(emitter)
84
63
  @infrastructure["emitter"] = emitter
85
64
  end
86
65
 
87
66
  #get instances of our infrastructure objects
88
67
  def get_robots_infrastructure
89
- emitter = get_object_from_service @robotsservice,@emitterpath,@emitterinterface
68
+ emitter = get_object_from_service @config[:robotsservice],@config[:emitterpath],@config[:emitterinterface]
90
69
  @emitters["robots"] = emitter
91
70
  end
92
71
 
93
72
  #start a service
94
- def start_core_service service_name=@robotsservice
73
+ def start_core_service service_name=@config[:robotsservice]
95
74
  bus = get_bus
96
75
  #first of all check if the service we want to launch is already started
97
76
  dlog "skipping service: #{service_name} has already been started." if running? service_name
@@ -147,7 +126,7 @@ class Robot
147
126
  dlog "registering callback for #{name} on path #{emitter.path}"
148
127
  mr = DBus::MatchRule.new
149
128
  mr.type = "signal"
150
- mr.interface = "org.ruby.Service.EmitterInterface"
129
+ mr.interface = @config[:emitterinterface]
151
130
  mr.path = emitter.path
152
131
  bus.add_match(mr) { |msg| emitter_proxy_callback msg }
153
132
  end
@@ -197,6 +176,7 @@ class Robot
197
176
  #send
198
177
  def send_msg msg
199
178
  @emitters["robots"].send_message(msg) unless @emitters["robots"].nil?
179
+ wlog "emitter is nil, can not send message." if @emitters["robots"].nil?
200
180
  end
201
181
 
202
182
  #add a listener
@@ -215,11 +195,11 @@ class Robot
215
195
  #get the bus session, cleaner then creating new sessions all over
216
196
  def get_bus
217
197
  if @dbussession.nil?
218
- @dbussession = DBus::SystemBus.instance if @sessiontype.eql? "system"
219
- @dbussession = DBus::SessionBus.instance if @sessiontype.eql? "session"
220
- if @sessiontype.eql? "robots"
221
- DBus.const_set("SessionSocketName", @robots_socket_name) #overwrite the modules constant
222
- evil_hack_remote_cookie if @remote #i need not say more,...
198
+ @dbussession = DBus::SystemBus.instance if @config[:sessiontype].eql? "system"
199
+ @dbussession = DBus::SessionBus.instance if @config[:sessiontype].eql? "session"
200
+ if @config[:sessiontype].eql? "robots"
201
+ DBus.const_set("SessionSocketName", @config[:robots_socket_name]) #overwrite the modules constant
202
+ evil_hack_remote_cookie if @config[:remote] #i need not say more,...
223
203
  @dbussession = DBus::SessionBus.instance
224
204
  end
225
205
  end
@@ -233,8 +213,8 @@ class Robot
233
213
 
234
214
  #because dbus remote auth still betrays us, we need to hack it
235
215
  def evil_hack_remote_cookie
236
- if @robots_socket_name.include? "tcp:"
237
- af, port, daemon_name, daemon_addr = (Socket::getaddrinfo(@daemonhost, 2687)).first
216
+ if @config[:robots_socket_name].include? "tcp:"
217
+ af, port, daemon_name, daemon_addr = (Socket::getaddrinfo(@config[:daemonhost],@config[:daemonhost].to_i)).first
238
218
  ilog "Trying to get/hack remote cookie from: #{daemon_name}."
239
219
  begin
240
220
  cookiepath = "#{ENV['HOME']}/.dbus-keyrings/org_freedesktop_general"
@@ -0,0 +1,23 @@
1
+ #check if a dbus-daemon suitable for robots is running, otherwise start one
2
+ def check_for_dbus_daemon
3
+ unless @remote
4
+ @daemonconfig = File.expand_path(@daemonconfig) #dbus-daemon won't accept otherwise
5
+ #ok, no config file, not good!
6
+ unless File.exist? @daemonconfig
7
+ wlog "no daemon config: #{@daemonconfig}!"
8
+ wlog "will sleep for 5 seconds,..."
9
+ sleep 5 #give the user time to realize
10
+ end
11
+ #if the config file is there
12
+ if File.exist? @daemonconfig
13
+ @dbusdaemon = DbusDaemon.new @daemonconfig
14
+ got_twins = @dbusdaemon.got_twin_daemon? #check if a daemon like this is already running
15
+ ilog "custom dbus-daemon is already running." if got_twins #inform user
16
+ unless got_twins #no suitable dbus-daemon running, start one
17
+ @dbusdaemon.start_daemon
18
+ ilog "custom dbus-daemon started and running, check \"ps x | grep \"dbus-daemon\", if plan a CTRL-C."
19
+ #@dbusdaemon.stop_daemon #must get called sometimes, super nasty, use " ps x | grep "dbus-daemon" "
20
+ end
21
+ end
22
+ end
23
+ end
@@ -17,7 +17,7 @@ class Emitter < DBus::Object
17
17
  end
18
18
 
19
19
  #create an dbus interface
20
- dbus_interface "org.ruby.Service.EmitterInterface" do
20
+ dbus_interface "org.robots.Service.EmitterInterface" do
21
21
  #creates a signal in the interface:
22
22
  dbus_signal :newMessage, "msgbody:s"
23
23
  #creates an emit method in the interface:
@@ -44,5 +44,6 @@ rp.release_robots #start the robot agent module
44
44
  loop do
45
45
  sleep 1
46
46
  #send an xml message over the system
47
- rp.send_msg rp.create_xml_alive_msg
47
+ alive_msg = rp.create_xml_alive_msg
48
+ rp.send_msg alive_msg
48
49
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pangdudu-robots
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - pangdudu
@@ -42,6 +42,26 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: "0"
44
44
  version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: hpricot
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: builder
57
+ type: :runtime
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
45
65
  description: robots!
46
66
  email: pangdudu@github
47
67
  executables:
@@ -58,6 +78,7 @@ files:
58
78
  - lib/robots_infrastructure.rb
59
79
  - lib/robots_xml.rb
60
80
  - lib/robots_prototype.rb
81
+ - lib/robots_daemon.rb
61
82
  - config/org.robots.service.conf
62
83
  - config/remote.session.dbus.conf
63
84
  - config/start_dbus_session.sh