On Tue, Apr 28, 2015 at 6:46 PM, Pantelis Theodosiou <yperc...@gmail.com> wrote:
> 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) > Oh, I messed it up. The first part is good but the factories do not have dataReceived methods. It would have to be - depending on what you want to do - say, you want to echo to all echoers: if sendermessage: self.transport.write(data) for echoer in self.app.multiechofactory.echoers: echoer.dataReceived(sendermessage) or: if sendermessage: self.transport.write(data) self.app.multiechofactory.echo_them_all() and define the echo_them_all() method in the MultiEchoFactory() class. > > 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