pangdudu-ruby-dbus-daemon 0.1.2
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 +36 -0
- data/lib/dbus-daemon.rb +84 -0
- metadata +54 -0
data/README.rdoc
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
= Ruby-Dbus-Daemon
|
2
|
+
|
3
|
+
Hi girls and boys!
|
4
|
+
|
5
|
+
This is a small wrapper lib around the dbus-daemon executable.
|
6
|
+
|
7
|
+
== Installation
|
8
|
+
|
9
|
+
sudo gem install pangdudu-ruby-dbus-daemon --source=http://gems.github.com
|
10
|
+
|
11
|
+
== Usage
|
12
|
+
|
13
|
+
to start a dbus daemon:
|
14
|
+
|
15
|
+
require 'dbus-daemon'
|
16
|
+
dbd = DbusDaemon.new "dbus.configfile.conf"
|
17
|
+
dbd.start_daemon
|
18
|
+
|
19
|
+
to kill the daemon (and the processes that spawned on the console):
|
20
|
+
|
21
|
+
dbd.stop_daemon
|
22
|
+
|
23
|
+
== Warning
|
24
|
+
|
25
|
+
If you CTRL-C your app, the spawned daemon will continue running. You'll need to
|
26
|
+
"ps xaf | grep dbus-daemon" and "kill -9 pid" on your own. Got no time for a pretty
|
27
|
+
solution right now. Once ruby-dbus is further on the way, i'll rewrite it with a
|
28
|
+
real *.so and a ruby lib wrapping it.
|
29
|
+
|
30
|
+
== Rule the universe!
|
31
|
+
|
32
|
+
Ride the dbus with me, yeah yeah.
|
33
|
+
|
34
|
+
== License
|
35
|
+
|
36
|
+
GPL -> http://www.gnu.org/licenses/gpl.txt
|
data/lib/dbus-daemon.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
=begin
|
2
|
+
Ok, this is a really simple wrapper around the dbus-daemon console tool
|
3
|
+
|
4
|
+
It's awfully dirty, but I need to concentrate on other stuff now :)
|
5
|
+
|
6
|
+
Should become an app wrapping the .c into a nice .so
|
7
|
+
=end
|
8
|
+
|
9
|
+
class DbusDaemon
|
10
|
+
attr_accessor :config_file,:output,:thread
|
11
|
+
|
12
|
+
def initialize config_file #a dbus config file
|
13
|
+
@daemon = `which dbus-daemon`.strip #search for the daemon
|
14
|
+
@config_file = config_file
|
15
|
+
#if the specified config file does not exist, break!
|
16
|
+
unless File.exist? @config_file
|
17
|
+
puts "ERROR: dbus-daemon: specified config-file: #{@config_file}, not readable."
|
18
|
+
return nil
|
19
|
+
end
|
20
|
+
@cmd = "#{@daemon} --config-file=#{@config_file}"
|
21
|
+
#no daemon found, sorry
|
22
|
+
if @daemon.empty?
|
23
|
+
puts "ERROR: dbus-daemon: no executable dbus-daemon found, sorry!"
|
24
|
+
return nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
#start the dbus-daemon
|
30
|
+
def start_daemon
|
31
|
+
got_twins = got_twin_daemon?
|
32
|
+
unless got_twins
|
33
|
+
#create a new thread for the daemon
|
34
|
+
@thread = Thread.new do
|
35
|
+
begin
|
36
|
+
@output = `#{@cmd}`
|
37
|
+
rescue
|
38
|
+
puts "ERROR: dbus-daemon: dbus-daemon couldn't be started!"
|
39
|
+
return nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
#just wait a really short time, so the console can answer
|
43
|
+
sleep 0.1
|
44
|
+
#ok, the output of the `` will be in @output
|
45
|
+
puts "INFO: #{@cmd} is running!" if @output.nil? #so @output.nil? means, the daemon is running
|
46
|
+
unless @output.nil?
|
47
|
+
#@output.empty? = true means, we had an error, and it went to stderr
|
48
|
+
puts "ERROR: dbus-daemon: dbus-daemon couldn't be started!" if @output.empty?
|
49
|
+
#if there's something in @output (maybe we called --version), show it
|
50
|
+
puts "INFO: dbus-daemon says: \n\t#{@output}" unless @output.empty?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
puts "WARNING: dbus-daemon: #{@cmd} not started, already seems to be running." if got_twins
|
54
|
+
end
|
55
|
+
|
56
|
+
#killing a ruby thread that spawned sth. on the console is not that easy to kill
|
57
|
+
def stop_daemon
|
58
|
+
@thread.kill
|
59
|
+
#HACK, ok, this is not only dangerous, but hackish, we sould use ruby 1.9...
|
60
|
+
pids_tokill = []
|
61
|
+
ps = `ps x | grep "#{@cmd}"`.split("\n")
|
62
|
+
ps.each {|p| pids_tokill << p.split("pts/")[0].to_i}
|
63
|
+
#oki, pids_tokill now holds a list of pids, that we probably started, we'll kill them now
|
64
|
+
pids_tokill.each {|p| `kill -9 #{p}`}
|
65
|
+
end
|
66
|
+
|
67
|
+
#check if another daemon doing the same is already running
|
68
|
+
def got_twin_daemon?
|
69
|
+
pids = []
|
70
|
+
ps = `ps x | grep "#{@cmd}"`.split("\n")
|
71
|
+
ps.each {|p| pids << p.split("pts/")[0].to_i unless p.include? "grep"}
|
72
|
+
return false if pids.empty?
|
73
|
+
#failsafe
|
74
|
+
return true
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
=begin
|
79
|
+
#for testing
|
80
|
+
dbd = DbusDaemon.new "somedbusconfigfile.conf"
|
81
|
+
dbd.start_daemon
|
82
|
+
sleep 2
|
83
|
+
dbd.stop_daemon
|
84
|
+
=end
|
metadata
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pangdudu-ruby-dbus-daemon
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- pangdudu
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-07-26 00:00:00 -07:00
|
13
|
+
default_executable: ruby-dbus-daemon
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: a small dbus-daemon wrapper for ruby.
|
17
|
+
email: pangdudu@github
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README.rdoc
|
24
|
+
files:
|
25
|
+
- README.rdoc
|
26
|
+
- lib/dbus-daemon.rb
|
27
|
+
has_rdoc: true
|
28
|
+
homepage: http://github.com/pangdudu/ruby-dbus-daemon
|
29
|
+
post_install_message:
|
30
|
+
rdoc_options: []
|
31
|
+
|
32
|
+
require_paths:
|
33
|
+
- lib
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: "0"
|
39
|
+
version:
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "0"
|
45
|
+
version:
|
46
|
+
requirements: []
|
47
|
+
|
48
|
+
rubyforge_project: http://github.com/pangdudu/ruby-dbus-daemon
|
49
|
+
rubygems_version: 1.2.0
|
50
|
+
signing_key:
|
51
|
+
specification_version: 2
|
52
|
+
summary: ride the ruby-dbus-daemon, jiiiihaaaa!
|
53
|
+
test_files: []
|
54
|
+
|