SHOW:
|
|
- or go back to the newest paste.
1 | #!/usr/bin/python | |
2 | import sys | |
3 | import random | |
4 | ||
5 | import stratum | |
6 | import stratum.settings as settings | |
7 | from twisted.internet import reactor | |
8 | from twisted.application import service, internet | |
9 | from stratum.services import ServiceEventHandler, GenericService | |
10 | from stratum import socket_transport | |
11 | from stratum.connection_registry import ConnectionRegistry | |
12 | ||
13 | class MiningService(GenericService): | |
14 | service_type = 'mining' | |
15 | service_vendor = 'custom' | |
16 | is_default = True | |
17 | ||
18 | @classmethod | |
19 | def _reconnect(cls, switchto): | |
20 | next_reconnect = random.randint(5,10) | |
21 | reactor.callLater(next_reconnect, cls._reconnect, switchto) | |
22 | ||
23 | selected = random.choice(switchto) | |
24 | print switchto | |
25 | print "Reconnecting to", selected | |
26 | ||
27 | for conn in ConnectionRegistry.iterate(): | |
28 | conn = conn() | |
29 | if not conn: | |
30 | continue | |
31 | ||
32 | conn.rpc('client.reconnect', [None, selected, 2], is_notification=True) | |
33 | ||
34 | print "Next reconnect in %d sec" % next_reconnect | |
35 | ||
36 | ||
37 | def _finish_after_subscribe(self, result): | |
38 | self.connection_ref().rpc('client.get_version', []) | |
39 | self.connection_ref().rpc('mining.notify', | |
40 | ["124b", "9eb4d8f01c4522cb1191e93896fff7204bae4aebec50a7030000016700000000", | |
41 | "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2103a21703062f503253482f042c67755008", | |
42 | "072f736c7573682f0000000001026f312a010000001976a914e8e6ace10f10ce5ed479c7188c9b4061e53aa90688ac00000000", | |
43 | ["11d30680b28e3101141731fa04daf7c42fb90d4fa8b59bb1411ff4ed31bed51f", | |
44 | "968b36b8a85d22695970764a8b8e6ba2f8fd864c2a003cd44eed5947a60a467a", | |
45 | "2c691ebaaedb4d53d8c03c1c7d7d4f82dba8d832d39337347a03232bfc57f1de", | |
46 | "239eec3b0098cd7f82c4071ff41cb2d235558a55a0d9341d7b9f188ebdc4140f", | |
47 | "608fe54d1e97ee8b6516018cd82918012cbf876dfe3ad166c3d37f5dbd7c4546", | |
48 | "8841944a4b2679cd297158f6175a655a885adc80116e0608842821a248c8d3eb", | |
49 | "59411a7a593424ec42b57bc0f91ee56bbf717564001786ba67e4702e0a47ef1e"], | |
50 | "00000002", "1a057e08", "5075672c", True], is_notification=True | |
51 | ) | |
52 | ||
53 | return result | |
54 | ||
55 | def authorize(self, worker_name, password): | |
56 | return True | |
57 | ||
58 | def subscribe(self): | |
59 | self.connection_ref().on_finish.addCallback(self._finish_after_subscribe) | |
60 | return ([], ''.join([ "%x" % random.randint(0,15) for x in range(8) ]), 4) | |
61 | ||
62 | def submit(self, worker_name, job_id, extranonce2, ntime, nonce): | |
63 | return True | |
64 | ||
65 | if __name__ == '__main__': | |
66 | try: | |
67 | listening_port = int(sys.argv[1]) | |
68 | print "Listening on port:", listening_port | |
69 | except: | |
70 | print "./reconnect_demo.py <listening_port> [<switchto1> <switchto2> <switchtoN>]" | |
71 | sys.exit() | |
72 | ||
73 | switchto = [ int(x) for x in sys.argv[2:] ] | |
74 | print "I'll randomly switch connections to:", switchto | |
75 | ||
76 | reactor.listenTCP(listening_port, socket_transport.SocketTransportFactory( | |
77 | debug=True, event_handler=ServiceEventHandler)) | |
78 | ||
79 | MiningService._reconnect(switchto) | |
80 | ||
81 | reactor.run() |