diff --git a/TODO.goals b/TODO.goals index d63b1d2..ff6edf1 100644 --- a/TODO.goals +++ b/TODO.goals @@ -1,2 +1,12 @@ -# US/Pacific 11/19/2013 -Include graingert's pull request on travis.yml +Check that SSL websocket connections work properly +Use continuous integration with TravisCI +Do not connect to blank namespace if overriding default namespace exists #40 +Upgrade to socket.io 1.2 #41 +Write a unit test to make sure that the client can disconnect properly #42 +Check that setting stream=True makes sure that we receive all server events #45 +Revive heartbeat as separate process thanks to sarietta +Credit everyone who took the time to submit an issue or pull request +Support Python 3 + Use urllib.parse.urlparse +Merge sarietta's pull request +Add __version__ diff --git a/experiments/client2.py b/experiments/client2.py index 9b91509..14c0d7a 100644 --- a/experiments/client2.py +++ b/experiments/client2.py @@ -1,10 +1,11 @@ from socketIO_client import SocketIO -def on_news(self, data): - print(data) - self.emit('my other event', {'my': 'data'}) +# def on_news(self, data): + # print(data) + # self.emit('my other event', {'my': 'data'}) s = SocketIO('localhost', 9000) -s.on('news', on_news) +s.emit('whee') +# s.on('news', on_news) diff --git a/experiments/socketIO_client/__init__.py b/experiments/socketIO_client/__init__.py index cd94394..52413f9 100644 --- a/experiments/socketIO_client/__init__.py +++ b/experiments/socketIO_client/__init__.py @@ -11,8 +11,8 @@ class EngineIO(object): def __init__(self, host, port): url = 'http://%s:%s/%s/' % (host, port, self._path) - session = requests.Session() - response = session.get(url, params={ + self.session = requests.Session() + response = self.session.get(url, params={ 'EIO': self._engine_io_protocol, 'transport': 'polling', 't': self._get_timestamp(), @@ -21,12 +21,13 @@ class EngineIO(object): packet_type, packet = packs[0] assert packet_type == 0 packet_json = json.loads(packet) + self._session_id = packet_json['sid'] print(packet_json) - response = session.get(url, params={ + response = self.session.get(url, params={ 'EIO': self._engine_io_protocol, 'transport': 'polling', 't': self._get_timestamp(), - 'sid': packet_json['sid'], + 'sid': self._session_id, }) packs = _decode_content(response.content) for packet_type, packet in packs: @@ -39,6 +40,17 @@ class EngineIO(object): self._request_index += 1 return timestamp + def _message(self, packet): + packet_type = 4 + response = self.session.post(self.url, params={ + 'EIO': self._engine_io_protocol, + 'transport': 'polling', + 't': self._get_timestamp(), + 'sid': self._session_id, + }, data=_encode_content([(packet_type, packet)]), headers={ + 'content-type': 'application/octet-stream', + }) + class SocketIO(EngineIO): @@ -51,6 +63,11 @@ class SocketIO(EngineIO): def on(self, event, callback): pass + def emit(self, event): + packet_type = 2 + packet = json.dumps([event]) + self._message(str(packet_type) + packet) + def _decode_content(content): packs = [] @@ -81,3 +98,7 @@ def _read_packet(content, index, packet_length): index += 1 packet = content[index:index + packet_length] return index + packet_length, packet + + +def _encode_content(packs): + pass