[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