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.