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:
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!")
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':
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)