From 3cf7b7c42f385dfadb1220b6893677dd930601ab Mon Sep 17 00:00:00 2001 From: Iuri Diniz Date: Sat, 10 Sep 2011 22:55:38 -0300 Subject: [PATCH 1/3] new class WebSocketFactory Factory which wraps another factory to provide WebSockets transports for all of its protocols. --- websocket.py | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/websocket.py b/websocket.py index 5cae1d3..14a04da 100644 --- a/websocket.py +++ b/websocket.py @@ -18,6 +18,7 @@ import struct from twisted.internet import interfaces +from twisted.protocols.policies import WrappingFactory, ProtocolWrapper from twisted.web.http import datetimeToString from twisted.web.http import _IdentityTransferDecoder from twisted.web.server import Request, Site, version, unquote @@ -483,7 +484,41 @@ def dataReceived(self, data): self._data.append(data) break +class WebSocketFactory(WrappingFactory): + """ + Factory which wraps another factory to provide WebSockets transports for + all of its protocols. + """ + + protocol = ProtocolWrapper + + def buildHandler(self, transport): + """" + Called in order to build C{WebSocketHandler} objects. + + @ivar transport: a C{WebSocketTransport} instance. + @type: L{WebSocketTransport} + """ + + protocol = self.buildProtocol(transport.getHost()) + + handler = WebSocketHandler(transport) + + def connectionMade(): + protocol.makeConnection(transport) + + def frameReceived(frame): + protocol.dataReceived(frame) + + def connectionLost(reason): + protocol.connectionLost(reason) + + handler.connectionMade = connectionMade + handler.frameReceived = frameReceived + handler.connectionLost = connectionLost + + return handler -__all__ = ["WebSocketHandler", "WebSocketSite"] +__all__ = ["WebSocketHandler", "WebSocketSite", "WebSocketFactory"] From 9b32bcf662e52b057878357ada60d74998ffe36b Mon Sep 17 00:00:00 2001 From: Iuri Diniz Date: Sat, 10 Sep 2011 23:14:25 -0300 Subject: [PATCH 2/3] Example of wrapping a simple Echo Protocol --- echo.html | 47 +++++++++++++++++++++++++++++++++++++++++++++++ simple_server.py | 20 ++++++++++++++++---- 2 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 echo.html diff --git a/echo.html b/echo.html new file mode 100644 index 0000000..4c43a39 --- /dev/null +++ b/echo.html @@ -0,0 +1,47 @@ + + + WebSocket example: echo service + + +

WebSocket example: echo service

+ +
+ + + +
+ + +
+ + + +
+ + diff --git a/simple_server.py b/simple_server.py index a32af17..1a2fe40 100644 --- a/simple_server.py +++ b/simple_server.py @@ -16,8 +16,15 @@ from twisted.web.static import File from twisted.internet import task -from websocket import WebSocketHandler, WebSocketSite +from websocket import WebSocketHandler, WebSocketSite, WebSocketFactory +class Echo(Protocol): + def dataReceived(self, data): + print "Received data '%s'" % data.strip() + self.transport.write(data) + +class EchoFactory(Factory): + protocol = Echo class Testhandler(WebSocketHandler): def __init__(self, transport): @@ -71,10 +78,15 @@ def connectionMade(self): root = File('.') site = WebSocketSite(root) site.addHandler('/test', Testhandler) + + # example of wrapping a factory in order to provide WebSockets transport + echo_factory_wrapped = WebSocketFactory(EchoFactory()) + site.addHandler('/echo', echo_factory_wrapped.buildHandler) + reactor.listenTCP(8080, site) # run policy file server - factory = Factory() - factory.protocol = FlashSocketPolicy - reactor.listenTCP(843, factory) + #factory = Factory() + #factory.protocol = FlashSocketPolicy + #reactor.listenTCP(843, factory) reactor.run() From 05b031f212464ebb4a5293c7ced61568ce9a06df Mon Sep 17 00:00:00 2001 From: Iuri Diniz Date: Sat, 10 Sep 2011 23:45:01 -0300 Subject: [PATCH 3/3] undo comment flash policy server --- simple_server.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/simple_server.py b/simple_server.py index 1a2fe40..5a9e584 100644 --- a/simple_server.py +++ b/simple_server.py @@ -85,8 +85,8 @@ def connectionMade(self): reactor.listenTCP(8080, site) # run policy file server - #factory = Factory() - #factory.protocol = FlashSocketPolicy - #reactor.listenTCP(843, factory) + factory = Factory() + factory.protocol = FlashSocketPolicy + reactor.listenTCP(843, factory) reactor.run()