[Twisted-Python] Help implement protocol

Andrew Bennetts andrew-twisted at puzzling.org
Mon Aug 7 06:28:36 EDT 2006


On Sat, Aug 05, 2006 at 11:44:44AM +0800, Keith Cheung (張國良) wrote:
> Hi all,
> 
> I want to implement some handshake protocol, say..
> 
> 1. Client:	WhatDate
> 2. Server: 	5Aug
> 3. Client:	WhatYear
> 4. Server:	2006
> 5. Client:	WhatTime
> 6. Server:	1005
> 
> So, for the client:-  (pseudo code)
> 	def connectionMade():
> 		send "WhatDate"
> 		state = askingForDate
> 	def lineReceived(data):
> 		switch state:
> 			askingForDate:
> 				date = data
> 				send "WhatYear"
> 				state = askingForYear
> 				break
> 			askingForYear:
> 				year = data
> 				send = "WhatTime"
> 				state = askingForTime
> 				break
> 			askingForTime:
> 				time = data
> 				state = initialState
> 				disconnect
> 
> The switch case becomes gigantic as the protocol grow.  Instead of keeping states, are there better ways to implement?

Twisted code often uses dynamic method dispatch to methods with prefixed names
like this:

    def connectionMade(self):
        self.sendLine('WhatDate')
        self.state = 'askingForDate'

    def lineReceived(self, line):
        handler = getattr(self, 'state_' + self.state)
        handler(line)

    def state_askingForDate(self, line):
        self.date = line
        self.sendLine('WhatYear')
        self.state = 'askingForYear'

    ...

-Andrew.





More information about the Twisted-Python mailing list