json rpc daemon
This commit is contained in:
83
electrum
83
electrum
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user