python-okx/okx/websocket/WsClientFactory.py

50 lines
2.0 KiB
Python

from autobahn.twisted.websocket import WebSocketClientFactory
from twisted.internet.protocol import ReconnectingClientFactory
from .WsClientProtocol import *
class WsReconnectingClientFactory(ReconnectingClientFactory):
"""
@ivar maxDelay: Maximum number of seconds between connection attempts.
@ivar initialDelay: Delay for the first reconnection attempt.
@ivar maxRetries: Maximum number of consecutive unsuccessful connection
attempts, after which no further connection attempts will be made. If
this is not explicitly set, no maximum is applied.
"""
initialDelay = 0.1
maxDelay = 2
maxRetries = 5
class WsClientFactory(WebSocketClientFactory, WsReconnectingClientFactory):
reachMaxRetriesError = {"e": "error", "m": "reached max connect retries"}
def __init__(self, *args, payload=None, **kwargs):
WebSocketClientFactory.__init__(self, *args, **kwargs)
self.instance = None
self.subscribeSet = set()
self.payload = payload
self.logger = logging.getLogger(__name__)
def startedConnecting(self, connector):
self.logger.info("WsClientFactory execute startedConnecting")
def clientConnectionFailed(self, connector, reason):
self.logger.error(
"Can't connect to server. Reason: {}. Retrying: {}".format(reason, self.retries + 1))
self.retry(connector)
if self.retries > self.maxRetries:
self.callback(self.reachMaxRetriesError)
def clientConnectionLost(self, connector, reason):
self.logger.error("WsClientFactory execute clientConnectionLost. Reason: {},retried {} times".format(reason,
self.retries + 1))
self.retry(connector)
if self.retries > self.maxRetries:
self.callback(self.reachMaxRetriesError)
def buildProtocol(self, addr):
protocol = WsClientProtocol(self, payload=self.payload)
return protocol