Isolate transport
This commit is contained in:
parent
96014d3d53
commit
9afe5c2f2a
3 changed files with 183 additions and 103 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue