Esempio n. 1
0
    def __init__(self):
        """self.servers is a list of tuples containing server and last playername"""
        QDialog.__init__(self, None)
        decorateWindow(self, i18nc('kajongg', 'Login'))
        self.setupUi()

        localName = i18nc('kajongg name for local game server',
                          Query.localServerName)
        self.servers = Query(
            'select url,lastname from server order by lasttime desc').records
        servers = list(x[0] for x in self.servers
                       if x[0] != Query.localServerName)
        # the first server combobox item should be default: either the last used server
        # or localName for autoPlay
        if localName not in servers:
            servers.append(localName)
        if 'kajongg.org' not in servers:
            servers.append('kajongg.org')
        if Internal.autoPlay:
            demoHost = Options.host or localName
            if demoHost in servers:
                servers.remove(
                    demoHost
                )  # we want a unique list, it will be re-used for all following games
            servers.insert(0, demoHost)
            # in this process but they will not be autoPlay
        self.cbServer.addItems(servers)
        self.passwords = Query(
            'select url, p.name, passwords.password from passwords, player p '
            'where passwords.player=p.id').records
        Players.load()
        self.cbServer.editTextChanged.connect(self.serverChanged)
        self.cbUser.editTextChanged.connect(self.userChanged)
        self.serverChanged()
        StateSaver(self)
Esempio n. 2
0
 def __haveLoginData(self, arguments):
     """user entered login data, now try to login to server"""
     self.url, self.username, self.password, self.ruleset = arguments
     if self.url.isLocalHost:
         # we have localhost if we play a Local Game: client and server are identical,
         # we have no security concerns about creating a new account
         Players.createIfUnknown(self.dlg.cbUser.currentText())
Esempio n. 3
0
    def __init__(self):
        """self.servers is a list of tuples containing server and last playername"""
        QDialog.__init__(self, None)
        self.setWindowTitle(m18n('Login') + ' - Kajongg')
        self.setupUi()

        localName = m18nc('kajongg name for local game server', Query.localServerName)
        self.servers = Query('select url,lastname from server order by lasttime desc').records
        servers = [m18nc('kajongg name for local game server', x[0]) for x in self.servers]
        # the first server combobox item should be default: either the last used server
        # or localName for autoPlay
        if localName not in servers:
            servers.append(localName)
        if 'kajongg.org' not in servers:
            servers.append('kajongg.org')
            demoHost = Options.host or localName
            if demoHost in servers:
                servers.remove(demoHost)  # we want a unique list, it will be re-used for all following games
            servers.insert(0, demoHost)   # in this process but they will not be autoPlay
        self.cbServer.addItems(servers)
        self.passwords = Query('select url, p.name, passwords.password from passwords, player p '
            'where passwords.player=p.id').records
        Players.load()
        self.cbServer.editTextChanged.connect(self.serverChanged)
        self.cbUser.editTextChanged.connect(self.userChanged)
        self.serverChanged()
        StateSaver(self)
Esempio n. 4
0
 def __haveLoginData(self, arguments):
     """user entered login data, now try to login to server"""
     if self.url == 'localhost':
         # we have localhost if we play a Local Game: client and server are identical,
         # we have no security concerns about creating a new account
         Players.createIfUnknown(unicode(self.dlg.cbUser.currentText()))
     self.useSocket, self.url, self.username, self.ruleset = arguments
     self.__checkExistingConnections()
Esempio n. 5
0
 def __haveLoginData(self, arguments):
     """user entered login data, now try to login to server"""
     if self.url == 'localhost':
         # we have localhost if we play a Local Game: client and server are identical,
         # we have no security concerns about creating a new account
         Players.createIfUnknown(unicode(self.dlg.cbUser.currentText()))
     self.useSocket, self.url, self.username, self.ruleset = arguments
     self.__checkExistingConnections()
