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