Example #1
0
    /// <summary>
    /// 读取字节流(简版)
    /// </summary>
    protected override void toReadBytesSimple(BytesReadStream stream)
    {
        base.toReadBytesSimple(stream);

        this.clientVersion = (ClientVersionData)stream.createData(ClientVersionData.dataID);
        this.clientVersion.readBytesSimple(stream);
    }
Example #2
0
    /// <summary>
    /// 读取字节流(简版)
    /// </summary>
    protected override void toReadBytesSimple(BytesReadStream stream)
    {
        this.loginInfo = (ClientLoginServerInfoData)stream.readDataSimpleNotNull();

        if (stream.readBoolean())
        {
            this.version = (ClientVersionData)stream.createData(ClientVersionData.dataID);
            this.version.readBytesSimple(stream);
        }
        else
        {
            this.version = null;
        }

        if (stream.readBoolean())
        {
            int areasLen = stream.readLen();
            if (this.areas != null)
            {
                this.areas.clear();
                this.areas.ensureCapacity(areasLen);
            }
            else
            {
                this.areas = new IntObjectMap <AreaClientData>(areasLen);
            }

            IntObjectMap <AreaClientData> areasT = this.areas;
            for (int areasI = areasLen - 1; areasI >= 0; --areasI)
            {
                AreaClientData areasV;
                if (stream.readBoolean())
                {
                    areasV = (AreaClientData)stream.readDataSimpleNotNull();
                }
                else
                {
                    areasV = null;
                }

                areasT.put(areasV.areaID, areasV);
            }
        }
        else
        {
            this.areas = null;
        }

        this.lastAreaID = stream.readInt();

        if (stream.readBoolean())
        {
            this.gameInfo = (ClientLoginServerInfoData)stream.readDataSimpleNotNull();
        }
        else
        {
            this.gameInfo = null;
        }
    }
Example #3
0
 /// <summary>
 /// 回池
 /// </summary>
 protected override void toRelease(DataPool pool)
 {
     this.loginInfo  = null;
     this.version    = null;
     this.areas      = null;
     this.lastAreaID = 0;
     this.gameInfo   = null;
 }
Example #4
0
    /// <summary>
    /// 读取字节流(完整版)
    /// </summary>
    protected override void toReadBytesFull(BytesReadStream stream)
    {
        base.toReadBytesFull(stream);

        stream.startReadObj();

        this.clientVersion = (ClientVersionData)stream.createData(ClientVersionData.dataID);
        this.clientVersion.readBytesFull(stream);

        stream.endReadObj();
    }
Example #5
0
    private void hotfixNext(ClientVersionData vData)
    {
        //读取cdn版本
        ResourceInfoControl.loadCDNVersion(vData.currentResourceVersion, sData =>
        {
            //计算更新量
            ResourceInfoControl.countNewVersionSize(sData, _versionRe);

            //只有配置
            if (_versionRe.isOnlyConfig)
            {
                ResourceInfoControl.mergeVersion(sData);
                doVersionNext(false, () =>
                {
                    if (GameC.main != null)
                    {
                        //热更配置
                        GameC.main.reloadConfig();
                        GameC.main.hotfixOver();
                    }
                });
            }
            //返回登录界面开始热更
            else
            {
                VersionSaveData localVersionData = ResourceInfoControl.getVersion();

                _downloadSize = StringUtils.toMBString(_versionRe.size);

                //需要强制更新
                if (localVersionData.resourceVersion < vData.leastResourceVersion)
                {
                    //更新资源选择,这里是在游戏内,必须弹窗确认
                    showAlert(Alert_GetNewResourceMust, () =>
                    {
                        doHotFix(sData);
                    }, exitGame);
                }
                else
                {
                    //更新资源选择,这里是在游戏内,必须弹窗确认
                    showAlert(Alert_GetNewResource, () => { doHotFix(sData); }, () =>
                    {
                        if (GameC.main != null)
                        {
                            GameC.main.hotfixOver();
                        }
                    });
                }
            }
        });
    }
