You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.1 KiB
36 lines
1.1 KiB
4 years ago
|
import json
|
||
|
import sseclient
|
||
|
from ._transport import Transport
|
||
|
from requests.exceptions import ConnectionError
|
||
|
|
||
|
|
||
|
class ServerSentEventsTransport(Transport):
|
||
|
def __init__(self, session, connection):
|
||
|
Transport.__init__(self, session, connection)
|
||
|
self.__response = None
|
||
|
|
||
|
def _get_name(self):
|
||
|
return 'serverSentEvents'
|
||
|
|
||
|
def start(self):
|
||
|
self.__response = sseclient.SSEClient(self._get_url('connect'), session=self._session)
|
||
|
self._session.get(self._get_url('start'))
|
||
|
|
||
|
def _receive():
|
||
|
try:
|
||
|
for notification in self.__response:
|
||
|
if notification.data != 'initialized':
|
||
|
self._handle_notification(notification.data)
|
||
|
except ConnectionError:
|
||
|
raise ConnectionError
|
||
|
|
||
|
return _receive
|
||
|
|
||
|
def send(self, data):
|
||
|
response = self._session.post(self._get_url('send'), data={'data': json.dumps(data)})
|
||
|
parsed = json.loads(response.content)
|
||
|
self._connection.received.fire(**parsed)
|
||
|
|
||
|
def close(self):
|
||
|
self._session.get(self._get_url('abort'))
|