Exemplo n.º 1
0
    def callback(db):
        session.user = PlayerModel.User()
        session.user.username = msg.username
        reconnectUid = msg.reconnectUid
        retRole = []
        if db.result:
            accountId = long(db.result[0][0])

            def funcToClose(sessOther):
                if sessOther.user.accountid == accountId:
                    ffext.warn('check relogin accountId=%d, name=%s' %
                               (accountId, sessOther.user.username))
                    #if reconnectUid:
                    #    session.sendMsg(MsgDef.ServerCmd.ERROR_MSG, buildErrMsg(MsgDef.ClientCmd.LOGIN, Base.lang('账号在其他地方登录')))
                    #else:
                    #    sessOther.close()
                    # 登出-记录log
                    LogModel.logLoginData(accountId, 0, '',
                                          LogModel.LoginOpType.LOGOUT,
                                          LogModel.LoginReason.KICKOUT)
                    sessOther.sendMsg(MsgDef.ServerCmd.RELOGIN,
                                      MsgDef.ReLoginRet())

                    def cbClose():
                        sessOther.close()

                    ffext.timer(500, cbClose)
                    return True

            ffext.getSessionMgr().foreach_until(funcToClose)
            session.user.accountid = accountId
        else:
            session.user.accountid = idtool.allocUid()

            def cbNewUser(retNew):
                accountId = long(retNew.result[0][0])
                session.user.accountid = accountId
                ffext.dump('cbNewUser', retNew, accountId)
                # 登录(new)-记录log
                LogModel.logLoginData(accountId, 0, '',
                                      LogModel.LoginOpType.LOGIN_ACCOUNT,
                                      LogModel.LoginReason.NEW_LOGIN)
                return

            DbService.getPlayerService().createUser(msg.username, cbNewUser)
        ffext.dump('load player', db.result)
        for row in db.result:
            roleTmp = PlayerModel.Role(row)
            session.user.addRole(roleTmp)
            tmpRoleMsg = MsgDef.RoleInfo(roleTmp.uid, roleTmp.name,
                                         roleTmp.job, roleTmp.gender,
                                         roleTmp.level, roleTmp.exp)
            retRole.append(tmpRoleMsg)
        #print(session.user.accountid, session.user.username)
        ffext.checkWebDebug(session, msg, MsgDef)
        retMsg = MsgDef.UserInfoRet(ffext.getTime(), retRole)
        if reconnectUid:  #重连
            processSelectRoleReq(session, MsgDef.SelectRoleReq(reconnectUid),
                                 msg.x, msg.y)
        else:
            session.sendMsg(MsgDef.ServerCmd.USER_INFO, retMsg)
        # 登录(old)-记录log-(TODO:ip,geo信息获取接口暂缺)
        LogModel.logLoginData(session.user.accountid, 0, '',
                              LogModel.LoginOpType.LOGIN_ACCOUNT,
                              LogModel.LoginReason.OLD_LOGIN)