Example #6
0
    /** 客户端版本更新(true:为不需要更新) */
    public bool clientHotfix(ClientVersionData vData)
    {
        if (ShineSetting.debugJumpResourceVersion || ShineSetting.localLoadWithOutBundle)
        {
            return(true);
        }

        //已处理过
        if (_versionData != null && vData != null && _versionData.currentResourceVersion >= vData.currentResourceVersion)
        {
            return(true);
        }

        VersionSaveData localVersionData = ResourceInfoControl.getVersion();

        if (vData == null)
        {
            Ctrl.log("离线游戏 或 服务器无此版本2");

            vData                   = new ClientVersionData();
            vData.version           = localVersionData.version;
            vData.currentAppVersion = localVersionData.appVersion;
            // _versionData.leastAppVersion=localVersionData.currentAppVersion;
            vData.currentResourceVersion = localVersionData.resourceVersion;
        }

        _versionData = vData;

        if (!ShineSetting.isRelease)
        {
            return(true);
        }
        else
        {
            //最低app版本不足
            if (localVersionData.appVersion < _versionData.leastAppVersion)
            {
                showAlert(Alert_GetNewAppMust, toGetNewApp, exitGame);
                return(false);
            }

            //有新的app
            if (localVersionData.appVersion < _versionData.currentAppVersion)
            {
                showAlert(Alert_GetNewApp, toGetNewApp, () => { hotfixNext(vData); });
                return(false);
            }

            hotfixNext(vData);
            return(false);
        }
    }
Example #7
0
        /// <summary>
        /// Get info on all clients that are in the region
        /// </summary>
        /// <returns></returns>
        public List <ClientVersionData> GetClientVersions()
        {
            List <ClientVersionData> clients = new List <ClientVersionData>();

            List <string> retStr = GD.Query("", "", "stats_session_data",
                                            "count(distinct region_id) as regcnt");

            if (retStr.Count == 0)
            {
                return(clients);
            }

            int totalregions = totalregions = Convert.ToInt32(retStr[0]);
            int totalclients = 0;

            if (totalregions > 1)
            {
                retStr = GD.QueryFullData(" group by region_id, client_version order by region_id, count(*) desc;",
                                          "stats_session_data",
                                          "region_id, client_version, count(*) as cnt, avg(avg_sim_fps) as simfps");

                for (int i = 0; i < retStr.Count; i += 4)
                {
                    ClientVersionData udata = new ClientVersionData();
                    udata.region_id = UUID.Parse(retStr[i]);
                    udata.version   = retStr[i + 1];
                    udata.count     = int.Parse(retStr[i + 2]);
                    udata.fps       = Convert.ToSingle(retStr[i + 3]);
                    clients.Add(udata);
                }
            }
            else
            {
                retStr = GD.QueryFullData(" group by region_id, client_version order by region_id, count(*) desc;",
                                          "stats_session_data",
                                          "region_id, client_version, count(*) as cnt, avg(avg_sim_fps) as simfps");

                for (int i = 0; i < retStr.Count; i += 4)
                {
                    ClientVersionData udata = new ClientVersionData();
                    udata.region_id = UUID.Parse(retStr[i]);
                    udata.version   = retStr[i + 1];
                    udata.count     = int.Parse(retStr[i + 2]);
                    udata.fps       = Convert.ToSingle(retStr[i + 3]);
                    clients.Add(udata);
                    totalclients += udata.count;
                }
            }

            return(clients);
        }
    /// <summary>
    /// 读取字节流(简版)
    /// </summary>
    protected override void toReadBytesSimple(BytesReadStream stream)
    {
        if (stream.readBoolean())
        {
            this.version = (ClientVersionData)stream.createData(ClientVersionData.dataID);
            this.version.readBytesSimple(stream);
        }
        else
        {
            this.version = null;
        }

        this.redirectURL = stream.readUTF();
    }
Example #9
0
    /// <summary>
    /// 复制(潜拷贝)
    /// </summary>
    protected override void toShadowCopy(BaseData data)
    {
        if (!(data is ClientLoginResultData))
        {
            return;
        }

        ClientLoginResultData mData = (ClientLoginResultData)data;

        this.loginInfo  = mData.loginInfo;
        this.version    = mData.version;
        this.areas      = mData.areas;
        this.lastAreaID = mData.lastAreaID;
        this.gameInfo   = mData.gameInfo;
    }
