Browse Source

Fix heartbeat interval bug.

pull/1/head
Rapptz 10 years ago
parent
commit
5960100d1c
  1. 24
      discord/client.py

24
discord/client.py

@ -25,9 +25,10 @@ DEALINGS IN THE SOFTWARE.
""" """
import requests import requests
import json, re import json, re, time
import endpoints import endpoints
from collections import deque from collections import deque
from threading import Timer
from ws4py.client.threadedclient import WebSocketClient from ws4py.client.threadedclient import WebSocketClient
from sys import platform as sys_platform from sys import platform as sys_platform
from errors import InvalidEventName, InvalidDestination from errors import InvalidEventName, InvalidDestination
@ -39,6 +40,20 @@ from message import Message
def _null_event(*args, **kwargs): def _null_event(*args, **kwargs):
pass pass
def _keep_alive_handler(seconds, ws):
def wrapper():
_keep_alive_handler(seconds, ws)
payload = {
'op': 1,
'd': int(time.time())
}
ws.send(json.dumps(payload))
t = Timer(seconds, wrapper)
t.start()
return t
class Client(object): class Client(object):
"""Represents a client connection that connects to Discord. """Represents a client connection that connects to Discord.
This class is used to interact with the Discord WebSocket and API. This class is used to interact with the Discord WebSocket and API.
@ -124,7 +139,8 @@ class Client(object):
self.private_channels.append(PrivateChannel(id=pm['id'], user=User(**pm['recipient']))) self.private_channels.append(PrivateChannel(id=pm['id'], user=User(**pm['recipient'])))
# set the keep alive interval.. # set the keep alive interval..
self.ws.heartbeat_freq = data.get('heartbeat_interval') interval = data.get('heartbeat_interval') / 1000.0
self.keep_alive = _keep_alive_handler(interval, self.ws)
# we're all ready # we're all ready
self.events['on_ready']() self.events['on_ready']()
@ -142,10 +158,10 @@ class Client(object):
self.messages.remove(found) self.messages.remove(found)
def _opened(self): def _opened(self):
print('Opened!') print('Opened at {}'.format(int(time.time())))
def _closed(self, code, reason=None): def _closed(self, code, reason=None):
print('closed with ', code, reason) print('Closed with {} ("{}") at {}'.format(code, reason, int(time.time())))
def run(self): def run(self):
"""Runs the client and allows it to receive messages and events.""" """Runs the client and allows it to receive messages and events."""

Loading…
Cancel
Save