关于启动器代码设计中遇到的问题(个人笔记)

开始是把这个判断检测是否更新客户端放到Start中,且Start用的是协程等待,但是等待时间不确定,始终是一个问题

  /// <summary>
    /// 判断是否更新客户端
    /// </summary>
    void IsUpdateVRoom()
    {
        string Versionnumber = PlayerPrefs.GetString("Version");
        Debug.Log("注册表里的版本号:" + Versionnumber);
        //如果版本号不一样替换版本号,如果版本号一样,打开应用关闭启动器
        if (!Versionnumber.Equals(HttpVersion.version_number))
        {//在版本号不一样的时候进行更新
            Debug.Log("客户端版本号不一样进行更新下载!!!");
            UpdateCanvas.SetActive(true);
            StartCanvas.SetActive(false);
        }//在版本号一样的时候判断客户端是否存在
        else if (File.Exists(exePath))
        {//客户端存在直接打开
            System.Diagnostics.Process.Start(exePath);
            Application.Quit();
        }
        else
        {//客户端不存在直接进行更新
            Debug.Log("客户端不存在进行更新下载!!!");
            UpdateCanvas.SetActive(true);
            StartCanvas.SetActive(false);
        }
    }
    IEnumerator Start()
    {
        //初始设置版本号
        if (IsSetVersion.Equals(0))
        {
            Debug.Log("初次更新");
            SetVersion();
        }
        StartCoroutine(hv.GetVersion());
        yield return new WaitForSeconds(3.5f);//这个等待服务端下载下来的版本号的时间不确定(始终是一个问题)
        Debug.Log("服务器上客户端的版本号:" + HttpVersion.version_number + "   URL:" + HttpVersion.Downurl);
        IsUpdateVRoom();//就是这里
    }

同样获取token值的等待时间也不确定 也是一个隐藏的问题

    /// <summary>
    /// 获得GetToken
    /// </summary>
    private void GetToken()
    {
        URLuserlogin = @"获取token值的链接地址";
        ht.GET(URLuserlogin, OnSuccesstoken);//GET是www的get请求方法,OnSuccesstoken是请求成功后的注册函数。
    }

    /// <summary>
    /// 获得版本号
    /// </summary>
    public IEnumerator GetVersion()
    {
        GetToken();
        yield return new WaitForSeconds(2f);//等待获取Token值后执行下边的逻辑  获取token的时间不确定 这也是个隐患
        Debug.Log("token的值:" + this.token);
        URL = @"获取版本号的信息的链接";
        ht.GET(URL, OnSuccessVersion);同上
    }

最终的解决方法(消除隐患的方法) 把更新与否的判断放到版本号获取成功之后的注册方法中 ,同时把 获取版本号的方法放到token值获取成功之后的回调函数中。(其中更新与否的方法和版本号获取以及token获取不在一个类中)
更改过后的代码如下(部分代码):

  IEnumerator Start()
    {
        //初始设置版本号
        if (IsSetVersion.Equals(0))
        {
            Debug.Log("初次更新");
            SetVersion();
        }
        StartCoroutine(hv.GetVersion());
        yield return new WaitForSeconds(0);
    }

获取版本号成功之后的回调方法

/// <summary>
    /// 获得版本号之后的成功回调方法
    /// </summary>
    /// <param name="www"></param>
    private void SuccessMethedversion(WWW www)
    {

        if (www == null) return;
        //反序列化
        CodeJsonVersion versiondata = JsonUtility.FromJson<CodeJsonVersion>(www.text);
        Debug.Log(www.text);
        Debug.Log(versiondata.code + "  " + versiondata.message);
        //Debug.Log("客户端版本号:" + versiondata.data[0].version_number + "   下载链接:" + versiondata.data[0].url);
        version_number = versiondata.data[0].version_number;
        Downurl = versiondata.data[0].url;
        Debug.Log("下载链接:" + Downurl);
        Debug.Log("服务器上客户端的版本号:" + version_number + "   URL:" + Downurl);
        Openexe.IsUpdateVRoom();//调用判断是否需要更新升级 这个就是
    }

获取token之后的回调方法

 /// <summary>
    /// 获得token之后的成功回调方法
    /// </summary>
    /// <param name="www"></param>
    private void SuccessMethedtoken(WWW www)
    {
        if (www == null) return;
        //反序列化
        CodeLogin tokenDatas = JsonUtility.FromJson<CodeLogin>(www.text);
        //Debug.Log(tokenDatas.code+"  "+tokenDatas.message);
        //Debug.Log(tokenDatas.data.token);
        token = tokenDatas.data.token;
        Debug.Log("token的值:" + this.token);
        URL = @"获取版本号的链接";
        ht.GET(URL, OnSuccessVersion);//获取版本号的方法
    }

OK这就搞定了,其实还是WWW等待返回事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值