Isolate transport

This commit is contained in:
Roy Hyunjin Han 2015-02-20 18:06:31 -05:00
commit 9afe5c2f2a
3 changed files with 183 additions and 103 deletions

View file

@ -2,6 +2,51 @@ import requests
from .exceptions import ConnectionError, TimeoutError
ENGINEIO_PROTOCOL = 3
class AbstractTransport(object):
pass
class XHR_PollingTransport(AbstractTransport):
# pass http session
# pass session id (can be none)
# pass timeout
def send_packet(self, engineIO_packet_type, engineIO_packet_data):
_get_response()
assert ok
response = self._http_session.post(self._url, params={
'EIO': self._engineIO_protocol,
'transport': 'polling',
't': self._get_timestamp(),
'sid': self._session_id,
}, data=_encode_engineIO_content([
(engineIO_packet_type, engineIO_packet_data),
]), headers={
'content-type': 'application/octet-stream',
})
assert response.content == 'ok'
def _recv_packet(self):
response = _get_response(
self._http_session.get,
self._url,
params={
'EIO': self._engineIO_protocol,
'transport': 'polling',
't': self._get_timestamp(),
'sid': self._session_id,
},
timeout=self._ping_timeout)
for engineIO_packet in _decode_engineIO_content(response.content):
yield engineIO_packet
def _get_response(request, *args, **kw):
try:
response = request(*args, **kw)