[Twisted-Python] Help implement protocol

Keith Cheung (張國良) keith.cheung at lkmachinery.com.hk
Thu Aug 10 03:52:48 EDT 2006


Thanks Andrew and Thomas.
Both are much better then my previous approach.


-----Original Message-----
From: twisted-python-bounces at twistedmatrix.com [mailto:twisted-python-bounces at twistedmatrix.com] On Behalf Of Andrew Bennetts
Sent: Monday, August 07, 2006 6:29 PM
To: Twisted general discussion
Subject: Re: [Twisted-Python] Help implement protocol

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.


_______________________________________________
Twisted-Python mailing list
Twisted-Python at twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python






More information about the Twisted-Python mailing list