On 10/30/2012 06:50 AM, Laurens Van Houtven wrote:
> On Mon, Oct 29, 2012 at 4:02 PM, <[email protected]
> <mailto:[email protected]>> wrote:
>
>     In case anyone didn't read #3204: this is, of course, an unsupported use
>     of transports and not guaranteed to work or continue working (currently
>     it will not work if you happen to be using the (preferred) protocol-
>     based SSL implementation).
>
>
> So, is there a non-terrible way of doing "feed the raw HTTP bytes that
> caused this request to this factory instead", in an IResource?

Would it not make more sense to subclass Site and swap out the Channel 
implementation for one that can be "pointed" somewhere else? It means 
you have to use that "Site" for any WebSocket enabled site, but it would 
be clean otherwise. Like so:

class WebSockCapableChannel(http.HTTPChannel):
   def __init__(self):
     http.HTTPChannel.__init__(self)
     self.websocket = False

   def startWebSocket(self, proto):
     self.websocket = True
     self.websocket_proto = proto
     proto.transport = someWrapper(self)
     proto.connectionMade(...)
     self.setRawMode()

   def rawDataReceived(self, data):
     if self.websocket:
       self.websocket_proto.dataReceived(data)
     else:
       http.HTTPChannel.rawDataReceived(self, data)

class WebSocketSite(server.Site):
   procol = WebSockCapableChannel

...then in your "Resource" do:

class MyResource(...):
   def render(...):
     request.channel.startWebSocket(someProto())

_______________________________________________
Twisted-Python mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to