Files
bitfinex-api-py/bfxapi/websockets/GenericWebsocket.py
2018-11-14 12:22:48 +01:00

59 lines
1.6 KiB
Python

import asyncio
import websockets
import json
from ..utils.CustomLogger import CustomLogger
class AuthError(Exception): pass
def is_json(myjson):
try:
json_object = json.loads(myjson)
except ValueError as e:
return False
return True
class GenericWebsocket(object):
def __init__(self, host, symbol='tBTCUSD', onCandleHook=None, onTradeHook=None, onCompleteHook=None):
if not onCandleHook:
raise KeyError("Expected `onCandleHook` in parameters.")
if not onTradeHook:
raise KeyError("Expected `onTradeHook` in parameters.")
if not onCompleteHook:
raise KeyError("Expected `onCompleteHook` in parameters.")
self.onCandleHook = onCandleHook
self.onTradeHook = onTradeHook
self.onCompleteHook = onCompleteHook
self.symbol = symbol
self.host = host
self.awaiting_request = False
self.logger = CustomLogger('HFWebSocket', logLevel='INFO')
self.loop = asyncio.get_event_loop()
# self.events = EventEmitter()
def run(self):
self.loop.run_until_complete(self._main(self.host))
async def _main(self, host):
async with websockets.connect(host) as websocket:
self.ws = websocket
while True:
await asyncio.sleep(0)
message = await websocket.recv()
await self.on_message(message)
async def on_error(self, error):
self.logger.error(error)
async def on_close(self):
self.logger.info("Websocket closed.")
await self.ws.close()
self.onCompleteHook()
async def on_open(self):
pass
async def on_message(self, message):
pass