From e24f4085f948bbd1ac6eb830a67ce080993d2a1a Mon Sep 17 00:00:00 2001 From: Jacob Plaster Date: Mon, 13 May 2019 16:20:05 +1000 Subject: [PATCH] Subscriptions: limit channels to 25 per instance --- bfxapi/websockets/SubscriptionManager.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bfxapi/websockets/SubscriptionManager.py b/bfxapi/websockets/SubscriptionManager.py index 93a3d94..a5cd729 100644 --- a/bfxapi/websockets/SubscriptionManager.py +++ b/bfxapi/websockets/SubscriptionManager.py @@ -10,6 +10,7 @@ import time from ..utils.CustomLogger import CustomLogger from ..models import Subscription +MAX_CHANNEL_COUNT = 25 class SubscriptionManager: @@ -30,12 +31,17 @@ class SubscriptionManager: @param timeframe: sepecifies the data timeframe between each candle (only required for the candles channel) """ + # make sure we dont over subscribe the connection + if self.channel_count() >= MAX_CHANNEL_COUNT: + raise Exception("Subscribe error - max channel count ({0}) reached".format(self.channel_count())) + return False # create a new subscription subscription = Subscription( self.bfxapi, channel_name, symbol, timeframe, **kwargs) self.logger.info("Subscribing to channel {}".format(channel_name)) key = "{}_{}".format(channel_name, subscription.key or symbol) self.pending_subscriptions[key] = subscription + await subscription.subscribe() async def confirm_subscription(self, raw_ws_data): @@ -109,6 +115,12 @@ class SubscriptionManager: # already unsibscribed, so just subscribe await sub.subscribe() + def channel_count(self): + """ + Returns the number of cannels + """ + return len(self.pending_subscriptions) + len(self.subscriptions_chanid) + def is_subscribed(self, chan_id): """ Returns True if the channel with the given chanId is currenly subscribed to