Example #10
0
    /// <summary>
    /// 复制(潜拷贝)
    /// </summary>
    protected override void toShadowCopy(BaseData data)
    {
        if (!(data is ClientVersionData))
        {
            return;
        }

        ClientVersionData mData = (ClientVersionData)data;

        this.type                   = mData.type;
        this.leastAppVersion        = mData.leastAppVersion;
        this.currentAppVersion      = mData.currentAppVersion;
        this.leastResourceVersion   = mData.leastResourceVersion;
        this.currentResourceVersion = mData.currentResourceVersion;
        this.version                = mData.version;
    }
    /// <summary>
    /// 读取字节流(完整版)
    /// </summary>
    protected override void toReadBytesFull(BytesReadStream stream)
    {
        stream.startReadObj();

        if (stream.readBoolean())
        {
            this.version = (ClientVersionData)stream.createData(ClientVersionData.dataID);
            this.version.readBytesFull(stream);
        }
        else
        {
            this.version = null;
        }

        this.redirectURL = stream.readUTF();

        stream.endReadObj();
    }
Example #12
0
    /** 获取版本号成功(有可能返回空) */
    public void onGetVersionSuccess(ClientVersionData vData, string redirectURL)
    {
        _getVersionSended = false;
        _versionData      = vData;

        //有值
        if (!string.IsNullOrEmpty(redirectURL))
        {
            //重定向url
            LocalSetting.loginHttpURL = redirectURL;
            //再次发送
            sendGetVersion();
        }
        else
        {
            SystemControl.netChangeFunc -= onNetChanged;
            _stepTool.completeStep(GetVersion);
        }
    }
Example #13
0
    protected virtual void stepLoadResource()
    {
        if (ShineSetting.debugJumpResourceVersion || ShineSetting.localLoadWithOutBundle)
        {
            versionUpdateOver();
            return;
        }

        //本地版本数据
        VersionSaveData localVersionData = ResourceInfoControl.getVersion();

        //离线游戏 或 服务器无此版本
        if (_versionData == null)
        {
            Ctrl.log("离线游戏 或 服务器无此版本");

            _versionData                   = new ClientVersionData();
            _versionData.version           = localVersionData.version;
            _versionData.currentAppVersion = localVersionData.appVersion;
            // _versionData.leastAppVersion=localVersionData.currentAppVersion;
            _versionData.currentResourceVersion = localVersionData.resourceVersion;
            // _versionData.leastResourceVersion=localVersionData.leastResourceVersion;

            doVersionNext(true);
            return;
        }

        //最低app版本不足
        if (localVersionData.appVersion < _versionData.leastAppVersion && ShineSetting.isRelease)
        {
            showAlert(Alert_GetNewAppMust, toGetNewApp, exitGame);
            return;
        }

        //有新的app
        if (localVersionData.appVersion < _versionData.currentAppVersion && ShineSetting.isRelease)
        {
            showAlert(Alert_GetNewApp, toGetNewApp, () => { continueCurrentApp(localVersionData); });
            return;
        }

        continueCurrentApp(localVersionData);
    }
Example #14
0
    /// <summary>
    /// 是否数据一致
    /// </summary>
    protected override bool toDataEquals(BaseData data)
    {
        ClientVersionData mData = (ClientVersionData)data;

        if (this.type != mData.type)
        {
            return(false);
        }

        if (this.leastAppVersion != mData.leastAppVersion)
        {
            return(false);
        }

        if (this.currentAppVersion != mData.currentAppVersion)
        {
            return(false);
        }

        if (this.leastResourceVersion != mData.leastResourceVersion)
        {
            return(false);
        }

        if (this.currentResourceVersion != mData.currentResourceVersion)
        {
            return(false);
        }

        if (this.version != mData.version)
        {
            return(false);
        }

        return(true);
    }
