Move some logic from electrum to daemon
Ultimate goal is to try and stop the daemon race at startup. Need to isolate logic of checking for server and creating one.
This commit is contained in:
parent
f6f7113978
commit
ec24087b5a
66
electrum
66
electrum
|
@ -69,12 +69,12 @@ if is_bundle or is_local or is_android:
|
||||||
imp.load_module('electrum_gui', *imp.find_module('gui'))
|
imp.load_module('electrum_gui', *imp.find_module('gui'))
|
||||||
|
|
||||||
|
|
||||||
from electrum import util
|
|
||||||
from electrum import SimpleConfig, Network, Wallet, WalletStorage
|
from electrum import SimpleConfig, Network, Wallet, WalletStorage
|
||||||
from electrum.util import print_msg, print_error, print_stderr, json_encode, json_decode, set_verbosity, InvalidPassword
|
from electrum.util import print_msg, print_stderr, json_encode, json_decode
|
||||||
|
from electrum.util import set_verbosity, InvalidPassword
|
||||||
from electrum.plugins import Plugins
|
from electrum.plugins import Plugins
|
||||||
from electrum.commands import get_parser, known_commands, Commands, config_variables
|
from electrum.commands import get_parser, known_commands, Commands, config_variables
|
||||||
from electrum.daemon import Daemon, get_daemon
|
from electrum.daemon import Daemon
|
||||||
|
|
||||||
|
|
||||||
# get password routine
|
# get password routine
|
||||||
|
@ -91,15 +91,6 @@ def prompt_password(prompt, confirm=True):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def init_gui(config, daemon, plugins):
|
|
||||||
gui_name = config.get('gui', 'qt')
|
|
||||||
if gui_name in ['lite', 'classic']:
|
|
||||||
gui_name = 'qt'
|
|
||||||
gui = __import__('electrum_gui.' + gui_name, fromlist=['electrum_gui'])
|
|
||||||
gui = gui.ElectrumGui(config, daemon, plugins)
|
|
||||||
return gui
|
|
||||||
|
|
||||||
|
|
||||||
def run_non_RPC(config):
|
def run_non_RPC(config):
|
||||||
cmdname = config.get('cmd')
|
cmdname = config.get('cmd')
|
||||||
|
|
||||||
|
@ -321,59 +312,20 @@ if __name__ == '__main__':
|
||||||
run_non_RPC(config)
|
run_non_RPC(config)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
# check if a daemon is running
|
|
||||||
server = get_daemon(config)
|
|
||||||
|
|
||||||
if cmdname == 'gui':
|
if cmdname == 'gui':
|
||||||
if server is not None:
|
result = Daemon.gui_command(config, config_options, plugins)
|
||||||
result = server.gui(config_options)
|
|
||||||
else:
|
|
||||||
daemon = Daemon(config)
|
|
||||||
daemon.start()
|
|
||||||
gui = init_gui(config, daemon, plugins)
|
|
||||||
daemon.gui = gui
|
|
||||||
gui.main()
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
elif cmdname == 'daemon':
|
elif cmdname == 'daemon':
|
||||||
if server is not None:
|
result = Daemon.daemon_command(config, config_options)
|
||||||
result = server.daemon(config_options)
|
|
||||||
else:
|
|
||||||
subcommand = config.get('subcommand')
|
|
||||||
if subcommand in ['status', 'stop']:
|
|
||||||
print_msg("Daemon not running")
|
|
||||||
sys.exit(1)
|
|
||||||
elif subcommand == 'start':
|
|
||||||
p = os.fork()
|
|
||||||
if p == 0:
|
|
||||||
daemon = Daemon(config)
|
|
||||||
if config.get('websocket_server'):
|
|
||||||
from electrum import websockets
|
|
||||||
websockets.WebSocketServer(config, daemon.network).start()
|
|
||||||
if config.get('requests_dir'):
|
|
||||||
util.check_www_dir(config.get('requests_dir'))
|
|
||||||
daemon.start()
|
|
||||||
daemon.join()
|
|
||||||
sys.exit(0)
|
|
||||||
else:
|
|
||||||
print_stderr("starting daemon (PID %d)"%p)
|
|
||||||
sys.exit(0)
|
|
||||||
else:
|
|
||||||
print_msg("syntax: electrum daemon <start|status|stop>")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# command line
|
# command line
|
||||||
init_cmdline(config_options)
|
init_cmdline(config_options)
|
||||||
if server is not None:
|
run_offline, result = Daemon.cmdline_command(config, config_options)
|
||||||
result = server.run_cmdline(config_options)
|
if run_offline:
|
||||||
else:
|
|
||||||
cmd = known_commands[cmdname]
|
cmd = known_commands[cmdname]
|
||||||
if cmd.requires_network:
|
if cmd.requires_network:
|
||||||
print_msg("Network daemon is not running. Try 'electrum daemon start'")
|
print_msg("Daemon not running; try 'electrum daemon start'")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
result = run_offline_command(config, config_options)
|
||||||
result = run_offline_command(config, config_options)
|
|
||||||
|
|
||||||
# print result
|
# print result
|
||||||
if type(result) in [str, unicode]:
|
if type(result) in [str, unicode]:
|
||||||
|
|
|
@ -16,13 +16,16 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import ast, os
|
import ast
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
import jsonrpclib
|
import jsonrpclib
|
||||||
from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCServer, SimpleJSONRPCRequestHandler
|
from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCServer, SimpleJSONRPCRequestHandler
|
||||||
|
|
||||||
from network import Network
|
from network import Network
|
||||||
from util import json_decode, DaemonThread
|
from util import check_www_dir, json_decode, DaemonThread
|
||||||
|
from util import print_msg, print_error, print_stderr
|
||||||
from wallet import WalletStorage, Wallet
|
from wallet import WalletStorage, Wallet
|
||||||
from wizard import WizardBase
|
from wizard import WizardBase
|
||||||
from commands import known_commands, Commands
|
from commands import known_commands, Commands
|
||||||
|
@ -177,3 +180,59 @@ class Daemon(DaemonThread):
|
||||||
for k, wallet in self.wallets.items():
|
for k, wallet in self.wallets.items():
|
||||||
wallet.stop_threads()
|
wallet.stop_threads()
|
||||||
DaemonThread.stop(self)
|
DaemonThread.stop(self)
|
||||||
|
|
||||||
|
def init_gui(self, config, plugins):
|
||||||
|
gui_name = config.get('gui', 'qt')
|
||||||
|
if gui_name in ['lite', 'classic']:
|
||||||
|
gui_name = 'qt'
|
||||||
|
gui = __import__('electrum_gui.' + gui_name, fromlist=['electrum_gui'])
|
||||||
|
self.gui = gui.ElectrumGui(config, self, plugins)
|
||||||
|
self.gui.main()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def gui_command(config, config_options, plugins):
|
||||||
|
server = get_daemon(config)
|
||||||
|
if server is not None:
|
||||||
|
return server.gui(config_options)
|
||||||
|
|
||||||
|
daemon = Daemon(config)
|
||||||
|
daemon.start()
|
||||||
|
daemon.init_gui(config, plugins)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def cmdline_command(config, config_options):
|
||||||
|
server = get_daemon(config)
|
||||||
|
if server is not None:
|
||||||
|
return False, server.run_cmdline(config_options)
|
||||||
|
|
||||||
|
return True, None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def daemon_command(config, config_options):
|
||||||
|
server = get_daemon(config)
|
||||||
|
if server is not None:
|
||||||
|
return server.daemon(config_options)
|
||||||
|
|
||||||
|
subcommand = config.get('subcommand')
|
||||||
|
if subcommand in ['status', 'stop']:
|
||||||
|
print_msg("Daemon not running")
|
||||||
|
sys.exit(1)
|
||||||
|
elif subcommand == 'start':
|
||||||
|
pid = os.fork()
|
||||||
|
if pid == 0:
|
||||||
|
daemon = Daemon(config)
|
||||||
|
if config.get('websocket_server'):
|
||||||
|
from electrum import websockets
|
||||||
|
websockets.WebSocketServer(config, daemon.network).start()
|
||||||
|
if config.get('requests_dir'):
|
||||||
|
check_www_dir(config.get('requests_dir'))
|
||||||
|
daemon.start()
|
||||||
|
daemon.join()
|
||||||
|
sys.exit(0)
|
||||||
|
else:
|
||||||
|
print_stderr("starting daemon (PID %d)" % pid)
|
||||||
|
sys.exit(0)
|
||||||
|
else:
|
||||||
|
print_msg("syntax: electrum daemon <start|status|stop>")
|
||||||
|
sys.exit(1)
|
||||||
|
|
Loading…
Reference in New Issue