Esempio n. 6
0
 def __adduser(self):
     """create a user account"""
     assert self.url is not None
     if not self.url.isLocalHost:
         if not AddUserDialog(self.url, self.dlg.username,
                              self.dlg.password).exec_():
             raise CancelledError
         Players.createIfUnknown(self.username)
     adduserCmd = SERVERMARK.join(
         ['adduser', self.dlg.username, self.dlg.password])
     return self.loginCommand(adduserCmd)
Esempio n. 7
0
 def __adduser(self):
     """create a user account"""
     assert self.url is not None
     if self.dlg.host != Query.localServerName:
         if not AddUserDialog(self.dlg.url,
             self.dlg.username,
             self.dlg.password).exec_():
             return
         Players.createIfUnknown(self.username)
     adduserCmd = SERVERMARK.join(['adduser', self.dlg.username, self.dlg.password])
     return self.loginCommand(adduserCmd)
Esempio n. 8
0
 def __adduser(self):
     """create a user account"""
     assert self.url is not None
     if self.dlg.host != Query.localServerName:
         if not AddUserDialog(self.dlg.url, self.dlg.username,
                              self.dlg.password).exec_():
             return
         Players.createIfUnknown(self.username)
     adduserCmd = SERVERMARK.join(
         ['adduser', self.dlg.username, self.dlg.password])
     return self.loginCommand(adduserCmd)
Esempio n. 9
0
 def _ai_make_move(self, dt):
     '''Have the AI make its next move'''
     if not self.two_player:
         ai_move = AI.get_next_move(
             self.board, Players.other_player(self.human_player))
         if ai_move:
             ai_move_row, ai_move_columnn = ai_move
             self._make_move(ai_move_row, ai_move_columnn)
Esempio n. 10
0
 def updateServerInfoInDatabase(self):
     """we are online. Update table server."""
     lasttime = datetime.datetime.now().replace(microsecond=0).isoformat()
     url = english(self.url) # use unique name for Local Game
     with Transaction():
         serverKnown = Query('update server set lastname=?,lasttime=? where url=?',
             list([self.username, lasttime, url])).rowcount() == 1
         if not serverKnown:
             Query('insert into server(url,lastname,lasttime) values(?,?,?)',
                 list([url, self.username, lasttime]))
     # needed if the server knows our name but our local data base does not:
     Players.createIfUnknown(self.username)
     playerId = Players.allIds[self.username]
     with Transaction():
         if Query('update passwords set password=? where url=? and player=?',
             list([self.password, url, playerId])).rowcount() == 0:
             Query('insert into passwords(url,player,password) values(?,?,?)',
                 list([url, playerId, self.password]))
Esempio n. 11
0
 def __updateServerInfoInDatabase(self):
     """we are online. Update table server."""
     lasttime = datetime.datetime.now().replace(microsecond=0).isoformat()
     with Internal.db:
         serverKnown = Query(
             'update server set lastname=?,lasttime=? where url=?',
             (self.username, lasttime, self.url)).rowcount() == 1
         if not serverKnown:
             Query(
                 'insert into server(url,lastname,lasttime) values(?,?,?)',
                 (self.url, self.username, lasttime))
     # needed if the server knows our name but our local data base does not:
     Players.createIfUnknown(self.username)
     playerId = Players.allIds[self.username]
     with Internal.db:
         if Query(
                 'update passwords set password=? where url=? and player=?',
             (self.password, self.url, playerId)).rowcount() == 0:
             Query(
                 'insert into passwords(url,player,password) values(?,?,?)',
                 (self.url, playerId, self.password))
Esempio n. 12
0
 def _undo_move(self):
     '''Internal method to undo the previous move'''
     # Remove move from internal board
     move = self.board.undo_move()
     # If there was a move to undo
     if move:
         row, column = move
         # Remove player's icon from tile
         self.grid.set_tile_icon(
             row, column, self.player_icons[Players.unplayed])
         # Return to previous turn
         self.player = Players.other_player(self.player)
         self.previous.title = self.player_names[self.player]