Example #15
0
    /// <summary>
    /// 读取字节流(完整版)
    /// </summary>
    protected override void toReadBytesFull(BytesReadStream stream)
    {
        stream.startReadObj();

        BaseData loginInfoT = stream.readDataFullNotNull();

        if (loginInfoT != null)
        {
            if (loginInfoT is ClientLoginServerInfoData)
            {
                this.loginInfo = (ClientLoginServerInfoData)loginInfoT;
            }
            else
            {
                this.loginInfo = new ClientLoginServerInfoData();
                if (!(loginInfoT.GetType().IsAssignableFrom(typeof(ClientLoginServerInfoData))))
                {
                    stream.throwTypeReadError(typeof(ClientLoginServerInfoData), loginInfoT.GetType());
                }
                this.loginInfo.shadowCopy(loginInfoT);
            }
        }
        else
        {
            this.loginInfo = null;
        }

        if (stream.readBoolean())
        {
            this.version = (ClientVersionData)stream.createData(ClientVersionData.dataID);
            this.version.readBytesFull(stream);
        }
        else
        {
            this.version = null;
        }

        if (stream.readBoolean())
        {
            int areasLen = stream.readLen();
            if (this.areas != null)
            {
                this.areas.clear();
                this.areas.ensureCapacity(areasLen);
            }
            else
            {
                this.areas = new IntObjectMap <AreaClientData>(areasLen);
            }

            IntObjectMap <AreaClientData> areasT = this.areas;
            for (int areasI = areasLen - 1; areasI >= 0; --areasI)
            {
                AreaClientData areasV;
                if (stream.readBoolean())
                {
                    BaseData areasVT = stream.readDataFullNotNull();
                    if (areasVT != null)
                    {
                        if (areasVT is AreaClientData)
                        {
                            areasV = (AreaClientData)areasVT;
                        }
                        else
                        {
                            areasV = new AreaClientData();
                            if (!(areasVT.GetType().IsAssignableFrom(typeof(AreaClientData))))
                            {
                                stream.throwTypeReadError(typeof(AreaClientData), areasVT.GetType());
                            }
                            areasV.shadowCopy(areasVT);
                        }
                    }
                    else
                    {
                        areasV = null;
                    }
                }
                else
                {
                    areasV = null;
                }

                areasT.put(areasV.areaID, areasV);
            }
        }
        else
        {
            this.areas = null;
        }

        this.lastAreaID = stream.readInt();

        if (stream.readBoolean())
        {
            BaseData gameInfoT = stream.readDataFullNotNull();
            if (gameInfoT != null)
            {
                if (gameInfoT is ClientLoginServerInfoData)
                {
                    this.gameInfo = (ClientLoginServerInfoData)gameInfoT;
                }
                else
                {
                    this.gameInfo = new ClientLoginServerInfoData();
                    if (!(gameInfoT.GetType().IsAssignableFrom(typeof(ClientLoginServerInfoData))))
                    {
                        stream.throwTypeReadError(typeof(ClientLoginServerInfoData), gameInfoT.GetType());
                    }
                    this.gameInfo.shadowCopy(gameInfoT);
                }
            }
            else
            {
                this.gameInfo = null;
            }
        }
        else
        {
            this.gameInfo = null;
        }

        stream.endReadObj();
    }
Example #16
0
    /// <summary>
    /// 复制(深拷贝)
    /// </summary>
    protected override void toCopy(BaseData data)
    {
        if (!(data is ClientLoginResultData))
        {
            return;
        }

        ClientLoginResultData mData = (ClientLoginResultData)data;

        if (mData.loginInfo != null)
        {
            this.loginInfo = (ClientLoginServerInfoData)mData.loginInfo.clone();
        }
        else
        {
            this.loginInfo = null;
            nullObjError("loginInfo");
        }

        if (mData.version != null)
        {
            this.version = (ClientVersionData)BytesControl.createData(ClientVersionData.dataID);
            this.version.copy(mData.version);
        }
        else
        {
            this.version = null;
        }

        if (mData.areas != null)
        {
            if (this.areas != null)
            {
                this.areas.clear();
                this.areas.ensureCapacity(mData.areas.size());
            }
            else
            {
                this.areas = new IntObjectMap <AreaClientData>(mData.areas.size());
            }

            IntObjectMap <AreaClientData> areasT = this.areas;
            if (!mData.areas.isEmpty())
            {
                AreaClientData[] areasVValues = mData.areas.getValues();
                for (int areasVI = areasVValues.Length - 1; areasVI >= 0; --areasVI)
                {
                    AreaClientData areasV = areasVValues[areasVI];
                    if (areasV != null)
                    {
                        AreaClientData areasU;
                        if (areasV != null)
                        {
                            areasU = (AreaClientData)areasV.clone();
                        }
                        else
                        {
                            areasU = null;
                        }

                        areasT.put(areasU.areaID, areasU);
                    }
                }
            }
        }
        else
        {
            this.areas = null;
        }

        this.lastAreaID = mData.lastAreaID;

        if (mData.gameInfo != null)
        {
            this.gameInfo = (ClientLoginServerInfoData)mData.gameInfo.clone();
        }
        else
        {
            this.gameInfo = null;
        }
    }
Example #17
0
    /// <summary>
    /// 回池
    /// </summary>
    protected override void toRelease(DataPool pool)
    {
        base.toRelease(pool);

        this.clientVersion = null;
    }