return config
-def run_rpc_command(cmd, stratum_tcp_port):
+def run_rpc_command(params):
+ cmd = params[0]
import xmlrpclib
server = xmlrpclib.ServerProxy('http://localhost:8000')
func = getattr(server, cmd)
try:
- r = func()
+ r = func(*params[1:])
except socket.error:
print "server not running"
sys.exit(1)
"subscriptions": len(s.subscriptions)},
dispatcher.request_dispatcher.get_sessions())
-def cmd_debug():
- try:
- s = request['params'][1]
- except:
- s = None
-
+def cmd_debug(s):
if s:
from guppy import hpy
h = hpy()
assert ssl_certfile and ssl_keyfile
if len(sys.argv) > 1:
- run_rpc_command(sys.argv[1], stratum_tcp_port)
+ run_rpc_command(sys.argv[1:])
sys.exit(0)
try:
dispatcher = Dispatcher(config)
shared = dispatcher.shared
+ # handle termination signals
+ import signal
+ def handler(signum = None, frame = None):
+ print_log('Signal handler called with signal', signum)
+ shared.stop()
+ for sig in [signal.SIGTERM, signal.SIGHUP, signal.SIGQUIT]:
+ signal.signal(sig, handler)
+
+
# Create and register processors
chain_proc = BlockchainProcessor(config, shared)
dispatcher.register('blockchain', chain_proc)
for server in transports:
server.start()
-
-
- from SimpleXMLRPCServer import SimpleXMLRPCServer
+ from SimpleXMLRPCServer import SimpleXMLRPCServer
server = SimpleXMLRPCServer(('localhost',8000), allow_none=True, logRequests=False)
server.register_function(lambda: os.getpid(), 'getpid')
server.register_function(shared.stop, 'stop')
server.register_function(cmd_info, 'info')
server.register_function(cmd_debug, 'debug')
+ server.socket.settimeout(1)
while not shared.stopped():
try:
server.handle_request()
+ except socket.timeout:
+ continue
except:
shared.stop()