Пример #1
0
        /// <summary>
        /// 登录:成功会更新login_status表
        /// </summary>
        /// <param name="account_idx">账号id</param>
        /// <param name="callback"></param>
        public static void QueryLoginStatus(long account_idx, Action <eLoginResult> callback)
        {
            string sql = "call SP_LOGIN_ACCOUNT(" + account_idx + "," + 1 + ")";

            DBManager.Instance.GetDB(eDBType.Member, 0).Query(sql, (reader) =>
            {
                eLoginResult login_ret = eLoginResult.E_FAILED_UNKNOWNERROR;
                if (reader.HasRows && reader.Read())
                {
                    uint login_status = reader.GetUInt32(0);
                    uint error        = reader.GetUInt32(1);
                    if (error == 0)
                    {
                        if (login_status == 0)
                        {
                            login_ret = eLoginResult.E_SUCCESS;
                        }
                        else
                        {
                            login_ret = eLoginResult.E_FAILED_ALREADYLOGIN;
                        }
                    }
                    else
                    {
                        login_ret = eLoginResult.E_FAILED_SERVERINTERNALERROR;
                    }
                }
                callback(login_ret);
            }
                                                              );
        }
Пример #2
0
        public async Task <HttpResponseMessage> LoginByUserName(HttpRequestMessage request, UserInfo _userInfo)
        {
            if (!ModelState.IsValid)
            {
                return(request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }
            string result = "";

            _userInfo.Password = ED5Helper.Encrypt(_userInfo.Password);
            ApplicationUser oUser = await SignInManager.UserManager.FindByNameAsync(_userInfo.UserName);

            //ApplicationUser oUser = await SignInManager.UserManager.FindByNameAsync(_userInfo.UserName, _userInfo.Password);
            eLoginResult objResult = new eLoginResult();

            if (string.IsNullOrEmpty(oUser.Id) || oUser.IsDelete)
            {
                objResult.loginSuccess = false;
                objResult.errMessage   = "User does not exist";
            }
            else if (oUser.Password != _userInfo.Password)
            {
                objResult.loginSuccess = false;
                objResult.errMessage   = "Wrong password";
            }
            else
            {
                objResult.loginSuccess = true;
                objResult.userLogin    = oUser;
            }
            return(request.CreateResponse(HttpStatusCode.OK, objResult));
        }
Пример #3
0
 public override void Read(ByteArray by)
 {
     base.Read(by);
     client_uid.Read(by);
     login_result = (eLoginResult)by.ReadByte();
     account_idx  = by.ReadLong();
     spid         = by.ReadUShort();
     ss_uid       = by.ReadUShort();
 }
Пример #4
0
        private void OnClientLogin(PacketBase packet)
        {
            gs2db.ClientLogin msg = packet as gs2db.ClientLogin;

            ClientUID client_uid   = msg.client_uid;
            string    account_name = msg.name;
            string    account_psw  = msg.psw;

            SQLLoginHandle.QueryAccountData(account_name, (data) =>
            {
                ///1.验证账号密码
                eLoginResult result = eLoginResult.E_FAILED_UNKNOWNERROR;
                if (data.account_idx > 0)
                {
                    string md5_msg = StringUtils.GetMD5(account_psw);
                    if (data.password_md5 == md5_msg)
                    {
                        result = eLoginResult.E_SUCCESS;
                    }
                    else
                    {
                        result = eLoginResult.E_FAILED_INVALIDPASSWORD;
                    }
                }
                else
                {
                    result = eLoginResult.E_FAILED_INVALIDACCOUNT;
                }

                //if(result != eLoginResult.E_SUCCESS)
                {
                    db2gs.ClientLogin rep_msg = PacketPools.Get(db2gs.msg.CLIENT_LOGIN) as db2gs.ClientLogin;
                    rep_msg.client_uid        = client_uid;
                    rep_msg.result            = result;
                    rep_msg.account_idx       = data.account_idx;
                    rep_msg.spid = data.spid;
                    this.Send(rep_msg);
                    return;
                }

                /////2.验证登录状态
                //DBHandle.QueryLoginStatus(data.account_idx, (login_res) =>
                //{
                //    db2gs.ClientLogin rep_msg = PacketPools.Get(db2gs.msg.CLIENT_LOGIN) as db2gs.ClientLogin;
                //    rep_msg.client_uid = msg.client_uid;
                //    rep_msg.result = login_res;
                //    rep_msg.account_idx = data.account_idx;
                //    this.Send(rep_msg);
                //}
                //);
            }
                                            );
        }
Пример #5
0
 /// <summary>
 /// 发送验证结果
 /// </summary>
 private void SendLoginResult(ClientUID client_uid, eLoginResult result, long account_idx, ushort spid)
 {
     ws2gs.ClientLogin msg = PacketPools.Get(ws2gs.msg.CLIENT_LOGIN) as ws2gs.ClientLogin;
     msg.client_uid   = client_uid;
     msg.login_result = result;
     if (result == eLoginResult.E_SUCCESS)
     {
         msg.account_idx = account_idx;
         msg.spid        = spid;
         msg.ss_uid      = ServerNetManager.Instance.AllocSSForClient();
     }
     ServerNetManager.Instance.Send(client_uid.srv_uid, msg);
 }
Пример #6
0
        /// <summary>
        /// 请求验证
        /// </summary>
        private void CheckAccountLogin(ClientUID client_uid, string account_name, string account_psw, AccountData account_data)
        {
            ///1.验证账号密码
            eLoginResult result = eLoginResult.E_FAILED_UNKNOWNERROR;

            if (account_data.account_idx > 0)
            {
                string md5_msg = StringUtils.GetMD5(account_psw);
                if (account_data.password_md5 == md5_msg)
                {
                    result = eLoginResult.E_SUCCESS;
                }
                else
                {
                    result = eLoginResult.E_FAILED_INVALIDPASSWORD;
                }
            }
            else
            {
                result = eLoginResult.E_FAILED_INVALIDACCOUNT;
            }

            ///2.验证结果处理
            if (result == eLoginResult.E_SUCCESS)
            {
                //处理踢号:如果存在账号索引,说明已经登录成功过一次
                Unit unit = UnitManager.Instance.GetUnitByAccount(account_data.account_idx);
                if (unit != null)
                {
                    //踢号:发给账号所在的gate
                    ServerNetManager.Instance.KickAccount(unit.account_idx);

                    //延长几秒发送,等待踢号
                    long   account_idx = account_data.account_idx;
                    ushort spid        = account_data.spid;
                    TimerManager.Instance.AddOnce(3000, (timer_id, param) =>
                    {
                        this.SendLoginResult(client_uid, result, account_idx, spid);
                    });
                }
                else
                {
                    this.SendLoginResult(client_uid, result, account_data.account_idx, account_data.spid);
                }
            }
            else
            {
                this.SendLoginResult(client_uid, result, 0, 0);
            }
        }
Пример #7
0
 public HttpResponseMessage doLogin(HttpRequestMessage req, UserInfo _user)
 {
     return(CreateHttpResponse(req, () =>
     {
         HttpResponseMessage res = null;
         if (!ModelState.IsValid)
         {
             res = req.CreateResponse(HttpStatusCode.BadRequest, ModelState);
         }
         else
         {
             _user.Password = ED5Helper.Encrypt(_user.Password);
             eLoginResult insertResult = aUserAccess.doLogin(_user.UserName, _user.Password);
             res = req.CreateResponse(HttpStatusCode.Created, insertResult);
         }
         return res;
     }));
 }
Пример #8
0
        public static eLoginResult doLogin(string user, string password)
        {
            string _sp = "SP_DO_LOGIN_SIMPLE";

            SqlParameter[] _param = new SqlParameter[2];

            _param[0] = new SqlParameter("@PID", user);
            _param[1] = new SqlParameter("@PPASSWORD", password);

            DataTable dtResult = DBHelper.getDataTable_SP(_sp, _param);

            eLoginResult result = new eLoginResult();

            result.errMessage   = dtResult.Rows[0]["MES"].ToString();
            result.loginSuccess = false;
            if (dtResult.Rows[0]["RESULT"].ToString() == "OK")
            {
                result.loginSuccess = true;
            }
            return(result);
        }
Пример #9
0
    //-------------------------------------------------------------------------
    //  暂时放这里,应该放入独立线程(防止阻塞用户登陆).
    public override void update(float elapsed_tm)
    {
        List <string> del = new List <string>();

        foreach (var player in mLoginPlayerQueue)
        {
            ClientLoginInfo info = player.Value;
            if (null == info)
            {
                continue;
            }

            // 先做断线检测.
            if (info.state != eLogingState.loginError)
            {
                // todo,添加session是否处于连接状态的查询接口
                if (info.session == null)// || !info.session. .Connected)
                {
                    info.state  = eLogingState.loginError;
                    info.result = eLoginResult.disconnected;
                }
            }

            if (info.state == eLogingState.connect)
            {
                eLoginResult rtCode = eLoginResult.accountNotExists;
                string       sql    = string.Format("SELECT AccountName, Password , LoginStatus , AccountId FROM Account WHERE AccountName='{0}';", info.account);

                EbLog.Note("Login SQL STR :" + sql);

                MySqlCommand    cmd = new MySqlCommand(sql, connection);
                MySqlDataReader rdr = null;
                try
                {
                    rdr = cmd.ExecuteReader();
                    if (rdr.Read())
                    {
                        if ((string)rdr["Password"] != info.password)
                        {
                            rtCode = eLoginResult.wrongPassword;
                        }
                        else if ((string)rdr["LoginStatus"] != eLoginStatus.offline.ToString())
                        {
                            rtCode = eLoginResult.loginstatus;
                        }
                        else
                        {
                            // 登录成功.
                            rtCode         = eLoginResult.success;
                            info.tokenId   = generateId().ToString();
                            info.accountId = (long)rdr["AccountId"];
                        }
                        info.result = rtCode;
                    }

                    if (rdr != null)
                    {
                        rdr.Close();
                        rdr.Dispose();
                        rdr = null;
                    }

                    if (rtCode == eLoginResult.success)
                    {
                        // update status
                        sql = string.Format("UPDATE Account SET LoginStatus = '{0}' WHERE AccountName='{1}';", eLoginStatus.loging.ToString(), info.account);

                        EbLog.Note("Login SQL STR :" + sql);

                        MySqlCommand updateCmd = new MySqlCommand(sql, connection);
                        cmd.ExecuteNonQuery();
                    }
                }
                catch (Exception ex)
                {
                    EbLog.Error(ex.ToString());
                }
                finally
                {
                    cmd.Dispose();
                    cmd = null;

                    if (rdr != null)
                    {
                        if (rdr.IsClosed == false)
                        {
                            rdr.Close();
                        }
                        rdr.Dispose();
                        rdr = null;
                    }
                }

                if (rtCode == ((byte)eLoginResult.success))
                {
                    info.state = eLogingState.updateLoging2Db;
                }
            }

            if (info.state == eLogingState.updateLoging2Db)
            {
                foreach (var gate in mGateInfo)
                {
                    GateInfo ser = gate.Value;
                    if (!ser.bloginLock)
                    {
                        // 目前只有账号信息和当前longin id放入ZooKeeper.
                        string dt = info.account + "," + mCoApp.NodeIdStr + "," + info.tokenId.ToString() + "," + info.accountId.ToString();
                        info.gateId = ser.id;
                        mCoApp.getZk().awriteData(ser.loginNode, dt, null);
                        EbLog.Note("send to gate node :" + ser.loginNode + ",account:" + dt);
                        mCoApp.getZk().acreate(ser.loginLockNode, "", ZK_CONST.ZOO_EPHEMERAL, null);
                        EbLog.Note("set remote lock :" + ser.loginLockNode + ",account:" + dt);

                        ser.bloginLock = true;
                        info.state     = eLogingState.updateZk2Gate;
                        break;
                    }
                }
            }

            if (info.state == eLogingState.gateBackSuccess ||
                info.state == eLogingState.gateBackFailed ||
                info.state == eLogingState.loginError)
            {
                eLoginStatus curState = (info.state == eLogingState.gateBackSuccess) ? eLoginStatus.online : eLoginStatus.offline;
                string       sql      = string.Format("UPDATE Account SET LoginStatus = '{0}' WHERE AccountName='{1}';", curState, info.account);

                EbLog.Note("Login SQL STR :" + sql);

                MySqlCommand cmd = new MySqlCommand(sql, connection);
                try
                {
                    MySqlCommand updateCmd = new MySqlCommand(sql, connection);
                    cmd.ExecuteNonQuery();
                    info.state = eLogingState.updateOnline2Db;
                }
                catch (Exception ex)
                {
                    //mLog.ErrorFormat("accoundName:{0}, password:{1} ", info.account, info.password);
                    EbLog.Error(ex.ToString());
                }
                finally
                {
                    cmd.Dispose();
                    cmd = null;
                }

                if (info.state == eLogingState.updateOnline2Db)
                {
                    //反馈消息给client.
                    //if (info.peer.Connected)// todo,判定session是否处于连接状态
                    {
                        //Dictionary<byte, object> p = new Dictionary<byte, object>();
                        //p[0] = curState.ToString();
                        //if (curState == eLoginStatus.online)
                        //{
                        //    var list = mGateInfo.Where(gt => gt.Value.id.Equals(info.gateId));
                        //    p[1] = list.First().Value.ipport;
                        //    p[2] = info.tokenId;
                        //}
                        //else
                        //{
                        //    p[1] = info.result.ToString();
                        //}

                        // todo,添加session发送任意数据的方法
                        LoginUCenterSession <DefUCenterSession> se = info.session as LoginUCenterSession <DefUCenterSession>;
                        se.login2ClientLogin(curState.ToString(), info.tokenId, info.param);

                        //OperationResponse operation_response = new OperationResponse(1, p);
                        //SendResult r = info.peer.SendOperationResponse(operation_response, new SendParameters { ChannelId = 0 });
                        ////info.session.getRpcPeer().sendEntityRpcData()
                        //if (r != SendResult.Ok)
                        //{
                        //    // Error
                        //}

                        //if (info.peer.Connected)
                        {
                            // 应该断开与客户端的连接.
                            //info.peer.Disconnect();
                        }
                    }

                    info.state = eLogingState.backToClient;
                }

                if (info.state == eLogingState.backToClient)
                {
                    del.Add(info.account);
                }
            }
        }

        foreach (string account in del)
        {
            ClientLoginInfo delPlayer = null;
            mLoginPlayerQueue.TryRemove(account, out delPlayer);
            //delPlayer.peer.Dispose();// todo 连接断开管理
        }

        string offlineaccount = null;

        if (mofflineQueue.TryDequeue(out offlineaccount))
        {
            eLoginStatus curState = eLoginStatus.offline;
            string       sql      = string.Format("UPDATE Account SET LoginStatus = '{0}' WHERE AccountName='{1}';", curState, offlineaccount);

            EbLog.Error("player offline Login SQL STR :" + sql);
            MySqlCommand cmd = new MySqlCommand(sql, connection);
            try
            {
                MySqlCommand updateCmd = new MySqlCommand(sql, connection);
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                //mLog.ErrorFormat("accoundName:{0} offline failed ", offlineaccount);
                EbLog.Error(ex.ToString());
            }
            finally
            {
                cmd.Dispose();
                cmd = null;
            }
        }
    }
Пример #10
0
 public override void Read(ByteArray by)
 {
     base.Read(by);
     login_result = (eLoginResult)by.ReadByte();
 }