1
0

json rpc daemon

This commit is contained in:
ThomasV
2014-01-23 17:06:47 +01:00
parent 989a95bf25
commit d4fbe85d7d
5 changed files with 126 additions and 53 deletions

View File

@@ -105,15 +105,34 @@ def print_help_cb(self, opt, value, parser):
def run_command(cmd, password=None, args=[]):
import xmlrpclib, socket
cmd_runner = Commands(wallet, network)
func = getattr(cmd_runner, cmd)
func = getattr(cmd_runner, cmd.name)
cmd_runner.password = password
if cmd.requires_network and not options.offline:
cmd_runner.network = xmlrpclib.ServerProxy('http://localhost:8000')
if wallet:
wallet.start_threads(cmd_runner.network)
wallet.update()
else:
cmd_runner.network = None
try:
result = func(*args[1:])
except socket.error:
print "Network server not found."
sys.exit(1)
except Exception:
traceback.print_exc(file=sys.stdout)
sys.exit(1)
if cmd.requires_network and not options.offline:
if wallet:
wallet.stop_threads()
if type(result) == str:
util.print_msg(result)
elif result is not None:
@@ -201,6 +220,11 @@ if __name__ == '__main__':
print_msg("Type 'electrum create' to create a new wallet, or provide a path to a wallet with the -w option")
sys.exit(0)
if cmd.name in ['create', 'restore']:
if storage.file_exists:
sys.exit("Error: Remove the existing wallet first!")
@@ -345,19 +369,41 @@ if __name__ == '__main__':
print_msg("Warning: Final argument was reconstructed from several arguments:", repr(message))
args = args[0:cmd.min_args] + [message]
# open session
if cmd.requires_network and not options.offline:
network = Network(config)
if not network.start(wait=True):
print_msg("Not connected, aborting.")
sys.exit(1)
print_error("Connected to " + network.interface.connection_msg)
if wallet:
wallet.start_threads(network)
wallet.update()
else:
network = None
if cmd.name == 'start_network':
pid = os.fork()
if (pid == 0): # The first child.
os.chdir("/")
os.setsid()
os.umask(0)
pid2 = os.fork()
if (pid2 == 0): # Second child
from SimpleXMLRPCServer import SimpleXMLRPCServer
# start the daemon
network = Network(config)
if not network.start(wait=True):
print_msg("Not connected, aborting.")
sys.exit(1)
print_msg("Connected to " + network.interface.connection_msg)
server = SimpleXMLRPCServer(('localhost',8000), allow_none=True, logRequests=False)
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')
server.running = True
while server.running:
server.handle_request()
print_msg("Server stopped")
sys.exit(0)
else:
sys.exit(0)
else:
sys.exit(0)
# run the command
if cmd.name == 'deseed':
@@ -394,11 +440,8 @@ if __name__ == '__main__':
wallet.update_password(password, new_password)
else:
run_command(cmd.name, password, args)
run_command(cmd, password, args)
if network:
if wallet:
wallet.stop_threads()
network.stop()
time.sleep(0.1)
sys.exit(0)
time.sleep(0.1)
sys.exit(0)