def _showPlayerMatchSetupGUI(self): self._setupGUI = MatchSetupDialog(self._setupObj, self.sendChatMsg) self._setupGUI.buildMatchControlGUI() self._setupGUI.enableWidgets(0) self._setupGUI.buildCommPanel() self._setupGUI.addButtons(starttext="Ready", canceltext="Disconnect", disconnect=1) self._showSetupGUI()
def _showHostMatchSetupGUI(self): trueItems = ("Stop Network Game", "Stop Server") falseItems = ("Start Network Game", "Connect To Server") self._sendMessage("ENABLE_MENUS", menuname="NetworkMenu", trueitems=trueItems, falseitems=falseItems) trueItems = [] falseItems = ("Run Match") self._sendMessage("ENABLE_MENUS", menuname="RunMenu", trueitems=trueItems, falseitems=falseItems) self._setupGUI = MatchSetupDialog(self._setupObj, self.sendChatMsg) self._setupGUI.buildMatchControlGUI() self._setupGUI.enableWidgetEvents() self._setupGUI.enableWidgets() self._setupGUI.buildCommPanel() self._setupGUI.addButtons(canceltext="Stop Server", disconnect=1) self._showSetupGUI()
class JowstClient(pb.Referenceable): def __init__(self, usertype, ifCB, name, passwd='', hostname="localhost", port=7101, host=0, clientToken=None): self.usertype = usertype self.passwd = passwd self.hostname = hostname self.port = port self.handshakePort = None self.factory = pb.PBClientFactory() self.host = host self.clientToken = clientToken self._setupGUI = None self.name = name self._sendMessage = ifCB self.remoteSetupObj = None self.setupQueue = Queue.Queue() self._isConnected = False self.state = None if self.host: self.handshakeListener = Handshaker() self.handshakeListener.stopClientCB = self.stopClient self.handshakeListener.setPasswdCB = self.setHostPassword def isHost(self): return self.host def remote_addNewPlayer(self, playerName): self._setupGUI.addPlayer(playerName, self.name) def remote_setPlayerReady(self, player): self._setupGUI.setPlayerReady(player) def remote_updateWidget(self, widget, val): print "updating", widget self._setupGUI.controlGUI.updateControlWidget(widget, val) def remote_updateCPU(self, wrestler, team, val): print "updateCPU", wrestler, team, 1 widget = self._setupGUI.controlGUI.teamLists[team] widget.Check(widget.FindString(wrestler), val) def remote_getClientName(self): return self.name def remote_setClientName(self, name): self.name = name def remote_receiveWrestlerUpdate(self, team, name, add): widget = self._setupGUI.controlGUI.teamLists[team] if add: widget.Append(name) else: widget.Delete(widget.FindString(name)) def remote_updatePlayerTree(self, team, name, add, player): if add: self._setupGUI.addWrestlerToPlayerTree(player, name, team) else: self._setupGUI.removeWrestlerFromPlayerTree(player, name) def remote_startMatch(self, teamlist, playerWrestlers, timeLimit, dramaobj, matchType, matchImage, labelData): print "starting match" self._sendMessage("CLOSE_POPUP_WIN", win_name="serverWait") self._sendMessage("START_MATCH", teams=teamlist, player_wrestlers=playerWrestlers, timelimit=timeLimit, drama=dramaobj, network=1, matchtype=matchType, matchimage=matchImage, labeldata=labelData) return self.name def remote_removePlayer(self, player): self._setupGUI.removePlayer(player) def remote_receiveMessage(self, msg, **kw): kw["callback"] = self.sendResult self._sendMessage(msg, **kw) def remote_receiveChatMessage(self, player, msg): if self.state == MATCH_SETUP: self._setupGUI.handleChatMessage(player, msg) else: self._sendMessage("CHAT_MSG", playername=player, message=msg) def remote_matchEndMessage(self, text, winName): self._sendMessage("SHOW_POPUP_WIN", win_text=text, win_name=winName) def remote_restartGame(self, winName): self._sendMessage("CLOSE_POPUP_WIN", win_name=winName) self._restartNetGame(None) def remote_disconnect(self): # Try to destroy setup GUI if one exists try: self._setupGUI.Destroy() except: pass self._disconnect(None) self._sendMessage("CLEANUP_UI") return 1 def _sendMatchSetupMsg(self, msg, *args): return self.remoteSetupObj.callRemote("sendMatchSetupMsg", msg, *args) def sendChatMsg(self, msg): self.remoteChatObj.callRemote("receiveChatMessage", msg) def sendResult(self, result): self.perspective.callRemote("sendPromptResult", result) def isConnected(self): return self._isConnected def _populateSetupGUI(self, valdict): self._setupGUI.controlGUI.timeLimitEntry.SetValue(valdict["TIME_LIMIT"]) if valdict["TIME_LIMIT"] == NO_TIME_LIMIT: self._setupGUI.controlGUI.noTimeLimitChkbox.SetValue(1) else: self._setupGUI.controlGUI.noTimeLimitChkbox.SetValue(0) self._setupGUI.controlGUI.dqEnabled.SetValue(valdict["DQ_ENABLED"]) dramaPause = valdict["DRAMA"].getDramaPause() rtpins = valdict["DRAMA"].getRealtimePins() rtcountouts = valdict["DRAMA"].getRealtimeCountouts() subdrama = valdict["DRAMA"].getSubmissionDrama() self._setupGUI.controlGUI.dramaticPause.SetValue(dramaPause) self._setupGUI.controlGUI.realtimePins.SetValue(rtpins) self._setupGUI.controlGUI.realtimeCountouts.SetValue(rtcountouts) self._setupGUI.controlGUI.submissionDrama.SetValue(subdrama) # Add teams to teamlists and set up their CPU status t = 0 for team in valdict["TEAMS"]: teamCPUs = valdict["CPUS"][t] widget = self._setupGUI.controlGUI.teamLists[t] for member in team: widget.Append(member) if member in teamCPUs: widget.Check(widget.FindString(member), 1) t += 1 # Add Players and the wrestlers they control to the player Tree for player in valdict["PLAYER_MAP"].keys(): self._setupGUI.addPlayer(player, self.name) for wrestler in valdict["PLAYER_MAP"][player].keys(): self._setupGUI.addWrestlerToPlayerTree(player, wrestler, valdict["PLAYER_MAP"][player][wrestler]) def setPerspective(self, perspective): self._isConnected = True self.perspective = perspective self.perspective.callRemote("joinMatchSetup").addCallback(self._setRemoteObjects) if self.isHost(): self._setupObj = Interface.HostMatchSetup(self._sendMatchSetupMsg) self._showHostMatchSetupGUI() else: self._setupObj = Interface.ClientMatchSetup(self._sendMatchSetupMsg) self._showPlayerMatchSetupGUI() def _showHostMatchSetupGUI(self): trueItems = ("Stop Network Game", "Stop Server") falseItems = ("Start Network Game", "Connect To Server") self._sendMessage("ENABLE_MENUS", menuname="NetworkMenu", trueitems=trueItems, falseitems=falseItems) trueItems = [] falseItems = ("Run Match") self._sendMessage("ENABLE_MENUS", menuname="RunMenu", trueitems=trueItems, falseitems=falseItems) self._setupGUI = MatchSetupDialog(self._setupObj, self.sendChatMsg) self._setupGUI.buildMatchControlGUI() self._setupGUI.enableWidgetEvents() self._setupGUI.enableWidgets() self._setupGUI.buildCommPanel() self._setupGUI.addButtons(canceltext="Stop Server", disconnect=1) self._showSetupGUI() def _setRemoteObjects(self, objTuple): if not self.remoteSetupObj: self.remoteSetupObj = objTuple[0] if objTuple[1]: self.remoteChatObj = objTuple[1] def _showPlayerMatchSetupGUI(self): self._setupGUI = MatchSetupDialog(self._setupObj, self.sendChatMsg) self._setupGUI.buildMatchControlGUI() self._setupGUI.enableWidgets(0) self._setupGUI.buildCommPanel() self._setupGUI.addButtons(starttext="Ready", canceltext="Disconnect", disconnect=1) self._showSetupGUI() def _showSetupGUI(self): self._setupGUI.Show(1) self.setupQueue.put(1) self.state = MATCH_SETUP EVT_IDLE(self._setupGUI, self._checkState) def _checkState(self, evt): """This method checks the state of the match setup GUI TODO: This should be moved to the MainJowstWindow class""" if self._setupGUI.state == READY_TO_START_MATCH: if self.isHost(): self.perspective.callRemote("startMatch") else: self.remoteSetupObj.callRemote("playerReady") self._sendMessage("SHOW_POPUP_WIN", win_name="serverWait", win_text="Waiting for host to start match...") self._setupGUI.state = STARTING_MATCH self._setupGUI.Destroy() self.state = MATCH_RUNNING elif self._setupGUI.state == DISCONNECT: if self.isHost(): d = self.perspective.callRemote("stopServer") else: d = self.perspective.callRemote("leaveServer") d.addCallbacks(self._disconnect, self.handleShutdownFailure) self._setupGUI.Destroy() elif not self.setupQueue.empty() and self.remoteSetupObj: guibuilt = self.setupQueue.get() # Ask for current match setup self.remoteSetupObj.callRemote("getCurrentSetupValues").addCallback(self._populateSetupGUI) def _disconnect(self, val): self._sendMessage("DISCONNECT_MSG", message="Disconnected from Server", caption="Disconnected") def startClient(self): if self.isHost(): self.handshakePort = reactor.listenTCP(7100, server.Site(self.handshakeListener), interface='localhost') else: self.connectToService() def stopNetGame(self): self.perspective.callRemote("stopNetGame") def disconnectFromServer(self): self.perspective.callRemote("leaveServer") self._disconnect(None) def stopServer(self): self.perspective.callRemote("stopServer").addCallbacks(self._disconnect, self.handleShutdownFailure) def _restartNetGame(self, server_state): self._sendMessage("CLEANUP_UI", shutdown=0) if self.isHost(): self._showHostMatchSetupGUI() else: self._showPlayerMatchSetupGUI() def setHostPassword(self, adminpasswd, passwd, hostPlayerName, clientToken): retval = 0 if clientToken == self.clientToken: self.name = hostPlayerName self.passwd = passwd self.adminpasswd = adminpasswd self.connectToService() retval = 1 return retval def stopClient(self, clientToken): retval = 0 if clientToken == self.clientToken: self.handshakePort.stopListening() retval = 1 return retval def connectToService(self): if self.handshakePort: self.handshakePort.stopListening() self.handshakePort = None reactor.connectTCP(self.hostname, self.port, self.factory) if self.isHost(): self.passwd = self.adminpasswd defPer = self.factory.login(credentials.UsernamePassword(self.usertype, self.passwd), client=self) defPer.addCallback(self.setPerspective) defPer.addErrback(self.handleError) def handleError(self, failure): print failure self._sendMessage("DISCONNECT_MSG", message="Unable to connect to server\nbecause the maximum\n" +\ "connection limit was reached,\nthe incorrect password" +\ " was entered,\nor the host was not found.", caption="Unable to connect to server.") def handleShutdownFailure(self, failure): pass