Prepare to run tests
This commit is contained in:
parent
9fe0c05926
commit
dec8e09327
4 changed files with 43 additions and 25 deletions
|
|
@ -7,7 +7,7 @@ before_install:
|
||||||
- sudo apt-get update
|
- sudo apt-get update
|
||||||
- sudo apt-get install nodejs
|
- sudo apt-get install nodejs
|
||||||
install:
|
install:
|
||||||
- npm install -G socket.io@1.3.1
|
- npm install -G socket.io
|
||||||
- npm install -G http-proxy
|
- npm install -G http-proxy
|
||||||
- pip install -U requests
|
- pip install -U requests
|
||||||
- pip install -U six
|
- pip install -U six
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ Activate isolated environment. ::
|
||||||
VIRTUAL_ENV=$HOME/.virtualenv
|
VIRTUAL_ENV=$HOME/.virtualenv
|
||||||
source $VIRTUAL_ENV/bin/activate
|
source $VIRTUAL_ENV/bin/activate
|
||||||
|
|
||||||
Launch your server. ::
|
Launch your socket.io server. ::
|
||||||
|
|
||||||
# Get package folder
|
# Get package folder
|
||||||
PACKAGE_FOLDER=`python -c "import os, socketIO_client; print(os.path.dirname(socketIO_client.__file__))"`
|
PACKAGE_FOLDER=`python -c "import os, socketIO_client; print(os.path.dirname(socketIO_client.__file__))"`
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@ from .logs import LoggingMixin
|
||||||
from .namespaces import EngineIONamespace, SocketIONamespace, find_callback
|
from .namespaces import EngineIONamespace, SocketIONamespace, find_callback
|
||||||
from .parsers import (
|
from .parsers import (
|
||||||
parse_host, parse_engineIO_session,
|
parse_host, parse_engineIO_session,
|
||||||
parse_socketIO_data, format_socketIO_data)
|
format_socketIO_packet_data, parse_socketIO_packet_data,
|
||||||
|
get_namespace_path)
|
||||||
from .symmetries import get_character
|
from .symmetries import get_character
|
||||||
from .transports import XHR_PollingTransport, prepare_http_session, TRANSPORTS
|
from .transports import XHR_PollingTransport, prepare_http_session, TRANSPORTS
|
||||||
|
|
||||||
|
|
@ -69,17 +70,22 @@ class EngineIO(LoggingMixin):
|
||||||
return parse_engineIO_session(engineIO_packet_data)
|
return parse_engineIO_session(engineIO_packet_data)
|
||||||
|
|
||||||
def _negotiate_transport(self):
|
def _negotiate_transport(self):
|
||||||
self.__transport = self._get_transport('xhr-polling')
|
transport_name = 'xhr-polling'
|
||||||
|
self.__transport = self._get_transport(transport_name)
|
||||||
|
self._transport_name = transport_name
|
||||||
|
|
||||||
def _reset_heartbeat(self):
|
def _reset_heartbeat(self):
|
||||||
try:
|
try:
|
||||||
self._heartbeat_thread.stop()
|
self._heartbeat_thread.stop()
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
|
ping_interval = self._engineIO_session.ping_interval
|
||||||
self._heartbeat_thread = HeartbeatThread(
|
self._heartbeat_thread = HeartbeatThread(
|
||||||
send_heartbeat=self.__transport._ping,
|
send_heartbeat=self._ping,
|
||||||
relax_interval_in_seconds=self._engineIO_session.ping_interval,
|
relax_interval_in_seconds=ping_interval,
|
||||||
hurry_interval_in_seconds=1)
|
hurry_interval_in_seconds=1 if self._transport_name in [
|
||||||
|
'xhr-polling',
|
||||||
|
] else ping_interval)
|
||||||
self._heartbeat_thread.start()
|
self._heartbeat_thread.start()
|
||||||
|
|
||||||
def _connect_namespaces(self):
|
def _connect_namespaces(self):
|
||||||
|
|
@ -197,7 +203,6 @@ class EngineIO(LoggingMixin):
|
||||||
|
|
||||||
def _process_packet(self, packet):
|
def _process_packet(self, packet):
|
||||||
engineIO_packet_type, engineIO_packet_data = packet
|
engineIO_packet_type, engineIO_packet_data = packet
|
||||||
print('engineIO_packet_type = %s' % engineIO_packet_type)
|
|
||||||
# Launch callbacks
|
# Launch callbacks
|
||||||
namespace = self.get_namespace()
|
namespace = self.get_namespace()
|
||||||
try:
|
try:
|
||||||
|
|
@ -310,7 +315,7 @@ class SocketIO(EngineIO):
|
||||||
|
|
||||||
def connect(self, path):
|
def connect(self, path):
|
||||||
socketIO_packet_type = 0
|
socketIO_packet_type = 0
|
||||||
socketIO_packet_data = format_socketIO_data(path)
|
socketIO_packet_data = format_socketIO_packet_data(path)
|
||||||
self._message(str(socketIO_packet_type) + socketIO_packet_data)
|
self._message(str(socketIO_packet_type) + socketIO_packet_data)
|
||||||
|
|
||||||
def disconnect(self, path=''):
|
def disconnect(self, path=''):
|
||||||
|
|
@ -318,7 +323,7 @@ class SocketIO(EngineIO):
|
||||||
return
|
return
|
||||||
if path:
|
if path:
|
||||||
socketIO_packet_type = 1
|
socketIO_packet_type = 1
|
||||||
socketIO_packet_data = format_socketIO_data(path)
|
socketIO_packet_data = format_socketIO_packet_data(path)
|
||||||
self._message(str(socketIO_packet_type) + socketIO_packet_data)
|
self._message(str(socketIO_packet_type) + socketIO_packet_data)
|
||||||
else:
|
else:
|
||||||
self._close()
|
self._close()
|
||||||
|
|
@ -333,7 +338,7 @@ class SocketIO(EngineIO):
|
||||||
callback, args = find_callback(args, kw)
|
callback, args = find_callback(args, kw)
|
||||||
ack_id = self._set_ack_callback(callback) if callback else None
|
ack_id = self._set_ack_callback(callback) if callback else None
|
||||||
socketIO_packet_type = 2
|
socketIO_packet_type = 2
|
||||||
socketIO_packet_data = format_socketIO_data(path, ack_id, args)
|
socketIO_packet_data = format_socketIO_packet_data(path, ack_id, args)
|
||||||
self._message(str(socketIO_packet_type) + socketIO_packet_data)
|
self._message(str(socketIO_packet_type) + socketIO_packet_data)
|
||||||
|
|
||||||
def send(self, data='', callback=None):
|
def send(self, data='', callback=None):
|
||||||
|
|
@ -344,7 +349,7 @@ class SocketIO(EngineIO):
|
||||||
|
|
||||||
def _ack(self, path, ack_id, *args):
|
def _ack(self, path, ack_id, *args):
|
||||||
socketIO_packet_type = 3
|
socketIO_packet_type = 3
|
||||||
socketIO_packet_data = format_socketIO_data(path, ack_id, args)
|
socketIO_packet_data = format_socketIO_packet_data(path, ack_id, args)
|
||||||
self._message(str(socketIO_packet_type) + socketIO_packet_data)
|
self._message(str(socketIO_packet_type) + socketIO_packet_data)
|
||||||
|
|
||||||
# React
|
# React
|
||||||
|
|
@ -366,9 +371,9 @@ class SocketIO(EngineIO):
|
||||||
return
|
return
|
||||||
socketIO_packet_type = int(get_character(engineIO_packet_data, 0))
|
socketIO_packet_type = int(get_character(engineIO_packet_data, 0))
|
||||||
socketIO_packet_data = engineIO_packet_data[1:]
|
socketIO_packet_data = engineIO_packet_data[1:]
|
||||||
print('socketIO_packet_type = %s' % socketIO_packet_type)
|
|
||||||
# Launch callbacks
|
# Launch callbacks
|
||||||
namespace = self.get_namespace()
|
path = get_namespace_path(socketIO_packet_data)
|
||||||
|
namespace = self.get_namespace(path)
|
||||||
try:
|
try:
|
||||||
delegate = {
|
delegate = {
|
||||||
0: self._on_connect,
|
0: self._on_connect,
|
||||||
|
|
@ -392,7 +397,7 @@ class SocketIO(EngineIO):
|
||||||
find_packet_callback('disconnect')()
|
find_packet_callback('disconnect')()
|
||||||
|
|
||||||
def _on_event(self, data, find_packet_callback):
|
def _on_event(self, data, find_packet_callback):
|
||||||
data_parsed = parse_socketIO_data(data)
|
data_parsed = parse_socketIO_packet_data(data)
|
||||||
args = data_parsed.args
|
args = data_parsed.args
|
||||||
try:
|
try:
|
||||||
event = args.pop(0)
|
event = args.pop(0)
|
||||||
|
|
@ -404,7 +409,7 @@ class SocketIO(EngineIO):
|
||||||
find_packet_callback(event)(*args)
|
find_packet_callback(event)(*args)
|
||||||
|
|
||||||
def _on_ack(self, data, find_packet_callback):
|
def _on_ack(self, data, find_packet_callback):
|
||||||
data_parsed = parse_socketIO_data(data)
|
data_parsed = parse_socketIO_packet_data(data)
|
||||||
try:
|
try:
|
||||||
ack_callback = self._get_ack_callback(data_parsed.ack_id)
|
ack_callback = self._get_ack_callback(data_parsed.ack_id)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
|
|
||||||
|
|
@ -53,8 +53,17 @@ def decode_engineIO_content(content):
|
||||||
yield engineIO_packet_type, engineIO_packet_data
|
yield engineIO_packet_type, engineIO_packet_data
|
||||||
|
|
||||||
|
|
||||||
def parse_socketIO_data(data):
|
def format_socketIO_packet_data(path=None, ack_id=None, args=None):
|
||||||
data = decode_string(data)
|
socketIO_packet_data = json.dumps(args, ensure_ascii=False) if args else ''
|
||||||
|
if ack_id is not None:
|
||||||
|
socketIO_packet_data = str(ack_id) + socketIO_packet_data
|
||||||
|
if path:
|
||||||
|
socketIO_packet_data = path + ',' + socketIO_packet_data
|
||||||
|
return socketIO_packet_data
|
||||||
|
|
||||||
|
|
||||||
|
def parse_socketIO_packet_data(socketIO_packet_data):
|
||||||
|
data = decode_string(socketIO_packet_data)
|
||||||
if data.startswith('/'):
|
if data.startswith('/'):
|
||||||
try:
|
try:
|
||||||
path, data = data.split(',', 1)
|
path, data = data.split(',', 1)
|
||||||
|
|
@ -76,13 +85,17 @@ def parse_socketIO_data(data):
|
||||||
return SocketIOData(path=path, ack_id=ack_id, args=args)
|
return SocketIOData(path=path, ack_id=ack_id, args=args)
|
||||||
|
|
||||||
|
|
||||||
def format_socketIO_data(path=None, ack_id=None, args=None):
|
def get_namespace_path(socketIO_packet_data):
|
||||||
socketIO_packet_data = json.dumps(args, ensure_ascii=False) if args else ''
|
if '/' != get_character(socketIO_packet_data, 0):
|
||||||
if ack_id is not None:
|
return ''
|
||||||
socketIO_packet_data = str(ack_id) + socketIO_packet_data
|
# Loop incrementally in case there is binary data
|
||||||
if path:
|
parts = []
|
||||||
socketIO_packet_data = path + ',' + socketIO_packet_data
|
for i in range(len(socketIO_packet_data)):
|
||||||
return socketIO_packet_data
|
character = get_character(socketIO_packet_data, i)
|
||||||
|
if ',' == character:
|
||||||
|
break
|
||||||
|
parts.append(character)
|
||||||
|
return ''.join(parts)
|
||||||
|
|
||||||
|
|
||||||
def _make_packet_header(packet_string):
|
def _make_packet_header(packet_string):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue