powerfun-unity/Assets/Scripts/UI/Prefab/Update/DownloadWorkoutsController.cs
2021-07-27 18:36:49 +08:00

169 lines
6.1 KiB
C#

using Assets.Scripts;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class DownloadWorkoutsController : PFUIPanel
{
// Start is called before the first frame update
Transform Btn, Loading,Exit,BtnStart;
ScrollRect scroll;
string path;
[SerializeField] Transform log;
void Start()
{
Btn = transform.Find("Panel/BtnConfirm");
BtnStart = transform.Find("Panel/BtnStart");
Loading = transform.Find("Panel/LoadingContainer");
scroll = transform.Find("Panel/Scroll View").GetComponent<ScrollRect>();
Exit = transform.Find("Panel/Exit");
UIManager.AddEvent(Exit.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, (b) =>
{
Utils.showToast(gameObject, "Please update to the latest version.");
});
SetType(1);
//Button.GetComponent<Button>().enabled = false;
//Button.GetComponent<Button>().interactable = false;
path = Application.persistentDataPath + "/PowerFun.exe";
UIManager.AddEvent(Btn.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, (b) =>
{
Application.Quit();
Utils.ExecFile(path);
});
UIManager.AddEvent(BtnStart.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, (_base) =>
{
if (App.UpdateObject != null)
{
BtnStart.GetComponent<Button>().enabled = false;
BtnStart.GetComponent<Button>().interactable = false;
StartCoroutine(DownLoadExe(App.UpdateObject.Url, path, (a, b, isComplete) =>
{
transform.Find("Panel/LoadingContainer/Text").GetComponent<Text>().text = $"Downloaded {a.ToString("#0")}M / {b.ToString("#0")}M";// string.Format(, a, b);
transform.Find("Panel/LoadingContainer/Loading").GetComponent<Image>().fillAmount = (float)(a / b);
if (isComplete)
{
SetType(3);
PlayerPrefs.SetString("exeVersion", App.UpdateObject.Code);
new FileInfo(path + ".pfdownload").MoveTo(path);
}
}));
}
});
//transform
if (App.UpdateObject != null)
{
for (var i = 0; i < App.UpdateObject.UpdateLog.Count; i++)
{
var newLog = Instantiate<Transform>(log);
newLog.GetComponent<DownloadLog>().Initial(App.UpdateObject.UpdateLog[i]);
if (i == App.UpdateObject.UpdateLog.Count - 1)
{
newLog.GetComponent<DownloadLog>().HideLine();
}
newLog.SetParent(scroll.content);
newLog.localScale = Vector3.one;
}
}
}
/*下载文件*/
IEnumerator DownLoadExe(string url, string desFileName, Action<double, double, bool> OnDownloadProgressEvent)
{
string version = null;
if (App.UpdateObject != null)
{
version = App.UpdateObject.Code;
}
if (File.Exists(desFileName))
{
//if(PlayerPrefs.GetString("exeVersion")==)
if (version == null)
{
yield break;
}
else
{
if (version == PlayerPrefs.GetString("exeVersion"))
{
Application.Quit();
Utils.ExecFile(desFileName);
yield break;
}
else
{
File.Delete(desFileName);
}
}
//File.Delete(desFileName);
}
if (File.Exists(desFileName + ".pfdownload"))
{
File.Delete(desFileName + ".pfdownload");
}
SetType(2);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Timeout = 5000;
WebResponse response = request.GetResponse();
//UnityWebRequest request = UnityWebRequest.Get(url);
//yield return request.SendWebRequest();
int packLength = 1024 * 20;
int nReadSize = 0;
byte[] nbytes = new byte[packLength];
double dDownloadedLength = 0, dTotalLength = 0;
long countLength = response.ContentLength;
using (FileStream fs = new FileStream(desFileName + ".pfdownload", FileMode.Create))
using (Stream netStream = response.GetResponseStream())
{
nReadSize = netStream.Read(nbytes, 0, packLength);
while (nReadSize > 0)
{
fs.Write(nbytes, 0, nReadSize);
nReadSize = netStream.Read(nbytes, 0, packLength);
dDownloadedLength = fs.Length * 1.0 / (1024 * 1024);
dTotalLength = countLength * 1.0 / (1024 * 1024);
OnDownloadProgressEvent.Invoke(dDownloadedLength, dTotalLength, false);
//string ss = string.Format("已下载 {0:F}M / {1:F}M", dDownloadedLength, dTotalLength);
//Debug.Log(ss);
yield return null;
}
}
OnDownloadProgressEvent.Invoke(dDownloadedLength, dTotalLength, true);
}
void SetType(int a)
{
switch (a)
{
case 1:
// true 显示 button false 显示loading
Btn.gameObject.SetActive(false);
Loading.gameObject.SetActive(false);
BtnStart.gameObject.SetActive(true);
break;
case 2:
Btn.gameObject.SetActive(false);
Loading.gameObject.SetActive(true);
BtnStart.gameObject.SetActive(false);
break;
case 3:
Btn.gameObject.SetActive(true);
Loading.gameObject.SetActive(false);
BtnStart.gameObject.SetActive(false);
break;
default:break;
}
}
// Update is called once per frame
void Update()
{
}
}