def __init__(self, playTimeout, minPlayers, lobbyTimeout): self.host = '' self.port = 36727 self.backlog = 5 self.bufsize = 1024 self.server = None self.threads = [] self.playTimeout = playTimeout self.lobbyTimeout = lobbyTimeout self.lobby = [] # list of player objects with sockets self.strikeCode = None self.minPlayers = minPlayers self.maxPlayers = 7 self.maxConns = 35 self.mode = '' self.msgMaker = SMsgMaker(self) self.mangleNum = 0 self.game = None self.timer = None self.lobbyTimeoutTime = 0 self.playTime = 0 self.warlordTime = 0
class Server: def __init__(self, playTimeout, minPlayers, lobbyTimeout): self.host = '' self.port = 36727 self.backlog = 5 self.bufsize = 1024 self.server = None self.threads = [] self.playTimeout = playTimeout self.lobbyTimeout = lobbyTimeout self.lobby = [] # list of player objects with sockets self.strikeCode = None self.minPlayers = minPlayers self.maxPlayers = 7 self.maxConns = 35 self.mode = '' self.msgMaker = SMsgMaker(self) self.mangleNum = 0 self.game = None self.timer = None self.lobbyTimeoutTime = 0 self.playTime = 0 self.warlordTime = 0 def startGame(self): if len(self.lobby) >= 3 and self.game is None: self.game = Game(self) self.timer = None self.game.setup() def strike(self, player, code): strik = self.msgMaker.makeStrik(player, code) self.sendToPlayer(strik, player) if player.strikes >= 3: self.kick(player) def kick(self, player): if player.atTable: player.status = 'd' player.numCards = '00' if self.game: if player is self.game.activePlayer: self.game.nextPlayer() self.game.playedDeck.extend(player.hand) player.hand = [] stabl = self.msgMaker.makeStabl() self.sendToAll(stabl) if player in self.game.table: self.game.table.remove(player) if player in self.game.gameTable: self.game.gameTable.remove(player) #self.game.table.remove(player) if player in self.lobby: self.lobby.remove(player) if self.lobby: slobb = self.msgMaker.makeSlobb() self.sendToAll(slobb) player.sock.close() for kplayer in self.socks: if kplayer is not self.server: if kplayer.name == player.name: self.socks.remove(kplayer) print "{0} kicked from server.".format(player.name) def mangleName(self, newPlayer): if len(str(self.mangleNum)) == 1: mangleNumStr = '0' + str(self.mangleNum) else: mangleNumStr = str(self.mangleNum) self.mangleNum += 1 mangleName = newPlayer.name.strip() #+ mangleNumStr if len(mangleName) > 6: mangleName = mangleName[0:6] mangleName += mangleNumStr while len(mangleName) < 8: mangleName += ' ' newPlayer.name = mangleName def addPlayerToLobby(self, player, name): newPlayer = player newPlayer.name = name for player in self.lobby: if newPlayer.name == player.name: self.mangleName(newPlayer) break if self.game: for player in self.game.table: if newPlayer.name == player.name: self.mangleName(newPlayer) break # make sjoin string msg based on attributes of player sjoin = self.msgMaker.makeSjoin(newPlayer) self.sendToPlayer(sjoin, newPlayer) # append the player to the lobby self.lobby.append(newPlayer) # make slobb string msg based on attributes of lobby slobb = self.msgMaker.makeSlobb() self.sendToAll(slobb) if len(self.lobby) >= self.minPlayers and not self.game and self.timer is None: self.lobbyTimeoutTime = int(time.time()) print "Lobby Timeout Started" else: self.lobbyTimeoutTime = 0 if len(self.lobby) >= 7: self.startGame() def open_socket(self): try: self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.server.bind((self.host, self.port)) self.server.listen(5) except socket.error, message: if self.server: self.server.close() print 'Could not open socket: ', message sys.exit(1)