clean up logger calls
[god.git] / lib / god / socket.rb
blob3874030848151bad8440924a13346d2891075fa9
1 require 'drb'
3 # The God::Server oversees the DRb server which dishes out info on this God daemon.
5 module God
7   class Socket
8     attr_reader :port
9     
10     def self.socket_file(port)
11       "/tmp/god.#{port}.sock"
12     end
13     
14     def self.socket(port)
15       "drbunix://#{self.socket_file(port)}"
16     end
17     
18     def socket_file
19       self.class.socket_file(@port)
20     end
21     
22     def socket
23       self.class.socket(@port)
24     end
25     
26     def initialize(port = nil)
27       @port = port
28       start
29     end
30     
31     def ping
32       true
33     end
34     
35     def method_missing(*args, &block)
36       God.send(*args, &block)
37     end
38     
39     private
40     
41     def start
42       begin
43         @drb ||= DRb.start_service(self.socket, self)
44         applog(nil, :info, "Started on #{DRb.uri}")
45       rescue Errno::EADDRINUSE
46         DRb.start_service
47         server = DRbObject.new(nil, self.socket)
48         
49         begin
50           server.ping
51           abort "Socket #{self.socket} already in use by another instance of god"
52         rescue
53           File.delete(self.socket_file) rescue nil
54           @drb ||= DRb.start_service(self.socket, self)
55         end
56       end
57     end
58   end
60 end