Sticky and pool parameters can be set after the inital _fetchSticky
This commit is contained in:
@@ -1956,48 +1956,32 @@ class Client(object):
|
|||||||
LISTEN METHODS
|
LISTEN METHODS
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def _ping(self, sticky, pool):
|
def _ping(self):
|
||||||
data = {
|
data = {
|
||||||
'channel': self.user_channel,
|
'channel': self.user_channel,
|
||||||
'clientid': self.client_id,
|
'clientid': self.client_id,
|
||||||
'partition': -2,
|
'partition': -2,
|
||||||
'cap': 0,
|
'cap': 0,
|
||||||
'uid': self.uid,
|
'uid': self.uid,
|
||||||
'sticky_token': sticky,
|
'sticky_token': self.sticky,
|
||||||
'sticky_pool': pool,
|
'sticky_pool': self.pool,
|
||||||
'viewer_uid': self.uid,
|
'viewer_uid': self.uid,
|
||||||
'state': 'active',
|
'state': 'active',
|
||||||
}
|
}
|
||||||
self._get(self.req_url.PING, data, fix_request=True, as_json=False)
|
self._get(self.req_url.PING, data, fix_request=True, as_json=False)
|
||||||
|
|
||||||
def _fetchSticky(self):
|
def _pullMessage(self, markAlive=True):
|
||||||
"""Call pull api to get sticky and pool parameter, newer api needs these parameters to work"""
|
|
||||||
|
|
||||||
data = {
|
|
||||||
"msgs_recv": 0,
|
|
||||||
"channel": self.user_channel,
|
|
||||||
"clientid": self.client_id
|
|
||||||
}
|
|
||||||
|
|
||||||
j = self._get(self.req_url.STICKY, data, fix_request=True, as_json=True)
|
|
||||||
|
|
||||||
if j.get('lb_info') is None:
|
|
||||||
raise FBchatException('Missing lb_info: {}'.format(j))
|
|
||||||
|
|
||||||
return j['lb_info']['sticky'], j['lb_info']['pool']
|
|
||||||
|
|
||||||
def _pullMessage(self, sticky, pool, markAlive=True):
|
|
||||||
"""Call pull api with seq value to get message data."""
|
"""Call pull api with seq value to get message data."""
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
"msgs_recv": 0,
|
"msgs_recv": 0,
|
||||||
"sticky_token": sticky,
|
"sticky_token": self.sticky,
|
||||||
"sticky_pool": pool,
|
"sticky_pool": self.pool,
|
||||||
"clientid": self.client_id,
|
"clientid": self.client_id,
|
||||||
'state': 'active' if markAlive else 'offline',
|
'state': 'active' if markAlive else 'offline',
|
||||||
}
|
}
|
||||||
|
|
||||||
j = self._get(ReqUrl.STICKY, data, fix_request=True, as_json=True)
|
j = self._get(self.req_url.STICKY, data, fix_request=True, as_json=True)
|
||||||
|
|
||||||
self.seq = j.get('seq', '0')
|
self.seq = j.get('seq', '0')
|
||||||
return j
|
return j
|
||||||
@@ -2005,6 +1989,10 @@ class Client(object):
|
|||||||
def _parseMessage(self, content):
|
def _parseMessage(self, content):
|
||||||
"""Get message and author name from content. May contain multiple messages in the content."""
|
"""Get message and author name from content. May contain multiple messages in the content."""
|
||||||
|
|
||||||
|
if 'lb_info' in content:
|
||||||
|
self.sticky = content['lb_info']['sticky']
|
||||||
|
self.pool = content['lb_info']['pool']
|
||||||
|
|
||||||
if 'ms' not in content: return
|
if 'ms' not in content: return
|
||||||
|
|
||||||
for m in content["ms"]:
|
for m in content["ms"]:
|
||||||
@@ -2350,7 +2338,6 @@ class Client(object):
|
|||||||
:raises: FBchatException if request failed
|
:raises: FBchatException if request failed
|
||||||
"""
|
"""
|
||||||
self.listening = True
|
self.listening = True
|
||||||
self.sticky, self.pool = self._fetchSticky()
|
|
||||||
|
|
||||||
def doOneListen(self, markAlive=True):
|
def doOneListen(self, markAlive=True):
|
||||||
"""
|
"""
|
||||||
@@ -2364,8 +2351,8 @@ class Client(object):
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
if markAlive:
|
if markAlive:
|
||||||
self._ping(self.sticky, self.pool)
|
self._ping()
|
||||||
content = self._pullMessage(self.sticky, self.pool, markAlive)
|
content = self._pullMessage(markAlive)
|
||||||
if content:
|
if content:
|
||||||
self._parseMessage(content)
|
self._parseMessage(content)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
|
Reference in New Issue
Block a user