wangguan
2020-11-06 65c75db79905e4d97a8abeba49eb789192b3b0bd
Assets/Scripts/GameAnalytics_SDK/UI/LoginUI.cs
@@ -15,15 +15,36 @@
    bool isLogining;
    private JsonData loginData;
    private Button repairBtn;//修复
    private Button noticeBtn;//公告
    private Button startBtn;//开始游戏
    private Slider progressSlider;//进度条
    private Text versionTxt;//版本号
    private Text resVersion;//资源版本号
    // Start is called before the first frame update
    void Start()
    {
        TDAA_SDKManager.Ins.SDKInit(ChannelID.Gm.ToString());
        TDAA_SDKManager.Ins.Statistics(1);//成功加载登陆界面的人数
        isLogining = false;
        transform.Find("Panel/Button").GetComponent<Button>().onClick.AddListener(OnClickLoginBtn);
        transform.Find("Panel/Button (1)").GetComponent<Button>().onClick.AddListener(OnClickResetBtn);
        repairBtn = transform.Find("Panel/RepairBtn").GetComponent<Button>();
        noticeBtn = transform.Find("Panel/NoticeBtn").GetComponent<Button>();
        startBtn = transform.Find("Panel/StartBtn").GetComponent<Button>();
        versionTxt = transform.Find("Panel/Version").GetComponent<Text>();
        resVersion = transform.Find("Panel/ResVersion").GetComponent<Text>();
        progressSlider = transform.Find("Panel/Progress").GetComponent<Slider>();
        progressSlider.value = 0;
        progressSlider.gameObject.SetActive(false);
        startBtn.onClick.AddListener(OnClickLoginBtn);
        startBtn.gameObject.SetActive(true);
        //transform.Find("Panel/Button (1)").GetComponent<Button>().onClick.AddListener(OnClickResetBtn);
        if (Application.platform == RuntimePlatform.Android)
        {
@@ -36,20 +57,28 @@
        }
        if (!GameConfig.isFirstStart)//后续直接加载
        {
            OnClickLoginBtn();
        }
        else
        {
            //第一次启动,初始化并且埋点
            TDAA_SDKManager.Ins.SDKInit(ChannelID.Gm.ToString());
            TDAA_SDKManager.Ins.Statistics(1);//成功加载登陆界面的人数
        }
    }
    private void OnEnable()
    {
        SocketEvent.Ins.Add<IMessage>((int)Opcode.LoginS2C, LoginS2C);
    // private void OnEnable()
    // {
    //     SocketEvent.Ins.Add<IMessage>((int)Opcode.LoginS2C, LoginS2C);
    // }
    }
    // private void OnDestroy()
    // {
    //     SocketEvent.Ins.Remove<IMessage>((int)Opcode.LoginS2C, LoginS2C);
    private void OnDestroy()
    {
        SocketEvent.Ins.Remove<IMessage>((int)Opcode.LoginS2C, LoginS2C);
    }
    // }
    #region 获得安卓手机上的IMEI号
    public string imei0 = "";
