add a separate channel for server commands
authorThomasV <thomasv1@gmx.de>
Sat, 8 Mar 2014 14:20:51 +0000 (15:20 +0100)
committerThomasV <thomasv1@gmx.de>
Sat, 8 Mar 2014 14:20:51 +0000 (15:20 +0100)
backends/irc/__init__.py
server.py

index 571aedb..b401462 100644 (file)
@@ -158,7 +158,6 @@ class ServerProcessor(Processor):
         Processor.__init__(self)
         self.daemon = True
         self.banner = config.get('server', 'banner')
-        self.password = config.get('server', 'password')
 
         if config.get('server', 'irc') == 'yes':
             self.irc = IrcThread(self, config)
@@ -181,19 +180,6 @@ class ServerProcessor(Processor):
         params = request['params']
         result = None
 
-        if method in ['server.stop', 'server.info', 'server.debug']:
-            try:
-                password = request['params'][0]
-            except:
-                password = None
-
-            if password != self.password:
-                self.push_response(session, 
-                                   {'id': request['id'],
-                                    'result': None,
-                                    'error': 'incorrect password'})
-                return
-
         if method == 'server.banner':
             result = self.banner.replace('\\n', '\n')
 
@@ -203,36 +189,6 @@ class ServerProcessor(Processor):
         elif method == 'server.version':
             result = VERSION
 
-        elif method == 'server.getpid':
-            import os
-            result = os.getpid()
-
-        elif method == 'server.stop':
-            self.shared.stop()
-            result = 'stopping, please wait until all threads terminate.'
-
-        elif method == 'server.info':
-            result = map(lambda s: {"time": s.time,
-                                    "name": s.name,
-                                    "address": s.address,
-                                    "version": s.version,
-                                    "subscriptions": len(s.subscriptions)},
-                         self.dispatcher.request_dispatcher.get_sessions())
-
-        elif method == 'server.debug':
-            try:
-                s = request['params'][1]
-            except:
-                s = None
-
-            if s:
-                from guppy import hpy
-                h = hpy()
-                bp = self.dispatcher.request_dispatcher.processors['blockchain']
-                try:
-                    result = str(eval(s))
-                except:
-                    result = "error"
         else:
             print_log("unknown method", method)
 
index 3b3dfc0..ae21e4a 100755 (executable)
--- a/server.py
+++ b/server.py
@@ -24,6 +24,7 @@ import threading
 import traceback
 
 import json
+import os
 
 logging.basicConfig()
 
@@ -81,32 +82,17 @@ def create_config():
     return config
 
 
-def run_rpc_command(command, stratum_tcp_port):
+def run_rpc_command(cmd, stratum_tcp_port):
+    import xmlrpclib
+    server = xmlrpclib.ServerProxy('http://localhost:8000')
+    func = getattr(server, cmd)
     try:
-        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        s.connect((host, stratum_tcp_port))
-    except:
-        print "cannot connect to server."
-        return
+        r = func()
+    except socket.error:
+        print "server not running"
+        sys.exit(1)
 
-    method = 'server.' + command
-    params = [password]
-    if len(sys.argv) > 2:
-        params.append(sys.argv[2])
-    
-    request = json.dumps({'id': 0, 'method': method, 'params': params})
-    s.send(request + '\n')
-    msg = ''
-    while True:
-        o = s.recv(1024)
-        if not o: break
-        msg += o
-        if msg.find('\n') != -1:
-            break
-    s.close()
-    r = json.loads(msg).get('result')
-
-    if command == 'info':
+    if cmd == 'info':
         now = time.time()
         print 'type           address         sub  version  time'
         for item in r:
@@ -120,6 +106,31 @@ def run_rpc_command(command, stratum_tcp_port):
         print r
 
 
+def cmd_info():
+    return map(lambda s: {"time": s.time,
+                          "name": s.name,
+                          "address": s.address,
+                          "version": s.version,
+                          "subscriptions": len(s.subscriptions)},
+               dispatcher.request_dispatcher.get_sessions())
+
+def cmd_debug():
+    try:
+        s = request['params'][1]
+    except:
+        s = None
+
+    if s:
+        from guppy import hpy
+        h = hpy()
+        bp = dispatcher.request_dispatcher.processors['blockchain']
+        try:
+            result = str(eval(s))
+        except:
+            result = "error"
+        return result
+
+
 if __name__ == '__main__':
     config = create_config()
     password = config.get('server', 'password')
@@ -200,9 +211,20 @@ if __name__ == '__main__':
     for server in transports:
         server.start()
 
+
+
+    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')
     while not shared.stopped():
         try:
-            time.sleep(1)
+            server.handle_request()
         except:
             shared.stop()