Beispiel #1
0
 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
Beispiel #2
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)