No, I don't think that would work. You would need something like changing these lines:
reactor.listenTCP(8000, EchoFactory(self)) # for sender reactor.listenTCP(8001, MultiEchoFactory(self)) # for receiver to: self.echofactory = EchoFactory(self) self.multiechofactory = MultiEchoFactory(self) reactor.listenTCP(8000, self.echofactory) # for sender reactor.listenTCP(8001, self.multiechofactory) # for receiver so, your "app" object (which is just a normal Python object) knows the other two objects (the instances of the 2 factories). Then, your calls: if sendermessage: self.transport.write(data) #this line here is the trouble maker that caused the error MultiEcho().dataReceived(sendermessage) could be written: if sendermessage: self.transport.write(data) self.app.multiechofactory.dataReceived(sendermessage) On Tue, Apr 28, 2015 at 6:28 PM, Jessica Tsui <jesadj...@gmail.com> wrote: > Hi Daniel, > > Thank you so much for your suggestion. I am quite new to python and > twisted so I am not very certain about how to make it work well. Does that > mean if I change the dataReceived by adding a line to instantiate the > MultiEchoFactory like this, it will work? > > def dataReceived(self, data): > "As soon as any data is received, write it back." > handlesendermessage = self.factory.app.handle_message(data) > > if handlesendermessage: > self.transport.write(data) > MultiEchoFactory() > MultiEcho().dataReceived(data) > > > 2015-04-29 0:33 GMT+08:00 Louis D. Burr <ldanielb...@me.com>: > >> Hi Jessica, >> >> On Apr 28, 2015, at 10:14 AM, Jessica Tsui <jesadj...@gmail.com> wrote: >> >> SNIP >> >> exceptions.AttributeError: MultiEcho instance has no attribute ‘factory' >> >> SNIP >> >> MultiEcho().dataReceived(sendermessage) >> >> Here you create an instance of the protocol directly, i.e., without >> having instantiated a MutilEchoFactory. The factory’s buildProtocol method >> is what assigns the factory instance as a member of the protocol >> (self.factory), and since you didn’t create the protocol via a factory, you >> have no factory attribute on your protocol instance. >> >> There are a number of ways to fix this, but generally speaking, you need >> to provide a way for your factories and their protocols to be aware of each >> other. >> >> Hope this helps, >> >> Daniel >> -- >> L. Daniel Burr >> ldanielb...@me.com >> (312) 656-8387 >> >> >> _______________________________________________ >> Twisted-Python mailing list >> Twisted-Python@twistedmatrix.com >> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python >> >> > > _______________________________________________ > Twisted-Python mailing list > Twisted-Python@twistedmatrix.com > http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python > >
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python