Esempio n. 13
0
 def updateServerInfoInDatabase(self):
     """we are online. Update table server."""
     lasttime = datetime.datetime.now().replace(microsecond=0).isoformat()
     url = english(self.url)  # use unique name for Local Game
     with Transaction():
         serverKnown = Query(
             'update server set lastname=?,lasttime=? where url=?',
             list([self.username, lasttime, url])).rowcount() == 1
         if not serverKnown:
             Query(
                 'insert into server(url,lastname,lasttime) values(?,?,?)',
                 list([url, self.username, lasttime]))
     # needed if the server knows our name but our local data base does not:
     Players.createIfUnknown(self.username)
     playerId = Players.allIds[self.username]
     with Transaction():
         if Query(
                 'update passwords set password=? where url=? and player=?',
                 list([self.password, url, playerId])).rowcount() == 0:
             Query(
                 'insert into passwords(url,player,password) values(?,?,?)',
                 list([url, playerId, self.password]))
Esempio n. 14
0
    def _handle_move_results(self, win_status):
        '''Handle the results of a move

        Based on the results of a move, end a game and display win/tie message or
         just advance to the next turn
        '''
        gameover, winner = win_status
        if gameover:
            self.game_over = True
            # Cat's game
            if winner == Results.tie:
                self.message.display_message("Cat's game!")
            else:
                self.grid.display_win(self.board.get_winning_streak())
                Clock.schedule_once(self._display_win_message, 0.3)
            return False
        # If no win, advance to next turn
        self.player = Players.other_player(self.player)
        self.previous.title = self.player_names[self.player]
        return True
Esempio n. 15
0
    def game_loop(self):
        self.connection()
        players = Players.Players(self.w)
        game = Game.Game(self.w, players, self.process)
        players.setMe(self.me)
        i = 0

        while i < 2:
            game.printwaiting()
            game.geteventtab()
            socket_list = [sys.stdin, self.s]
            ready_to_read, ready_to_write, in_error = select.select(
                socket_list, [], [], 0.05)
            for sock in ready_to_read:
                if sock == self.s:
                    # incoming message from remote server, s
                    data = sock.recv(4096)
                    if not data:
                        print '\nDisconnected from server'
                        sys.exit()
                    else:
                        data = data.split('\n')
                        for enemy in data:
                            enemy = enemy.split('#')
                            if (len(enemy) > 3):
                                players.setNewEnemy(enemy[0], enemy[1],
                                                    enemy[2], enemy[3], 90)
                                i += 1
        game.clearbackground()
        game.display()
        while 1:
            socket_list = [sys.stdin, self.s]
            # Get the list sockets which are readable
            ready_to_read, ready_to_write, in_error = select.select(
                socket_list, [], [], 0.05)

            for sock in ready_to_read:
                if sock == self.s:
                    data = sock.recv(4096)
                    if not data:
                        print '\nDisconnected from server'
                        sys.exit()
                    else:
                        if data[0] == '#':  # position tanks
                            tmp_split = data[1:].split('#')
                            game.moveEnemy(tmp_split[0], tmp_split[1],
                                           tmp_split[2], tmp_split[3])
                        elif data[0] == '&':  # balles
                            tmp_split = data[1:].split('&')
                            game.bullets.addEnemy(tmp_split[0], tmp_split[1],
                                                  tmp_split[2], tmp_split[3],
                                                  tmp_split[4])
                        elif data[0] == '$':  # Game
                            tmp_split = data[1:].split('$')
                            game.players.disconnect(tmp_split[0])
                else:
                    game.display()
                    msg = game.getevent()
                    if msg is not None and msg != "error":
                        if (msg[0] != '&'):
                            msg = "#" + self.me + '#' + msg + "#"
                        self.s.send(msg)
                    if len(players.tanks) < 2:
                        if (self.process is not None):
                            self.process.kill()
                        exit(0)