On Saturday, 27 June 2020 07:47:14 BST Ian Haywood wrote: > In smb I have a SMBPacketReceiver that inherits from t.i.p.Protocol, it > breaks the incoming TCP stream into logical packets (the analogue of > LineReceiver in line-based protocols). > > I then subclass SMBPacketReceiver to SMBProtocol which does a lot of the > "heavy lifting" analyzing incoming packets. > > I've been told in code review to use composition instead of inheritance, > which is fine in a general sense but I have difficulty applying to > twisted-specific tasks. > > 1. how to do Factory.buildProtocol? It has to return a t.i.p.Protocol, > but with composition the Protocol object is a private variable of > SMBPacketReceiver, in turn a private variable of SMBProtocol. > > 2. what to do instead of overriding Protocol.dataReceived and access > incoming data if not allowed to subclass it? > > Now its not that I cant think of workarounds to these two problems, but > they're ugly > > Is there some recent twisted code using composition that I can look at?
Have a look at the twisted code that handles HTTP. It switches from line handling for the headers to body handing in we either 1 block or chunked encoding. I think that matches what you are up to. Barry > > > Ian > > _______________________________________________ > Twisted-Python mailing list > Twisted-Python@twistedmatrix.com > https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python > _______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python