33
44import time
55import os
6+ import sys
67import socket
78
89from stratum import settings
1213if __name__ == '__main__' :
1314 if len (settings .WALLET )!= 42 and len (settings .WALLET )!= 40 :
1415 log .error ("Wrong WALLET!" )
15- quit ()
16+ sys . exit ()
1617 settings .CUSTOM_EMAIL = settings .MONITORING_EMAIL if settings .MONITORING_EMAIL and settings .MONITORING else ""
1718
1819from twisted .internet import reactor , defer , protocol
2627from mining_libs import client_service
2728from mining_libs import jobs
2829from mining_libs import version
29- from mining_libs .jobs import Job
3030
3131def on_shutdown (f ):
3232 '''Clean environment properly'''
@@ -42,7 +42,10 @@ def ping(f):
4242 return
4343 try :
4444 yield (f .rpc ('eth_getWork' , [], '' ))
45- reactor .callLater (60 , ping , f )
45+ if f .is_failover :
46+ reactor .callLater (30 , ping , f )
47+ else :
48+ reactor .callLater (5 , ping , f )
4649 except Exception :
4750 pass
4851
@@ -53,18 +56,18 @@ def on_connect(f):
5356 f .is_connected = True
5457 f .remote_ip = f .client ._get_ip ()
5558 #reactor.callLater(30, f.client.transport.loseConnection)
56-
59+
5760 # Hook to on_connect again
5861 f .on_connect .addCallback (on_connect )
59-
62+
6063 # Get first job and user_id
6164 debug = "_debug" if settings .DEBUG else ""
6265 initial_job = (yield f .rpc ('eth_submitLogin' , [settings .WALLET , settings .CUSTOM_EMAIL ], 'Proxy_' + version .VERSION + debug ))
6366
6467 reactor .callLater (0 , ping , f )
6568
6669 defer .returnValue (f )
67-
70+
6871def on_disconnect (f ):
6972 '''Callback when proxy get disconnected from the pool'''
7073 log .info ("Disconnected from Stratum pool at %s:%d" % f .main_host )
@@ -82,28 +85,52 @@ def main():
8285 f = SocketTransportClientFactory (settings .POOL_HOST , settings .POOL_PORT ,
8386 debug = settings .DEBUG , proxy = None ,
8487 event_handler = client_service .ClientMiningService )
85- f .is_failover = False
8688
87- ff = None
89+ f1 = None
90+ f2 = None
91+ f3 = None
8892 if settings .POOL_FAILOVER_ENABLE :
89- log .warning ("Trying to connect to failover Stratum pool at %s:%d" % (settings .POOL_HOST_FAILOVER , settings .POOL_PORT_FAILOVER ))
90- ff = SocketTransportClientFactory (settings .POOL_HOST_FAILOVER , settings .POOL_PORT_FAILOVER ,
93+ log .warning ("Trying to connect to failover Stratum pool-1 at %s:%d" % (settings .POOL_HOST_FAILOVER1 , settings .POOL_PORT_FAILOVER1 ))
94+ f1 = SocketTransportClientFactory (settings .POOL_HOST_FAILOVER1 , settings .POOL_PORT_FAILOVER1 ,
9195 debug = settings .DEBUG , proxy = None ,
9296 event_handler = client_service .ClientMiningService )
93- ff .is_failover = True
97+ f1 .is_failover = True
9498
95- job_registry = jobs .JobRegistry (f ,ff )
99+ log .warning ("Trying to connect to failover Stratum pool-2 at %s:%d" % (settings .POOL_HOST_FAILOVER2 , settings .POOL_PORT_FAILOVER2 ))
100+ f2 = SocketTransportClientFactory (settings .POOL_HOST_FAILOVER2 , settings .POOL_PORT_FAILOVER2 ,
101+ debug = settings .DEBUG , proxy = None ,
102+ event_handler = client_service .ClientMiningService )
103+ f2 .is_failover = True
104+
105+ log .warning ("Trying to connect to failover Stratum pool-3 at %s:%d" % (settings .POOL_HOST_FAILOVER3 , settings .POOL_PORT_FAILOVER3 ))
106+ f3 = SocketTransportClientFactory (settings .POOL_HOST_FAILOVER3 , settings .POOL_PORT_FAILOVER3 ,
107+ debug = settings .DEBUG , proxy = None ,
108+ event_handler = client_service .ClientMiningService )
109+ f3 .is_failover = True
110+
111+ job_registry = jobs .JobRegistry (f ,f1 ,f2 ,f3 )
96112 client_service .ClientMiningService .job_registry = job_registry
97113 client_service .ClientMiningService .reset_timeout ()
98114
99115 f .on_connect .addCallback (on_connect )
100116 f .on_disconnect .addCallback (on_disconnect )
101117 # Cleanup properly on shutdown
102118 reactor .addSystemEventTrigger ('before' , 'shutdown' , on_shutdown , f )
103- if ff :
104- ff .on_connect .addCallback (on_connect )
105- ff .on_disconnect .addCallback (on_disconnect )
106- reactor .addSystemEventTrigger ('before' , 'shutdown' , on_shutdown , ff )
119+ if f1 :
120+ f1 .on_connect .addCallback (on_connect )
121+ f1 .on_disconnect .addCallback (on_disconnect )
122+ reactor .addSystemEventTrigger ('before' , 'shutdown' , on_shutdown , f1 )
123+
124+ if f2 :
125+ f2 .on_connect .addCallback (on_connect )
126+ f2 .on_disconnect .addCallback (on_disconnect )
127+ reactor .addSystemEventTrigger ('before' , 'shutdown' , on_shutdown , f2 )
128+
129+ if f3 :
130+ f3 .on_connect .addCallback (on_connect )
131+ f3 .on_disconnect .addCallback (on_disconnect )
132+ reactor .addSystemEventTrigger ('before' , 'shutdown' , on_shutdown , f3 )
133+
107134
108135 # Block until proxy connect to the pool
109136 try :
@@ -112,6 +139,7 @@ def main():
112139 log .warning ("First pool server must be online first time during start" )
113140 return
114141
142+
115143 conn = reactor .listenTCP (settings .PORT , Site (getwork_listener .Root (job_registry , settings .ENABLE_WORKER_ID )), interface = settings .HOST )
116144
117145 try :
0 commit comments