1
0

daemon; initial commit

This commit is contained in:
ThomasV
2014-03-10 16:16:27 +01:00
parent 55e4aa2a47
commit 6e30894af6
5 changed files with 322 additions and 64 deletions

View File

@@ -114,15 +114,16 @@ def run_command(cmd, password=None, args=[]):
cmd_runner.password = password
if cmd.requires_network and not options.offline:
cmd_runner.network = xmlrpclib.ServerProxy('http://localhost:8000')
while True:
try:
if cmd_runner.network.ping() == 'pong':
break
cmd_runner.network = NetworkProxy(config)
cmd_runner.network.start()
break
except socket.error:
if cmd.name != 'daemon':
start_daemon()
print "starting daemon"
start_daemon(config)
else:
print "Daemon not running"
sys.exit(1)
@@ -133,6 +134,7 @@ def run_command(cmd, password=None, args=[]):
else:
cmd_runner.network = None
try:
result = func(*args[1:])
except Exception:
@@ -153,50 +155,7 @@ def run_command(cmd, password=None, args=[]):
def start_server():
network = Network(config)
if not network.start(wait=True):
print_msg("Not connected, aborting.")
sys.exit(1)
print_msg("Network daemon connected to " + network.interface.connection_msg)
from SimpleXMLRPCServer import SimpleXMLRPCServer
server = SimpleXMLRPCServer(('localhost',8000), allow_none=True, logRequests=False)
server.network = network
server.register_function(lambda: 'pong', 'ping')
server.register_function(network.synchronous_get, 'synchronous_get')
server.register_function(network.get_servers, 'get_servers')
server.register_function(network.main_server, 'main_server')
server.register_function(network.send, 'send')
server.register_function(network.subscribe, 'subscribe')
server.register_function(network.is_connected, 'is_connected')
server.register_function(network.is_up_to_date, 'is_up_to_date')
server.register_function(lambda: setattr(server,'running', False), 'stop')
return server
def start_daemon():
pid = os.fork()
if (pid == 0): # The first child.
os.chdir("/")
os.setsid()
os.umask(0)
pid2 = os.fork()
if (pid2 == 0): # Second child
server = start_server()
server.running = True
timeout = 60
t0 = time.time()
server.socket.settimeout(timeout)
while server.running:
server.handle_request()
t = time.time()
if t - t0 > 0.9*timeout:
break
if not server.network.is_connected():
break
t0 = t
sys.exit(0)
time.sleep(2)
if __name__ == '__main__':