@@ -70,7 +99,8 @@
    #endregion
    private void OnClickResetBtn(){
    private void OnClickResetBtn()
    {
        Debug.LogError("清空了所有数据");
        PlayerPrefs.DeleteAll();
        TDAA_SDKManager.Ins.Reset();
@@ -79,162 +109,22 @@
    private void OnClickLoginBtn()
    {
        TDAA_SDKManager.Ins.Statistics(2);//埋点
        LoginRequest();
    }
    /// <summary>
    /// 登录请求处理
    /// </summary>
    /// <param name="req"></param>
    private void LoginRequest()
    {
        if (!isLogining)
        {
            Debug.Log("登录");
            if (Application.platform == RuntimePlatform.WindowsEditor)
            {
                Debug.Log("编辑器直接登录");
            progressSlider.gameObject.SetActive(true);
            startBtn.gameObject.SetActive(false);
                //TDAA_SDKManager.Ins.Login();
                TDAA_SDKManager.Ins.Statistics(3);//埋点
            AudioSourceManager.Ins.Play(AudioEnum.UI);
            TDAA_SDKManager.Ins.Statistics(2);//埋点
                //StartCoroutine(loginMy());
                StartCoroutine(LoadScene());
                return;
            }
            isLogining = true;
            string url = GameConfig.IsDebug ? GameConfig.TestLoginUrl : GameConfig.LoginUrl;
            JsonData data = new JsonData();
            data["account"] = imei0;
            data["password"] = "123456";
            data["channelid"] = (int)ChannelID.Gm;
            byte[] postBytes = System.Text.Encoding.Default.GetBytes(data.ToJson());
            StartCoroutine(Post(url, postBytes));
        }
    }
    IEnumerator Post(string url, byte[] postBytes)
    {
        UnityWebRequest request = UnityWebRequest.Post(url, "POST");
        request.uploadHandler = new UploadHandlerRaw(postBytes);
        request.downloadHandler = new DownloadHandlerBuffer();
        request.SetRequestHeader("Content-Type", "application/json");
        yield return request.SendWebRequest();
        if (request.isDone)
        {
            string text = request.downloadHandler.text;
            loginData = JsonMapper.ToObject(text);
            if (loginData.Keys.Contains("errorcode"))
            {
                JsonData errorData = loginData["errorcode"];
                isLogining = false;
                CommonDebugHelper.DebugSocket(int.Parse(errorData.ToString()));
                yield break;
            }
            if (!string.IsNullOrEmpty(text))
            {
                EventCenter.Ins.Add<bool>((int)KTGMGemClient.EventType.MasterSocketConnectResult, MasterSocketConnectSuccess);
                MasterSocket.Ins.MasterIp = loginData["masterip"].ToString();
                MasterSocket.Ins.MasterPort = int.Parse(loginData["masterport"].ToString());
                MasterSocket.Ins.StartConnect();
                // System.DateTime dt = GameUtils.GetTime(loginData["timestamp"].ToString());
                // GameConfig.dateTime = dt;
                // GameConfig.timeSpan = dt - System.DateTime.Now;
            }
            else
            {
                isLogining = false;
                //UIManager.Instance.ShowWarningWind("没有登录数据返回,text:" + text);
                //CommonDebugHelper.DebugError("--------------------- 没有登录数据返回 ---------------------text:" + text);
            }
            GameConfig.isFirstStart = false;
            StartCoroutine(loginMy());
        }
        else
        {
            isLogining = false;
            //UIManager.Instance.ShowWarningWind(request.error);
            //CommonDebugHelper.DebugError("登录失败 request.error" + request.error);
        }
    }
    private void MasterSocketConnectSuccess(bool res)
    {
        if (res)
        {
            Login_C2S login = new Login_C2S();
            login.Username = loginData["username"].ToString();
            login.Channel = (int)ChannelID.Gm;
            login.SessionKey = loginData["sessionKey"].ToString();
            MasterSocket.Ins.SendMsg(Opcode.LoginC2S, login);
        }
        else
        {
            CommonDebugHelper.DebugError("Socket 链接失败了");
        }
    }
    private void LoginS2C(IMessage msg)
    {
        Login_S2C login = (Login_S2C)msg;
        if (login.Errorcode == 0)
        {
            Debug.Log("--------------------- 登录成功 ---------------------");
            //UserDataMsg userData = login.Userdata;
            //TDAA_SDKManager.Ins.Login();
            TDAA_SDKManager.Ins.Statistics(3);//埋点
            //StartCoroutine(loginMy());
            StartCoroutine(LoadScene());
        }
        else
        {
            CommonDebugHelper.DebugSocket(login.Errorcode);
            isLogining = false;
        }
    }
    IEnumerator LoadScene()
    {
        async = SceneManager.LoadSceneAsync(GameConfig.NextSceneName);
        async.allowSceneActivation = true;
        /*while (!async.isDone)
        {
            if (async.progress < 0.9f)
                progressValue = async.progress;
            else
                progressValue = 1.0f;
            slider.value = progressValue;
            progress.text = (int)(slider.value * 100) + " %";
            if (async.progress >= 0.89)
            {
                Debug.Log("进展时间分别是:" + async.progress + "," + totalTime);
                if( totalTime >= 3.0f )
                    async.allowSceneActivation = true;
                progress.text = "按任意键继续";
                if (Input.anyKeyDown)
                {
                    async.allowSceneActivation = true;
                }
            }
            //yield return null;
        }*/
        yield return null;
    }
    IEnumerator loginMy()
    {
@@ -244,10 +134,11 @@
        op.allowSceneActivation = false;
        while (op.progress < 0.9f) //此处如果是 <= 0.9f 则会出现死循环所以必须小0.9
        {
            toProgress = (int)op.progress * 100;
            toProgress = (int)(op.progress * 100);
            while (displayProgress < toProgress)
            {
                ++displayProgress;
                progressSlider.value = displayProgress * 0.01f;
                SetLoadingPercentage(displayProgress);
                yield return new WaitForEndOfFrame();//ui渲染完成之后
            }
@@ -256,6 +147,8 @@
        while (displayProgress < toProgress)
        {
            ++displayProgress;
            progressSlider.value = displayProgress * 0.01f;
            SetLoadingPercentage(displayProgress);
            yield return new WaitForEndOfFrame();
        }
@@ -266,8 +159,7 @@
    private void SetLoadingPercentage(int displayProgress)
    {
        CommonDebugHelper.Debug($"当前进度{displayProgress}%");
        //CommonDebugHelper.Debug($"当前进度{displayProgress}%");
    }
}