Пример #1
0
    public void ReqLogin(PackMsg pack)
    {
        ReqLogin      data    = pack.msg.reqLogin;
        ServerSession session = pack.session;
        //判断当前账号是否上线
        GameMsg msg = new GameMsg
        {
            cmd = (int)CMD.RspLogin,
        };

        //已上线,返回错误信息
        if (cacheSvc.IsAcctOnLine(data.acct))
        {
            msg.err = (int)ErrorCode.AcctIsOnLine;
        }
        else
        {
            //未上线:
            //账号是否存在
            PlayerData _playerData = cacheSvc.GetPlayerDate(data.acct, data.pwd);
            if (_playerData == null)
            {
                //账号存在 但密码错误
                msg.err = (int)ErrorCode.WrongPwd;
            }
            //存在 返回账号数据
            else
            {
                //计算离线增加体力
                int  stamina          = _playerData.stamina;
                long now              = timeSvc.GetNowTime();
                long milliSecondsSpan = now - _playerData.time;
                int  growStamina      = (int)(milliSecondsSpan / (1000 * 60 * PECommon.StaminaAddSpace)) * PECommon.StaminaAddCount;
                //PECommon.Log(milliSecondsSpan / 60000+ " " + milliSecondsSpan.ToString() + " " + growStamina.ToString());
                if (growStamina > 0)
                {
                    int maxStamina = PECommon.GetStaminaLimitByLv(_playerData.lv);
                    if (_playerData.stamina < maxStamina)
                    {
                        _playerData.stamina += growStamina;
                        if (_playerData.stamina > maxStamina)
                        {
                            _playerData.stamina = maxStamina;
                        }
                    }
                }

                if (stamina != _playerData.stamina)
                {
                    cacheSvc.UpdatePlayerData(_playerData.id, _playerData);
                }

                msg.rspLogin = new RspLogin
                {
                    //将账号数据存到回应包里
                    playerData = _playerData
                };
                //将账号数据存储进缓存层
                cacheSvc.StoreIdOnline(data.acct, session, _playerData);
            }
        }

        //回应客户端
        pack.session.SendMsg(msg);
    }