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.
|
|
|
from ._transport import Transport
|
|
|
|
from ._sse_transport import ServerSentEventsTransport
|
|
|
|
from ._ws_transport import WebSocketsTransport
|
|
|
|
|
|
|
|
|
|
|
|
class AutoTransport(Transport):
|
|
|
|
def __init__(self, session, connection):
|
|
|
|
Transport.__init__(self, session, connection)
|
|
|
|
self.__available_transports = [
|
|
|
|
#WebSocketsTransport(session, connection),
|
|
|
|
ServerSentEventsTransport(session, connection)
|
|
|
|
]
|
|
|
|
self.__transport = None
|
|
|
|
|
|
|
|
def negotiate(self):
|
|
|
|
negotiate_data = Transport.negotiate(self)
|
|
|
|
self.__transport = self.__get_transport(negotiate_data)
|
|
|
|
|
|
|
|
return negotiate_data
|
|
|
|
|
|
|
|
def __get_transport(self, negotiate_data):
|
|
|
|
for transport in self.__available_transports:
|
|
|
|
if transport.accept(negotiate_data):
|
|
|
|
return transport
|
|
|
|
raise Exception('Cannot find suitable transport')
|
|
|
|
|
|
|
|
def start(self):
|
|
|
|
return self.__transport.start()
|
|
|
|
|
|
|
|
def send(self, data):
|
|
|
|
self.__transport.send(data)
|
|
|
|
|
|
|
|
def close(self):
|
|
|
|
self.__transport.close()
|
|
|
|
|
|
|
|
def _get_name(self):
|
|
|
|
return 'auto'
|