Pantellis thank you so much for your guide! I am still quite unfamiliar with python and twisted so I made all kind of silly mistakes and could not figure out how to fix them
I tried your code, it seems to me that it should be working with by referencing the factories as well as the self.app...Unfortunately when I ran it it did not work well, the program has an error with your line for echoer in self.app.multiechofactory.echoers: echoer.dataReceived(sendermessage) The error is: exceptions.AttributeError: MultiEcho instance has no attribute 'app' I thought that the "app" has already been referenced? 2015-04-29 1:55 GMT+08:00 Pantelis Theodosiou <yperc...@gmail.com>: > > 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 > >
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python