Initial novacoin support
[electrum-nvc.git] / scripts / servers
index 8297135..9e0ce15 100755 (executable)
@@ -1,41 +1,49 @@
 #!/usr/bin/env python
 
-from electrum import Interface, DEFAULT_SERVERS
+from electrum_nvc import Interface, SimpleConfig, set_verbosity
+from electrum_nvc.network import DEFAULT_SERVERS, filter_protocol
 import time, Queue
+from collections import defaultdict
 
-servers = DEFAULT_SERVERS
-interfaces = map ( lambda server: Interface({'server':server} ), servers )
-results = []
+set_verbosity(False)
 
-for i in interfaces:
-    if i.is_connected:
-        i.start()
-        i.send([('blockchain.numblocks.subscribe',[])])
-    else:
-        servers.remove(i.server)
+config = SimpleConfig()
+servers = filter_protocol(DEFAULT_SERVERS,'t')
+interfaces = map ( lambda server: Interface(server, config), servers )
 
-for i in interfaces:
-    while True:
-        try:
-            r = i.responses.get(True,1)
-        except Queue.Empty:
-            break
+q = Queue.Queue()
+results_queue = Queue.Queue()
 
-        if r.get('method') == 'blockchain.numblocks.subscribe':
-            results.append((i.host, r.get('result')))
-            servers.remove(i.server)
-            break
+for i in interfaces: i.start(q)
 
-for s in servers:
-    print "%30s    "%s, "timed out"
+reached_servers = []
+
+while servers:
+    i = q.get(timeout=1000)
+    servers.remove(i.server)
+    if i.is_connected:
+        i.send([('blockchain.headers.subscribe',[])], lambda i,x: results_queue.put((i,x)))
+        reached_servers.append(i.server)
+        i.status = "ok"
+    else:
+        i.status = "unreachable"
 
-from collections import defaultdict
 d = defaultdict(int)
-for e in results:
-    d[e[1]] += 1
+
+while reached_servers:
+    i, r = results_queue.get(timeout=1000)
+    i.blocks = r.get('result').get('block_height')
+    d[i.blocks] += 1
+    reached_servers.remove(i.server)
+
 v = d.values()
 numblocks = d.keys()[v.index(max(v))]
 
-for s,n in results:
-    print "%30s   %d   "%(s, n), "ok" if abs(n-numblocks)<2 else "lagging"
+for i in interfaces:
+    if i.status == "ok":
+        if abs(i.blocks-numblocks)>1: i.status = "lagging" 
+    else:
+        i.blocks = 0
+
+    print "%30s   %d   %s   "%(i.host, i.blocks, i.status)