From: <umg...@us...> - 2007-04-01 17:32:29
|
Revision: 377 http://svn.sourceforge.net/pybridge/?rev=377&view=rev Author: umgangee Date: 2007-04-01 10:32:25 -0700 (Sun, 01 Apr 2007) Log Message: ----------- Fix error dump when a listener abruptly stops observing; accept config dict at initialisation. Modified Paths: -------------- trunk/pybridge/pybridge/network/localtable.py Modified: trunk/pybridge/pybridge/network/localtable.py =================================================================== --- trunk/pybridge/pybridge/network/localtable.py 2007-04-01 17:28:46 UTC (rev 376) +++ trunk/pybridge/pybridge/network/localtable.py 2007-04-01 17:32:25 UTC (rev 377) @@ -36,7 +36,7 @@ implements(ITable, ISubject, IListener) - def __init__(self, id, gametype): + def __init__(self, id, gametype, config={}): self.listeners = [] self.id = id @@ -44,14 +44,16 @@ self.game = gametype() # Initialise game. self.game.attach(self) # Listen for game events. - self.config = {} self.observers = {} # For each user perspective, a remote ITableEvents. self.players = {} # Positions mapped to perspectives of game players. self.view = LocalTableViewable(self) # For remote clients. - + # Configuration variables. - self.config['closeWhenEmpty'] = True - self.config['timeCreated'] = time.localtime() + self.config = {} + self.config['CloseWhenEmpty'] = True + self.config['MultiplePlayersPerUser'] = False + self.config['TimeCreated'] = tuple(time.localtime()) + self.config.update(config) def getStateToCacheAndObserveFor(self, perspective, observer): @@ -62,26 +64,26 @@ # Build a dict of public information about the table. state = {} state['id'] = self.id + state['gametype'] = self.gametype.__name__ + state['gamestate'] = self.game.getState() state['observers'] = [p.name for p in self.observers.keys()] state['players'] = dict([(pos, p.name) for pos, p in self.players.items()]) - state['gametype'] = self.gametype.__name__ - state['gamestate'] = self.game.getState() return state # To observer. def stoppedObserving(self, perspective, observer): + del self.observers[perspective] + # If user was playing, then remove their player(s) from game. for position, user in self.players.items(): if perspective == user: self.leaveGame(perspective, position) - - del self.observers[perspective] self.notify('removeObserver', observer=perspective.name) # If there are no remaining observers, close table. - if self.config.get('closeWhenEmpty') and not self.observers: + if self.config.get('CloseWhenEmpty') and not self.observers: self.server.tables.closeTable(self) @@ -133,7 +135,7 @@ if position not in self.game.positions: raise IllegalRequest, "Invalid position type" # Check that user is not already playing at table. - if not self.config.get('allowUserMultiplePlayers'): + if not self.config.get('MultiplePlayersPerUser'): if user in self.players.values(): raise DeniedRequest, "Already playing in game" @@ -195,6 +197,7 @@ def view_joinGame(self, user, position): + # TODO: return a deferred? return self.table.joinGame(user, position) @@ -203,5 +206,6 @@ def view_sendMessage(self, user, message, sender=None, recipients=[]): - return self.table.sendMessage(message, sender=user, recipients=recipients) + return self.table.sendMessage(message, sender=user, + recipients=recipients) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <umg...@us...> - 2007-07-10 17:19:08
|
Revision: 470 http://svn.sourceforge.net/pybridge/?rev=470&view=rev Author: umgangee Date: 2007-07-10 10:19:10 -0700 (Tue, 10 Jul 2007) Log Message: ----------- Don't expect server to set a reference to itself; instead, provide a null close() method which may be overridden. Modified Paths: -------------- trunk/pybridge/pybridge/network/localtable.py Modified: trunk/pybridge/pybridge/network/localtable.py =================================================================== --- trunk/pybridge/pybridge/network/localtable.py 2007-07-10 14:08:57 UTC (rev 469) +++ trunk/pybridge/pybridge/network/localtable.py 2007-07-10 17:19:10 UTC (rev 470) @@ -82,6 +82,11 @@ self.config.update(config) + def close(self): + """Close this table.""" + pass # Table creator should override this method. + + def getStateToCacheAndObserveFor(self, perspective, observer): # Inform existing observers that a new user has joined. self.notify('addObserver', observer=perspective.name) @@ -112,7 +117,7 @@ # If there are no remaining observers, close table. if self.config.get('CloseWhenEmpty') and not self.observers: - self.server.tables.closeTable(self) + self.close() # Implementation of ISubject. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |