예제 #1
0
 def post(self, *args, **kwargs):
     userId = self.get_secure_cookie("userId").decode("utf-8")
     fromId = self.get_argument("fromId")
     oprId = random.randint(0, 999999)
     oprId = str(oprId)
     cursor.execute(
         "DELETE FROM game_notification WHERE from_id=%s AND to_id=%s",
         (fromId, userId))
     cursor.execute(
         "SELECT * FROM group_info WHERE user_id=%s AND group_name='我的好友'",
         userId)
     row = cursor.fetchone()
     userDefaultGroupId = row["group_id"]
     cursor.execute(
         "SELECT * FROM group_info WHERE user_id=%s AND group_name='我的好友'",
         fromId)
     row = cursor.fetchone()
     fromDefaultGroupId = row["group_id"]
     cursor.execute(
         "INSERT INTO friend_info (user_id, friend_id, group_id, opr_id) VALUES (%s,%s,%s,%s)",
         (userId, fromId, userDefaultGroupId, oprId))
     cursor.execute(
         "INSERT INTO friend_info (user_id, friend_id, group_id, opr_id) VALUES (%s,%s,%s,%s)",
         (fromId, userId, fromDefaultGroupId, oprId))
     fromId = str(fromId)
     if fromId in HomeSocketCache.keys():
         HomeSocketCache[fromId].refreshFriendList()
     logging.info("用户:" + userId + "好友添加成功!操作号" + oprId)
     logging.info("用户:" + fromId + "好友添加成功!操作号" + oprId)
     self.write("{'status':'00'}")
예제 #2
0
    def post(self, *args, **kwargs):
        self.set_header('Content-type', 'application/json')
        userId = self.get_secure_cookie("userId").decode("utf-8")
        cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
        row = cursor.fetchone()
        tableId = row["table_id"]
        readyState = self.get_argument("readyState")
        rowNumber = cursor.execute("SELECT * FROM game_table_info WHERE left_player_id=%s AND table_id=%s",
                                   (userId, tableId))
        if rowNumber >= 1:
            # 用户坐在左边
            if readyState == "0":
                cursor.execute("UPDATE game_table_info SET left_ready_state=1 WHERE table_id=%s", tableId)
            else:
                cursor.execute("UPDATE game_table_info SET left_ready_state=0 WHERE table_id=%s", tableId)
        else:
            # 用户坐在右边
            if readyState == "0":
                cursor.execute("UPDATE game_table_info SET right_ready_state=1 WHERE table_id=%s", tableId)
            else:
                cursor.execute("UPDATE game_table_info SET right_ready_state=0 WHERE table_id=%s", tableId)
        returnData = {"status": "00"}
        self.write(json.dumps(returnData, ensure_ascii=False))
        # 通知房间内的玩家刷新player-status
        for key in GameRoomSocketCache[tableId].keys():
            GameRoomSocketCache[tableId][key].refreshPlayerStatus()

        # 判断是否双方都已准备开始游戏,并在公共变量中添加GameRoomCache
        cursor.execute("SELECT * FROM game_table_info WHERE table_id=%s", tableId)
        row = cursor.fetchone()
        if row["left_ready_state"] == 1 and row["right_ready_state"] == 1:
            initGame(tableId)
예제 #3
0
def exitGameRoom(userId,tableId):
    cursor.execute("UPDATE game_table_info SET left_player_id=NULL,left_ready_state=0 WHERE table_id=%s AND left_player_id=%s",
                   (tableId, userId))
    cursor.execute("UPDATE game_table_info SET right_player_id=NULL,right_ready_state=0 WHERE table_id=%s AND right_player_id=%s",
                   (tableId, userId))
    # 获取gameState
    cursor.execute("SELECT * FROM game_table_info WHERE table_id=%s", tableId)
    row = cursor.fetchone()
    gameState = row["game_state"]
    # 获取anotherPlayerId
    anotherPlayerId = None
    if gameState == 1:
        for key in GameRoomCache[tableId]["playerState"].keys():
            if key != userId:
                anotherPlayerId = key
                break
    escapeFlag = False
    if gameState == 1:
        # 玩家逃离对局,进行相应数据库操作
        escapeFlag = True
        cursor.execute(
            "UPDATE game_table_info SET left_ready_state=0,right_ready_state=0,game_state=0 WHERE table_id=%s",
            tableId)
        cursor.execute(
            "UPDATE user_info SET win_time=win_time+1,game_time=game_time+1 WHERE user_id=%s",
            anotherPlayerId)
        cursor.execute(
            "UPDATE user_info SET game_time=game_time+1 WHERE user_id=%s",
            userId)
        GameRoomSocketCache[tableId][anotherPlayerId].escapeGame()
        # 刷新相关好友列表
        refreshRelativeFriendList([userId, anotherPlayerId])
    # 判断tableId是否存在于GameRoomCache中
    if tableId in GameRoomCache.keys():
        # 删除缓存中的对局信息
        del GameRoomCache[tableId]
    if not escapeFlag:
        if tableId in GameRoomSocketCache.keys():
            for key in GameRoomSocketCache[tableId].keys():
                GameRoomSocketCache[tableId][key].refreshGameRoom()
    rowNumber = cursor.execute(
        "SELECT a.table_id,a.left_player_id,c.username AS left_username,b.avatar AS left_avatar,a.right_player_id,e.username AS right_username,d.avatar AS right_avatar,a.game_state FROM game_table_info AS a LEFT join user_info AS b ON a.left_player_id=b.user_id LEFT JOIN  user AS c ON b.user_id=c.user_id LEFT JOIN user_info AS d ON a.right_player_id=d.user_id LEFT JOIN user AS e ON e.user_id=d.user_id WHERE a.table_id=%s",
        tableId)
    refreshData = []
    for i in range(0, rowNumber):
        row = cursor.fetchone()
        temp = {"tableId": row["table_id"], "leftPlayerId": row["left_player_id"],
                "leftUsername": row["left_username"],
                "leftAvatar": row["left_avatar"], "rightPlayerId": row["right_player_id"],
                "rightUsername": row["right_username"], "rightAvatar": row["right_avatar"],
                "gameState": row["game_state"]}
        refreshData.append(temp)
    for key in HomeSocketCache:
        HomeSocketCache[key].refreshGameTableList(refreshData)
    cursor.execute("UPDATE user SET `table_id`=NULL WHERE user_id=%s", userId)
예제 #4
0
    def post(self, *args, **kwargs):
        userId = self.get_secure_cookie("userId")
        if userId is None:
            returnJson = {"status": "00"}
            self.write(json.dumps(returnJson, ensure_ascii=False))
        else:
            userId = userId.decode("utf-8")
            cursor.execute(
                "UPDATE user SET login_state=0,state=0 WHERE user_id=%s",
                userId)
            # 查看是否关闭了GameRoom页面如果没有关闭则发送websocket关闭
            cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
            row = cursor.fetchone()
            tableId = row["table_id"]
            if tableId in GameRoomSocketCache.keys():
                if userId in GameRoomSocketCache[tableId].keys():
                    GameRoomSocketCache[tableId][userId].closeWindow()
                    del GameRoomSocketCache[tableId][userId]
                exitGameRoom(userId, tableId)
            else:
                if tableId is not None:
                    exitGameRoom(userId, tableId)
            # if tableId in GameRoomSocketCache.keys():
            #     if userId in GameRoomSocketCache[tableId].keys():
            #         GameRoomSocketCache[tableId][userId].closeWindow()
            #         exitGameRoom(userId, tableId)
            #         del GameRoomSocketCache[tableId][userId]

            # 刷新相关好友列表
            refreshRelativeFriendList([userId])
            self.clear_all_cookies()
            logging.info("cookie清除成功!")
            returnJson = {"status": "00"}
            self.write(json.dumps(returnJson, ensure_ascii=False))
예제 #5
0
 def post(self, *args, **kwargs):
     # 注册handler,注册成功返回00,如有重复用户名返回01
     email = self.get_argument("sign_in_email")
     username = self.get_argument("sign_in_username")
     code = self.get_argument("code")
     code2 = hashlib.md5(
         ("s" + code + "a" + username + "ult").encode("utf-8")).hexdigest()
     con.ping()
     row_number = cursor.execute("select * from user WHERE username=%s",
                                 username)
     if row_number == 0:
         cursor.execute(
             "INSERT INTO user(username,code,email) VALUES(%s,%s,%s)",
             (username, code2, email))
         self.write("{'status':'00'}")
         logging.info("用户:" + username + "注册成功!")
         cursor.execute("SELECT user_id FROM user WHERE username=%s",
                        username)
         row = cursor.fetchone()
         userId = row["user_id"]
         cursor.execute(
             "INSERT INTO user_info(user_id,register_date) values (%s,%s)",
             (userId, time.strftime('%Y-%m-%d', time.localtime())))
         logging.info("用户id:" + str(userId) + "插入user_info表成功")
         cursor.execute(
             "INSERT INTO group_info(user_id, group_name) VALUES (%s,%s)",
             (userId, "我的好友"))
         viewName = "user_" + str(userId) + "_message"
         cursor.execute(
             "CREATE VIEW " + viewName +
             " AS SELECT a.from_id AS 'related_user',a.content,a.update_time,1 AS 'type' FROM message_info AS a WHERE a.to_id = %s UNION SELECT b.to_id AS 'related_user', b.content, b.update_time, 0 AS 'type' FROM message_info AS b WHERE b.from_id = %s",
             (userId, userId))
     else:
         self.write("{'status':'01'}")
         logging.info("用户:" + username + "注册失败!")
예제 #6
0
 def post(self, *args, **kwargs):
     userId = self.get_secure_cookie("userId").decode("utf-8")
     cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
     row = cursor.fetchone()
     tableId = row["table_id"]
     roomCache = GameRoomCache[tableId]
     anotherPlayerId = None
     for key in roomCache["playerState"].keys():
         if key != userId:
             anotherPlayerId = key
             break
     roomCache["playerState"][userId]["myTurn"] = False
     roomCache["playerState"][anotherPlayerId]["myTurn"] = False
     roomCache["totalGameTime"] += 1
     cursor.execute(
         "UPDATE user_info SET game_time=game_time+1,draw_time=draw_time+1 WHERE user_id=%s OR user_id=%s",
         (userId, anotherPlayerId))
     cursor.execute(
         "UPDATE game_table_info SET left_ready_state=0,right_ready_state=0,game_state=0 WHERE table_id=%s",
         tableId)
     # 将玩家状态改为在线,并通知其在线好友刷新friendList
     cursor.execute("UPDATE user SET state=1 WHERE user_id=%s OR user_id=%s", (userId, anotherPlayerId))
     # 刷新相关好友列表
     refreshRelativeFriendList([userId, anotherPlayerId])
     # 提醒前端和棋
     for key in GameRoomSocketCache[tableId]:
         GameRoomSocketCache[tableId][key].gameDraw()
    def on_message(self, message):
        data = json.loads(message)
        if data["type"] == "00":
            self.maintainConnection()
        if data["type"] == "01":
            userId = self.get_secure_cookie("userId").decode("utf-8")
            cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
            row = cursor.fetchone()
            tableId = row["table_id"]
            for key in GameRoomSocketCache[tableId].keys():
                if key != userId:
                    returnData = {}
                    returnData["type"] = "08"
                    returnData["data"] = data["message"]
                    GameRoomSocketCache[tableId][key].write_message(json.dumps(returnData, ensure_ascii=False))

        if data["type"] == "02":
            userId = self.get_secure_cookie("userId").decode("utf-8")
            cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
            row = cursor.fetchone()
            tableId = row["table_id"]
            roomCache = GameRoomCache[tableId]
            anotherPlayerId = None
            for key in roomCache["playerState"].keys():
                if key != userId:
                    anotherPlayerId = key
                    break
            if data["result"] == "agree":
                roomCache["playerState"][userId]["myTurn"] = False
                roomCache["playerState"][anotherPlayerId]["myTurn"] = False
                roomCache["totalGameTime"] += 1
                cursor.execute(
                    "UPDATE user_info SET game_time=game_time+1,draw_time=draw_time+1 WHERE user_id=%s OR user_id=%s",
                    (userId, anotherPlayerId))
                cursor.execute(
                    "UPDATE game_table_info SET left_ready_state=0,right_ready_state=0,game_state=0 WHERE table_id=%s",
                    tableId)
                cursor.execute("UPDATE user SET state=1 WHERE user_id=%s OR user_id=%s", (userId, anotherPlayerId))
                # 将玩家状态改为在线,并通知其在线好友刷新friendList
                cursor.execute("UPDATE user SET state=1 WHERE user_id=%s OR user_id=%s", (userId, anotherPlayerId))
                # 刷新相关好友列表
                refreshRelativeFriendList([userId, anotherPlayerId])
                # 提醒前端和棋
                for key in GameRoomSocketCache[tableId]:
                    GameRoomSocketCache[tableId][key].gameDraw()
            else:
                GameRoomSocketCache[tableId][anotherPlayerId].denyDraw()
예제 #8
0
 def get(self, *args, **kwargs):
     userId = self.get_secure_cookie("userId").decode("utf-8")
     cursor.execute(
         "SELECT username,email,avatar,sex,birthday,qq FROM user left join user_info ON user.user_id=user_info.user_id WHERE user.user_id=%s",
         userId)
     returnResult = {"userInfo": cursor.fetchone()}
     logging.info("获取用户:" + userId + "信息成功!")
     self.write(json.dumps(returnResult, ensure_ascii=False))
예제 #9
0
def refreshRelativeFriendList(userList):
    for i in range(0, len(userList)):
        rowNumber = cursor.execute(
            "SELECT * FROM friend_info AS a LEFT JOIN `user` AS b ON a.friend_id=b.user_id WHERE a.user_id=%s and b.login_state=1",
            userList[i])
        for j in range(0, rowNumber):
            row = cursor.fetchone()
            HomeSocketCache[str(row["friend_id"])].refreshFriendList()
예제 #10
0
    def post(self, *args, **kwargs):
        userId = self.get_secure_cookie("userId").decode("utf-8")
        cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
        row = cursor.fetchone()
        tableId = row["table_id"]
        self.set_header('Content-type', 'application/json')
        roomCache = GameRoomCache[tableId]
        anotherPlayerId = None
        for key in roomCache["playerState"].keys():
            if key != userId:
                anotherPlayerId = key
                break

        roomCache["playerState"][userId]["myTurn"] = False
        roomCache["playerState"][anotherPlayerId]["winTime"] += 1
        roomCache["playerState"][anotherPlayerId]["myTurn"] = False
        roomCache["totalGameTime"] += 1
        cursor.execute(
            "UPDATE user_info SET game_time=game_time+1 WHERE user_id=%s OR user_id=%s",
            (userId, anotherPlayerId))
        cursor.execute(
            "UPDATE user_info SET win_time=win_time+1 WHERE user_id=%s",
            anotherPlayerId)
        cursor.execute(
            "UPDATE game_table_info SET left_ready_state=0,right_ready_state=0,game_state=0 WHERE table_id=%s",
            tableId)
        # 将玩家状态改为在线,并通知其在线好友刷新friendList
        cursor.execute(
            "UPDATE user SET state=1 WHERE user_id=%s OR user_id=%s",
            (userId, anotherPlayerId))
        playerList = [userId, anotherPlayerId]
        for i in range(0, 2):
            rowNumber = cursor.execute(
                "SELECT * FROM friend_info AS a LEFT JOIN `user` AS b ON a.friend_id=b.user_id WHERE a.user_id=%s and b.login_state=1",
                playerList[i])
            for j in range(0, rowNumber):
                row = cursor.fetchone()
                HomeSocketCache[str(row["friend_id"])].refreshFriendList()

        GameRoomSocketCache[tableId][anotherPlayerId].refreshGameView()

        # 提醒前端认输
        for key in GameRoomSocketCache[tableId]:
            GameRoomSocketCache[tableId][key].giveUp(userId)
예제 #11
0
 def get(self, *args, **kwargs):
     userId = self.get_secure_cookie("userId").decode("utf-8")
     cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
     row = cursor.fetchone()
     tableId = row["table_id"]
     logging.info("获取桌号" + tableId + "初始化信息")
     self.set_header('Content-type', 'application/json')
     returnData = getGameRoomData(tableId)
     returnData["whoGet"] = userId
     self.write(json.dumps(returnData, ensure_ascii=False))
 def open(self, *args, **kwargs):
     userId = self.get_secure_cookie("userId").decode("utf-8")
     cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
     row = cursor.fetchone()
     tableId = row["table_id"]
     if tableId in GameRoomSocketCache.keys():
         GameRoomSocketCache[tableId].update({userId: self})
     else:
         GameRoomSocketCache[tableId] = {userId: self}
     logging.info(userId + "打开" + tableId + "房间连接")
 def on_close(self):
     userId = self.get_secure_cookie("userId").decode("utf-8")
     cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
     row = cursor.fetchone()
     tableId = row["table_id"]
     if tableId in GameRoomSocketCache.keys():
         if userId in GameRoomSocketCache[tableId].keys():
             del GameRoomSocketCache[tableId][userId]
             logging.info(userId + "关闭" + tableId + "房间连接")
             if len(GameRoomSocketCache[tableId]) == 0:
                 del GameRoomSocketCache[tableId]
예제 #14
0
 def post(self, *args, **kwargs):
     userId = self.get_secure_cookie("userId").decode("utf-8")
     cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
     row = cursor.fetchone()
     tableId = row["table_id"]
     anotherPlayerId = None
     for key in GameRoomCache[tableId]["playerState"].keys():
         if key != userId:
             anotherPlayerId = key
             break
     logging.info(userId + "请求和棋")
     GameRoomSocketCache[tableId][anotherPlayerId].begDraw()
예제 #15
0
 def post(self, *args, **kwargs):
     userId = self.get_secure_cookie("userId")
     if userId is None:
         return
     userId = userId.decode("utf-8")
     cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
     row = cursor.fetchone()
     tableId = row["table_id"]
     if tableId is None:
         return
     exitGameRoom(userId, str(tableId))
     logging.info(userId + "退出游戏房间!")
예제 #16
0
 def post(self, *args, **kwargs):
     userId=self.get_secure_cookie("userId").decode("utf-8")
     groupName = self.get_argument("groupName")
     # 获取输入的组名的组id
     cursor.execute("SELECT group_id FROM group_info WHERE user_id=%s AND  group_name=%s", (userId, groupName))
     row = cursor.fetchone()
     groupId = row["group_id"]
     # 删除组信息
     cursor.execute("DELETE FROM group_info WHERE group_id=%s", groupId)
     # 获取默认分组的组ID
     cursor.execute("SELECT group_id FROM group_info WHERE user_id=%s AND  group_name='我的好友'", userId)
     row = cursor.fetchone()
     defaultGroupId = row["group_id"]
     # 将删除组下的好友移动至默认分组
     cursor.execute("UPDATE friend_info SET group_id=%s WHERE user_id=%s AND group_id=%s",
                    (defaultGroupId, userId, groupId))
     logging.info("用户ID:" + userId + "删除分组:" + groupName + "成功!")
     self.set_header('Access-Control-Allow-Origin', '*')
     self.set_header('Access-Control-Allow-Headers', 'x-requested-with')
     self.set_header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE')
     returnResult = {"status": "00"}
     self.write(json.dumps(returnResult, ensure_ascii=False))
예제 #17
0
 def post(self, *args, **kwargs):
     username = self.get_argument("username")
     randomString = ""
     for i in range(0, 4):
         randomString = randomString + str(random.randint(1, 9))
     cursor.execute("select * from user WHERE username=%s", username)
     row = cursor.fetchone()
     address = row["email"]
     # 将验证码以 用户名:验证码 的形式写入CodeCache
     CodeCache[username] = randomString
     SendEmail.Send(randomString, address, username)
     logging.info("用户:" + username + "发送验证码!")
     self.write({"status": "00"})
예제 #18
0
 def get(self, *args, **kwargs):
     userId = self.get_secure_cookie("userId").decode("utf-8")
     friendId = self.get_argument("friendId")
     viewName = "user_" + str(userId) + "_message"
     rowNumber = cursor.execute(
         "SELECT a.content,a.type FROM (SELECT * FROM " + viewName +
         " WHERE related_user=%s ORDER BY update_time DESC LIMIT 20) a ORDER BY a.update_time",
         friendId)
     returnData = []
     for i in range(0, rowNumber):
         row = cursor.fetchone()
         returnData.append(row)
     self.write(json.dumps(returnData, ensure_ascii=False))
     logging.info("用户:" + userId + "获取消息成功!")
예제 #19
0
 def post(self, *args, **kwargs):
     userId = self.get_secure_cookie("userId").decode("utf-8")
     friendId = self.get_argument("friendId")
     cursor.execute(
         "SELECT * FROM friend_info WHERE user_id=%s AND friend_id=%s",
         (userId, friendId))
     row = cursor.fetchone()
     oprId = row["opr_id"]
     cursor.execute("DELETE FROM friend_info WHERE opr_id=%s", oprId)
     #删除user的messageFriendList
     messageFriendList = getMessageFriendList(userId)
     # 将待删除friendId与messageFriendList中进行比对
     # 若messageFriendlist长度为1,则直接删除
     # 若报送的friendId已为激活状态则将上一位设置为激活状态,并删除
     # 若不为激活状态则直接删除
     if len(messageFriendList) != 1:
         for key in range(0, len(messageFriendList)):
             if str(messageFriendList[key]["friendId"]) == friendId:
                 if messageFriendList[key]["activeState"] == 1:
                     cursor.execute(
                         "UPDATE message_friend_list SET active_state=1 WHERE user_id=%s AND friend_id=%s",
                         (userId, messageFriendList[key - 1]["friendId"]))
                     break
     cursor.execute(
         "DELETE FROM message_friend_list WHERE user_id=%s AND friend_id=%s",
         (userId, friendId))
     # 删除friend的messageFriendList
     messageFriendList = getMessageFriendList(friendId)
     # 将待删除friendId与messageFriendList中进行比对
     # 若messageFriendlist长度为1,则直接删除
     # 若报送的friendId已为激活状态则将上一位设置为激活状态,并删除
     # 若不为激活状态则直接删除
     if len(messageFriendList) != 1:
         for key in range(0, len(messageFriendList)):
             if str(messageFriendList[key]["friendId"]) == userId:
                 if messageFriendList[key]["activeState"] == 1:
                     cursor.execute(
                         "UPDATE message_friend_list SET active_state=1 WHERE user_id=%s AND friend_id=%s",
                         (friendId, messageFriendList[key - 1]["friendId"]))
                     break
     cursor.execute(
         "DELETE FROM message_friend_list WHERE user_id=%s AND friend_id=%s",
         (friendId, userId))
     HomeSocketCache[userId].refreshMessageList(subType="04")
     if friendId in HomeSocketCache.keys():
         HomeSocketCache[friendId].refreshFriendList()
         HomeSocketCache[friendId].refreshMessageList(subType="04")
     logging.info("用户:" + userId + "删除好友!")
     self.write("{'status':'00'}")
예제 #20
0
    def post(self, *args, **kwargs):
        self.set_header('Content-type', 'application/json')
        userId = self.get_secure_cookie("userId").decode("utf-8")
        cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
        row = cursor.fetchone()
        tableId = row["table_id"]
        roomCache = GameRoomCache[tableId]
        anotherPlayerId = None
        for key in roomCache["playerState"].keys():
            if key != userId:
                anotherPlayerId = key
                break
        # 对GameRoomCache进行更改
        roomCache["playerState"][userId]["myTurn"] = False
        roomCache["playerState"][userId]["overTimeCount"] += 1
        roomCache["playerState"][anotherPlayerId]["myTurn"] = True
        roomCache["playerState"][anotherPlayerId]["chessTime"] = time.time(
        ) * 1000
        returnData = {"status": "00"}
        self.write(json.dumps(returnData, ensure_ascii=False))
        # 通知前端调用交换棋权
        GameRoomSocketCache[tableId][anotherPlayerId].refreshGameView()
        if roomCache["playerState"][userId]["overTimeCount"] == 2:
            #当超时次数超过两次直接判输
            roomCache["playerState"][userId]["myTurn"] = False
            roomCache["playerState"][anotherPlayerId]["winTime"] += 1
            roomCache["playerState"][anotherPlayerId]["myTurn"] = False
            roomCache["totalGameTime"] += 1
            cursor.execute(
                "UPDATE user_info SET game_time=game_time+1 WHERE user_id=%s OR user_id=%s",
                (userId, anotherPlayerId))
            cursor.execute(
                "UPDATE user_info SET win_time=win_time+1 WHERE user_id=%s",
                anotherPlayerId)
            cursor.execute(
                "UPDATE game_table_info SET left_ready_state=0,right_ready_state=0,game_state=0 WHERE table_id=%s",
                tableId)
            # 将玩家状态改为在线,并通知其在线好友刷新friendList
            cursor.execute(
                "UPDATE user SET state=1 WHERE user_id=%s OR user_id=%s",
                (userId, anotherPlayerId))
            # 刷新相关好友列表
            refreshRelativeFriendList([userId, anotherPlayerId])

            logging.info("玩家" + anotherPlayerId + "获胜")
            # 提醒前端胜负已分
            for key in GameRoomSocketCache[tableId]:
                GameRoomSocketCache[tableId][key].gameWin(anotherPlayerId)
예제 #21
0
 def post(self, *args, **kwargs):
     userId = self.get_secure_cookie("userId").decode("utf-8")
     friendId = self.get_argument("friendId")
     groupName = self.get_argument("groupName")
     cursor.execute(
         "SELECT  * FROM group_info WHERE user_id=%s AND group_name=%s",
         (userId, groupName))
     row = cursor.fetchone()
     groupId = row["group_id"]
     cursor.execute(
         "UPDATE friend_info SET group_id=%s WHERE user_id=%s AND friend_id=%s",
         (groupId, userId, friendId))
     logging.info("用户ID:" + userId + "移动好友ID:" + friendId + "至分组:" +
                  groupName + "成功!")
     returnResult = {"status": "00"}
     self.write(json.dumps(returnResult, ensure_ascii=False))
예제 #22
0
def getMessageFriendList(userId):
    messageFriendList = []
    rowNumber = cursor.execute(
        "SELECT a.user_id,a.friend_id,b.username,c.avatar,a.message_number,a.active_state FROM message_friend_list AS a LEFT JOIN user AS b ON a.friend_id=b.user_id LEFT JOIN user_info AS c ON b.user_id=c.user_id WHERE a.user_id=%s ORDER BY id",
        userId)
    for i in range(0, rowNumber):
        row = cursor.fetchone()
        temp = {
            "friendId": row["friend_id"],
            "username": row["username"],
            "avatar": row["avatar"],
            "messageNumber": row["message_number"],
            "activeState": row["active_state"]
        }
        messageFriendList.append(temp)
    return messageFriendList
예제 #23
0
 def post(self, *args, **kwargs):
     username = self.get_argument("username")
     code = self.get_argument("code")
     code2 = hashlib.md5(
         ("s" + code + "a" + username + "ult").encode("utf-8")).hexdigest()
     con.ping()
     row_number = cursor.execute(
         "select * from user WHERE username=%s AND code = %s",
         (username, code2))
     row = cursor.fetchone()
     if row_number != 0:
         self.set_secure_cookie("userId",
                                str(row['user_id']),
                                expires_days=None)
         self.write("{'status':'True'}")
         logging.info("用户:" + username + "登录成功!")
     else:
         self.write("{'status':'False'}")
         logging.info("用户:" + username + "登录失败!")
예제 #24
0
 def get(self, *args, **kwargs):
     username = self.get_argument("username")
     cursor.execute(
         "SELECT a.username,b.avatar,b.sex,b.birthday,b.qq,b.register_date,b.last_login_date,b.game_time,b.win_time FROM user AS a LEFT JOIN user_info AS b ON a.user_id=b.user_id WHERE a.username=%s",
         username)
     returnResult = {}
     content = {}
     row = cursor.fetchone()
     content["username"] = row["username"]
     content["avatar"] = row["avatar"]
     content["sex"] = row["sex"]
     content["birthday"] = row["birthday"]
     content["qq"] = row["qq"]
     content["registerDate"] = row["register_date"]
     content["lastLoginDate"] = row["last_login_date"]
     content["gameTime"] = row["game_time"]
     content["winTime"] = row["win_time"]
     returnResult["userProfile"] = content
     logging.info("获取用户:" + username + "信息成功!")
     self.write(json.dumps(returnResult, ensure_ascii=False))
예제 #25
0
 def post(self, *args, **kwargs):
     userId = self.get_secure_cookie("userId").decode("utf-8")
     username = self.get_argument("username")
     rowNumber = cursor.execute("SELECT * FROM user WHERE username=%s",
                                username)
     if rowNumber == 0:
         self.write("{'status':'01'}")
         logging.info("write {'status':'01'}")
     else:
         rowNumber = cursor.execute(
             "SELECT * FROM friend_info AS a LEFT JOIN  user AS b ON a.friend_id=b.user_id WHERE a.user_id=%s AND b.username=%s",
             (userId, username))
         if rowNumber == 0:
             cursor.execute("SELECT * FROM user WHERE username=%s",
                            username)
             row = cursor.fetchone()
             toId = row["user_id"]
             rowNumber = cursor.execute(
                 "SELECT * FROM game_notification WHERE from_id=%s AND to_id=%s",
                 (userId, toId))
             rowNumber2 = cursor.execute(
                 "SELECT * FROM game_notification WHERE from_id=%s AND to_id=%s",
                 (toId, userId))
             if rowNumber != 0 or rowNumber2 != 0:
                 self.write("{'status':'03'}")
                 logging.info("write {'status':'03'}")
                 return
             cursor.execute(
                 "INSERT INTO game_notification(`from_id`, `to_id`) VALUES (%s,%s)",
                 (userId, toId))
             toId = str(toId)
             if toId in HomeSocketCache.keys():
                 HomeSocketCache[toId].refreshNotificationList()
             self.write("{'status':'00'}")
             logging.info("write {'status':'00'}")
         else:
             self.write("{'status':'02'}")
             logging.info("write {'status':'02'}")
예제 #26
0
 def post(self):
     self.set_header('Content-type', 'application/json')
     userId = self.get_secure_cookie("userId").decode("utf-8")
     cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
     row = cursor.fetchone()
     tableId = row["table_id"]
     chessType = self.get_argument("chessType")
     x = self.get_argument("x")
     y = self.get_argument("y")
     logging.info("玩家" + userId + "下棋" + "index" + str([x, y]))
     roomCache = GameRoomCache[tableId]
     anotherPlayerId = None
     for key in roomCache["playerState"].keys():
         if key != userId:
             anotherPlayerId = key
             break
     # 对GameRoomCache进行更改
     roomCache["playerState"][userId]["myTurn"] = False
     roomCache["playerState"][anotherPlayerId]["myTurn"] = True
     roomCache["playerState"][anotherPlayerId]["chessTime"] = time.time()*1000
     roomCache["stepRecord"].append({"playerId": userId,
                                     "chessType": chessType,
                                     "point": [x, y]
                                     })
     # 对pointState进行更改
     pointState = roomCache["pointState"]
     if chessType == "black":
         pointState[int(x)][int(y)] = 1
     else:
         pointState[int(x)][int(y)] = 2
     # 判断输赢
     winFlag = False
     drawFlag = False
     if judgeWin(pointState, {"chessType": chessType, "chessPoint": [int(x), int(y)]}):
         winFlag = True
         roomCache["playerState"][userId]["myTurn"] = False
         roomCache["playerState"][userId]["winTime"] += 1
         roomCache["playerState"][anotherPlayerId]["myTurn"] = False
         roomCache["totalGameTime"] += 1
         cursor.execute("UPDATE user_info SET game_time=game_time+1 WHERE user_id=%s OR user_id=%s",
                        (userId, anotherPlayerId))
         cursor.execute("UPDATE user_info SET win_time=win_time+1 WHERE user_id=%s", userId)
         cursor.execute(
             "UPDATE game_table_info SET left_ready_state=0,right_ready_state=0,game_state=0 WHERE table_id=%s",
             tableId)
         # 将玩家状态改为在线,并通知其在线好友刷新friendList
         cursor.execute("UPDATE user SET state=1 WHERE user_id=%s OR user_id=%s", (userId, anotherPlayerId))
         # 刷新相关好友列表
         refreshRelativeFriendList([userId, anotherPlayerId])
     # 和棋
     if len(roomCache["stepRecord"]) == 196:
         drawFlag = True
         roomCache["playerState"][userId]["myTurn"] = False
         roomCache["playerState"][anotherPlayerId]["myTurn"] = False
         roomCache["totalGameTime"] += 1
         cursor.execute(
             "UPDATE user_info SET game_time=game_time+1,draw_time=draw_time+1 WHERE user_id=%s OR user_id=%s",
             (userId, anotherPlayerId))
         cursor.execute(
             "UPDATE game_table_info SET left_ready_state=0,right_ready_state=0,game_state=0 WHERE table_id=%s",
             tableId)
         cursor.execute("UPDATE user SET state=1 WHERE user_id=%s OR user_id=%s", (userId, anotherPlayerId))
         # 将玩家状态改为在线,并通知其在线好友刷新friendList
         cursor.execute("UPDATE user SET state=1 WHERE user_id=%s OR user_id=%s", (userId, anotherPlayerId))
         # 刷新相关好友列表
         refreshRelativeFriendList([userId, anotherPlayerId])
     returnData = {"status": "00"}
     self.write(json.dumps(returnData, ensure_ascii=False))
     # 通知前端调用交换棋权
     GameRoomSocketCache[tableId][anotherPlayerId].refreshGameView()
     if winFlag:
         logging.info("玩家" + userId + "获胜")
         # 提醒前端胜负已分
         for key in GameRoomSocketCache[tableId]:
             GameRoomSocketCache[tableId][key].gameWin(userId)
     if drawFlag:
         logging.info(tableId + "和局")
         # 提醒前端和棋
         for key in GameRoomSocketCache[tableId]:
             GameRoomSocketCache[tableId][key].gameDraw()
예제 #27
0
    def post(self, *args, **kwargs):
        userId = self.get_secure_cookie("userId").decode("utf-8")
        cursor.execute("SELECT * FROM user WHERE user_id=%s", userId)
        row = cursor.fetchone()
        oldTableId = row["table_id"]
        position = self.get_argument("position")
        tableId = self.get_argument("tableId")

        # 根据数据库中的table_id值判断是否为坐下状态
        if oldTableId:
            sitDownState = True
        else:
            sitDownState = False

        # 根据不同的状态对数据库进行操作
        if sitDownState:
            # 查询数据库若已处于游戏状态中则不能更换位置
            cursor.execute(
                "SELECT * FROM game_table_info WHERE left_player_id=%s OR right_player_id=%s",
                (userId, userId))
            row = cursor.fetchone()
            if row["game_state"] == 1:
                self.write("{'status':'01'}")
                # 已经处于游戏状态无法换桌
                logging.info("write {'status':'01'}")
                return
            # 将旧卓的信息删除
            if str(row["left_player_id"]) == userId:
                cursor.execute(
                    "UPDATE game_table_info SET left_player_id=NULL,left_ready_state=0 WHERE table_id=%s",
                    oldTableId)
            else:
                cursor.execute(
                    "UPDATE game_table_info SET right_player_id=NULL,right_ready_state=0 WHERE table_id=%s",
                    oldTableId)

        if position == "left":
            cursor.execute(
                "UPDATE game_table_info SET left_player_id=%s WHERE table_id=%s ",
                (userId, tableId))
        else:
            cursor.execute(
                "UPDATE game_table_info SET right_player_id=%s WHERE table_id=%s ",
                (userId, tableId))

        # 组装刷新数据并通知前端刷新游戏大厅
        if not sitDownState:
            rowNumber = cursor.execute(
                "SELECT a.table_id,a.left_player_id,c.username AS left_username,b.avatar AS left_avatar,a.right_player_id,e.username AS right_username,d.avatar AS right_avatar,a.game_state FROM game_table_info AS a LEFT join user_info AS b ON a.left_player_id=b.user_id LEFT JOIN  user AS c ON b.user_id=c.user_id LEFT JOIN user_info AS d ON a.right_player_id=d.user_id LEFT JOIN user AS e ON e.user_id=d.user_id WHERE a.table_id=%s",
                tableId)
        else:
            rowNumber = cursor.execute(
                "SELECT a.table_id,a.left_player_id,c.username AS left_username,b.avatar AS left_avatar,a.right_player_id,e.username AS right_username,d.avatar AS right_avatar,a.game_state FROM game_table_info AS a LEFT join user_info AS b ON a.left_player_id=b.user_id LEFT JOIN  user AS c ON b.user_id=c.user_id LEFT JOIN user_info AS d ON a.right_player_id=d.user_id LEFT JOIN user AS e ON e.user_id=d.user_id WHERE a.table_id=%s OR a.table_id=%s",
                (tableId, oldTableId))
        refreshData = []
        for i in range(0, rowNumber):
            row = cursor.fetchone()
            temp = {
                "tableId": row["table_id"],
                "leftPlayerId": row["left_player_id"],
                "leftUsername": row["left_username"],
                "leftAvatar": row["left_avatar"],
                "rightPlayerId": row["right_player_id"],
                "rightUsername": row["right_username"],
                "rightAvatar": row["right_avatar"],
                "gameState": row["game_state"]
            }
            refreshData.append(temp)
        for key in HomeSocketCache:
            HomeSocketCache[key].refreshGameTableList(refreshData)
        # 设值数据库中的table_id及返回值
        cursor.execute("UPDATE user SET table_id=%s WHERE user_id=%s",
                       (tableId, userId))
        if not sitDownState:
            self.write("{'status':'00'}")
            logging.info("write {'status':'00'}")
        else:
            self.write("{'status':'02'}")
            logging.info("write {'status':'02'}")
            GameRoomSocketCache[oldTableId][userId].refreshGameRoom()
            del GameRoomSocketCache[oldTableId][userId]
            logging.info(userId + "关闭" + tableId + "房间连接")
            if len(GameRoomSocketCache[tableId]) == 0:
                del GameRoomSocketCache[tableId]

        # 刷新相关房间的用户页面
        if tableId in GameRoomSocketCache.keys():
            for key in GameRoomSocketCache[tableId].keys():
                GameRoomSocketCache[tableId][key].refreshGameRoom()
        if oldTableId in GameRoomSocketCache.keys():
            for key in GameRoomSocketCache[oldTableId].keys():
                GameRoomSocketCache[oldTableId][key].refreshGameRoom()
예제 #28
0
def getGameRoomData(tableId):
    gameRoomData = {}
    playerInfo = []
    sqlString = "SELECT\n" + \
                "	a.left_ready_state,\n" + \
                "	b.user_id AS left_user_id,\n" + \
                "	b.username AS left_username,\n" + \
                "	c.avatar AS left_avatar,\n" + \
                "	c.sex AS left_sex,\n" + \
                "	c.birthday AS left_birthday,\n" + \
                "	c.qq AS left_qq,\n" + \
                "	c.game_time AS left_game_time,\n" + \
                "	c.win_time AS left_win_time,\n" + \
                "	c.draw_time AS left_draw_time,\n" + \
                "	a.right_ready_state,\n" + \
                "	d.user_id AS right_user_id,\n" + \
                "	d.username AS right_username,\n" + \
                "	e.avatar AS right_avatar,\n" + \
                "	e.sex AS right_sex,\n" + \
                "	e.birthday AS right_birthday,\n" + \
                "	e.qq AS right_qq,\n" + \
                "	e.game_time AS right_game_time,\n" + \
                "	e.win_time AS right_win_time,\n" + \
                "	e.draw_time AS right_draw_time\n" + \
                "FROM\n" + \
                "	game_table_info AS a\n" + \
                "LEFT JOIN `user` AS b ON a.left_player_id = b.user_id\n" + \
                "LEFT JOIN user_info AS c ON b.user_id = c.user_id\n" + \
                "LEFT JOIN `user` AS d ON a.right_player_id = d.user_id\n" + \
                "LEFT JOIN user_info AS e ON d.user_id = e.user_id\n" + \
                "WHERE\n" + \
                "	a.table_id = %s"
    rowNumber = cursor.execute(sqlString, tableId)
    for i in range(0, rowNumber):
        row = cursor.fetchone()
        if row["left_user_id"]:
            temp = {
                "position": "left",
                "readyState": row["left_ready_state"],
                "userId": row["left_user_id"],
                "username": row["left_username"],
                "avatar": row["left_avatar"],
                "sex": row["left_sex"],
                "birthday": row["left_birthday"],
                "qq": row["left_qq"],
                "gameTime": row["left_game_time"],
                "winTime": row["left_win_time"],
                "drawTime": row["left_draw_time"]
            }
            playerInfo.append(temp)
        if row["right_user_id"]:
            temp = {
                "position": "right",
                "readyState": row["right_ready_state"],
                "userId": row["right_user_id"],
                "username": row["right_username"],
                "avatar": row["right_avatar"],
                "sex": row["right_sex"],
                "birthday": row["right_birthday"],
                "qq": row["right_qq"],
                "gameTime": row["right_game_time"],
                "winTime": row["right_win_time"],
                "drawTime": row["right_draw_time"]
            }
            playerInfo.append(temp)
    gameRoomData["playerInfo"] = playerInfo
    # 组装gameState数据
    cursor.execute("SELECT * FROM game_table_info WHERE table_id=%s", tableId)
    row = cursor.fetchone()
    gameRoomData["gameState"] = row["game_state"]
    if tableId in GameRoomCache.keys():
        gameRoomData["gameInfo"] = GameRoomCache[tableId]
    return gameRoomData
예제 #29
0
def getInitData(userId):
    returnData = {}
    userData = {}
    notificationData = []
    gameTableData = []
    # 获取userData
    cursor.execute(
        "SELECT * FROM user AS a LEFT JOIN user_info AS b ON a.user_id=b.user_id WHERE a.user_id=%s",
        userId)
    row = cursor.fetchone()
    userData["username"] = row["username"]
    userData["avatar"] = row["avatar"]
    userData["ifFirstLogin"] = row["if_first_login"]
    userData["messageWidgetState"] = row["message_widget_state"]

    # 从group_info表中获取此用户id下所有的用户分组存入groupNameList
    row_number = cursor.execute(
        "select * from group_info where user_id=%s ORDER BY group_id", userId)
    friendInfo = {}
    groupNameList = []
    for i in range(0, row_number):
        row = cursor.fetchone()
        groupNameList.append(row["group_name"])

    # 根据groupNameList和用户ID查询好友的信息,并组成friendInfo字典
    for i in range(0, len(groupNameList)):
        groupListData = []
        group_name = groupNameList[i]
        row_number = cursor.execute(
            "SELECT a.user_id,a.friend_id,d.avatar,c.username AS 'friend_username',a.note,c.login_state,c.state,a.group_id,b.group_name FROM friend_info AS a LEFT JOIN group_info AS b ON a.group_id = b.group_id LEFT JOIN user AS c ON a.friend_id = c.user_id LEFT JOIN user_info AS d on a.friend_id=d.user_id WHERE a.user_id = %s AND b.group_name= %s ORDER BY c.login_state DESC,c.username ASC",
            (userId, group_name))
        for j in range(0, row_number):
            row = cursor.fetchone()
            temp = {
                "friendId": row["friend_id"],
                "avatar": row["avatar"],
                "friendUsername": row["friend_username"],
                "note": row["note"],
                "loginState": row["login_state"],
                "state": row["state"]
            }
            groupListData.append(temp)
        friendInfo[group_name] = groupListData
    # friendInfo字典组装完毕
    # 根据user_id获取notification
    row_number = cursor.execute(
        "SELECT a.from_id,b.username AS from_username,a.to_id,c.username AS to_username FROM game_notification AS a LEFT JOIN user AS b ON a.from_id = b.user_id LEFT JOIN user AS c ON a.to_id=c.user_id WHERE to_id=%s ORDER BY id",
        userId)
    for i in range(0, row_number):
        row = cursor.fetchone()
        temp = {
            "fromId": row["from_id"],
            "fromUsername": row["from_username"],
            "toId": row["to_id"],
            "toUsername": row["to_username"]
        }
        notificationData.append(temp)

    # 组装gameTableData
    row_number = cursor.execute(
        "SELECT a.table_id,a.left_player_id,c.username AS left_username,b.avatar AS left_avatar,a.right_player_id,e.username AS right_username,d.avatar AS right_avatar,a.game_state FROM game_table_info AS a LEFT join user_info AS b ON a.left_player_id=b.user_id LEFT JOIN  user AS c ON b.user_id=c.user_id LEFT JOIN user_info AS d ON a.right_player_id=d.user_id LEFT JOIN user AS e ON e.user_id=d.user_id ORDER BY a.table_id "
    )
    for i in range(0, row_number):
        row = cursor.fetchone()
        temp = {
            "tableId": row["table_id"],
            "leftPlayerId": row["left_player_id"],
            "leftUsername": row["left_username"],
            "leftAvatar": row["left_avatar"],
            "rightPlayerId": row["right_player_id"],
            "rightUsername": row["right_username"],
            "rightAvatar": row["right_avatar"],
            "gameState": row["game_state"]
        }
        gameTableData.append(temp)

    # 组装messageData
    messageData = {}
    messageFriendList = Methods.GetMessageFriendList.getMessageFriendList(
        userId)
    messageData["messageFriendList"] = messageFriendList

    returnData["userData"] = userData
    returnData["friendData"] = friendInfo
    returnData["gameTableData"] = gameTableData
    returnData["notificationData"] = notificationData
    returnData["messageData"] = messageData
    return returnData
예제 #30
0
    def treatMessageData(self, data):
        userId = self.get_secure_cookie("userId").decode("utf-8")
        friendId = data["friendId"]
        message = data["message"]
        logging.info("接受到消息:" + message)
        # 接收方MessageFriendList
        toMessageFriendList = getMessageFriendList(friendId)
        # 将数据插入数据库
        cursor.execute(
            "INSERT INTO message_info (from_id, to_id, content, update_time)values(%s,%s,%s,%s) ",
            (userId, friendId, message,
             time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))
        # 获取接收方消息窗口打开状态
        cursor.execute("SELECT * FROM user WHERE user_id=%s", friendId)
        row = cursor.fetchone()
        messageWidgetState = row["message_widget_state"]
        # 若messageFriendList不存在好友ID则插入
        # 若存在将message_friend_list中的message_number数量+1
        if len(toMessageFriendList) == 0:
            cursor.execute(
                "INSERT INTO message_friend_list (USER_ID, FRIEND_ID, ACTIVE_STATE, MESSAGE_NUMBER)VALUES(%s,%s,%s,%s) ",
                (friendId, userId, 1, 1))
        else:
            flag = False
            for item in toMessageFriendList:
                if str(item["friendId"]) == userId:
                    flag = True
                    if item["activeState"] != 1:
                        cursor.execute(
                            "UPDATE message_friend_list SET message_number=message_number+1 WHERE user_id=%s AND friend_id=%s",
                            (friendId, userId))
                    else:
                        if messageWidgetState == 0:
                            cursor.execute(
                                "UPDATE message_friend_list SET message_number=message_number+1 WHERE user_id=%s AND friend_id=%s",
                                (friendId, userId))
                    break
            if not flag:
                cursor.execute(
                    "INSERT INTO message_friend_list (USER_ID, FRIEND_ID, ACTIVE_STATE, MESSAGE_NUMBER)VALUES(%s,%s,%s,%s) ",
                    (friendId, userId, 0, 1))

        # 刷新toMessageFriendList
        toMessageFriendList = getMessageFriendList(friendId)
        # 通知相应好友添加message
        # 判断接受方是否在线
        if str(friendId) in HomeSocketCache.keys():
            if messageWidgetState == 0:
                HomeSocketCache[str(friendId)].refreshMessageList(subType="04")
            else:
                for item in toMessageFriendList:
                    if str(item["friendId"]
                           ) == userId and item["activeState"] == 1:
                        HomeSocketCache[str(friendId)].refreshMessageList(
                            subType="02", data=message)
                        break
                    if str(item["friendId"]
                           ) == userId and item["activeState"] != 1:
                        HomeSocketCache[str(friendId)].refreshMessageList(
                            subType="01")
                        HomeSocketCache[str(friendId)].refreshMessageList(
                            subType="03")
                        break