move daemon spawning code into NetworkProxy class
This commit is contained in:
parent
0bb16f0836
commit
7dd296273f
31
electrum
31
electrum
|
@ -110,38 +110,13 @@ def print_help_cb(self, opt, value, parser):
|
|||
def run_command(cmd, password=None, args=[]):
|
||||
import socket
|
||||
if cmd.requires_network and not options.offline:
|
||||
daemon_started = False
|
||||
while True:
|
||||
try:
|
||||
network = NetworkProxy(config)
|
||||
break
|
||||
except socket.error:
|
||||
if cmd != 'daemon':
|
||||
if not daemon_started:
|
||||
print "Starting daemon [%s]"%config.get('server')
|
||||
daemon_started = True
|
||||
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 = NetworkServer(config)
|
||||
try:
|
||||
server.main_loop()
|
||||
except KeyboardInterrupt:
|
||||
print "Ctrl C - Stopping server"
|
||||
sys.exit(1)
|
||||
sys.exit(0)
|
||||
else:
|
||||
time.sleep(0.1)
|
||||
else:
|
||||
if not network.start(start_daemon= (True if cmd.name!='daemon' else False)):
|
||||
print "Daemon not running"
|
||||
sys.exit(1)
|
||||
|
||||
network = network
|
||||
network.start()
|
||||
|
||||
|
||||
if wallet:
|
||||
wallet.start_threads(network)
|
||||
wallet.update()
|
||||
|
|
|
@ -27,20 +27,20 @@ import json
|
|||
import Queue
|
||||
from network import Network
|
||||
from util import print_msg
|
||||
from simple_config import SimpleConfig
|
||||
|
||||
|
||||
class NetworkProxy(threading.Thread):
|
||||
# connects to daemon
|
||||
# sends requests, runs callbacks
|
||||
|
||||
def __init__(self, config):
|
||||
def __init__(self, config = {}):
|
||||
threading.Thread.__init__(self)
|
||||
self.daemon = True
|
||||
self.config = config
|
||||
self.config = SimpleConfig(config) if type(config) == type({}) else config
|
||||
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
self.daemon_port = config.get('daemon_port', 8000)
|
||||
self.socket.connect(('', self.daemon_port))
|
||||
self.message_id = 0
|
||||
self.unanswered_requests = {}
|
||||
self.subscriptions = {}
|
||||
|
@ -48,6 +48,40 @@ class NetworkProxy(threading.Thread):
|
|||
self.lock = threading.Lock()
|
||||
|
||||
|
||||
def start(self, start_daemon=False):
|
||||
daemon_started = False
|
||||
while True:
|
||||
try:
|
||||
self.socket.connect(('', self.daemon_port))
|
||||
threading.Thread.start(self)
|
||||
return True
|
||||
|
||||
except socket.error:
|
||||
if not start_daemon:
|
||||
return False
|
||||
|
||||
elif not daemon_started:
|
||||
print "Starting daemon [%s]"%self.config.get('server')
|
||||
daemon_started = True
|
||||
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 = NetworkServer(self.config)
|
||||
try:
|
||||
server.main_loop()
|
||||
except KeyboardInterrupt:
|
||||
print "Ctrl C - Stopping server"
|
||||
sys.exit(1)
|
||||
sys.exit(0)
|
||||
else:
|
||||
time.sleep(0.1)
|
||||
|
||||
|
||||
|
||||
def parse_json(self, message):
|
||||
s = message.find('\n')
|
||||
if s==-1:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
from electrum import Network
|
||||
from electrum import NetworkProxy, print_json
|
||||
|
||||
try:
|
||||
addr = sys.argv[1]
|
||||
|
@ -9,9 +9,8 @@ except Exception:
|
|||
print "usage: get_history <bitcoin_address>"
|
||||
sys.exit(1)
|
||||
|
||||
n = Network()
|
||||
n.start(wait=True)
|
||||
n = NetworkProxy()
|
||||
n.start(start_daemon=True)
|
||||
h = n.synchronous_get([ ('blockchain.address.get_history',[addr]) ])[0]
|
||||
for item in h:
|
||||
print item['tx_hash'], item['height']
|
||||
print_json(h)
|
||||
|
||||
|
|
Loading…
Reference in New Issue