using System;
using System.IO;
using UnityEngine;
namespace BF
{
///
/// todo 对首包和ab_config.bytes简单加密
///
public abstract class GameLaunchProcessorBase
{
protected const string ASSETS_FIRST_AB = "first/first.ab";
protected static string ABConfigFileName { get { return GameLaunchUtils.ABCONFIG_FILE_NAME; } }
protected static string StreamingAbccPath { get; private set; }
protected static string PersistentAbccPath { get; private set; }
protected static string UpdateDirPath { get; private set; } // 热更目录
protected static string TempUpdateDirPath { get; private set; } // 下载文件临时目录
protected GameLaunchProcessorBase nextProcessor;
static GameLaunchProcessorBase()
{
StreamingAbccPath = Path.Combine(Application.streamingAssetsPath, GameLaunchUtils.ABCONFIG_FILE_NAME);
PersistentAbccPath = Path.Combine(Application.persistentDataPath, GameLaunchUtils.ABCONFIG_FILE_NAME);
UpdateDirPath = Path.Combine(Application.persistentDataPath, "update");
TempUpdateDirPath = Path.Combine(Application.persistentDataPath, "temp");
}
public GameLaunchProcessorBase() { }
public GameLaunchProcessorBase(GameLaunchProcessorBase nextProcessor)
{
this.nextProcessor = nextProcessor;
}
public virtual void Process(LaunchRequester lr)
{
BFMain.Instance.GameLaunchMgr.SetCurrentProcessor(this);
}
public virtual void Update() { }
protected void NextProcess(LaunchRequester lr)
{
if (nextProcessor != null)
{
nextProcessor.Process(lr);
}
}
///
/// 包内版本号大于热更目录的版本号说明更了新包
///
public bool IsPersistentLessThanPackageVersion(string packageVersion, string persistentVersion)
{
if (string.IsNullOrEmpty(persistentVersion) || string.IsNullOrEmpty(packageVersion))
{
return false;
}
var persistentNums = persistentVersion.Split('.');
var packageNums = packageVersion.Split('.');
if (persistentNums.Length < 3 || packageNums.Length < 3)
{
return false;
}
var persistentNums1 = int.Parse(persistentNums[0]);
var packageNums1 = int.Parse(packageNums[0]);
if(persistentNums1 < packageNums1)
{
return false;
}
else if(persistentNums1 == packageNums1)
{
if(int.Parse(persistentNums[1]) < int.Parse(packageNums[1]))
{
return false;
}
}
return true;
}
///
/// 低于最低要求版本则需强更
///
public bool IsClientBiggerThanMinVersion(string minVersion, string clientVersion)
{
if (string.IsNullOrEmpty(minVersion) || string.IsNullOrEmpty(clientVersion))
{
return false;
}
var minNums = minVersion.Split('.');
var clientNums = clientVersion.Split('.');
if (minNums.Length < 3 || clientNums.Length < 3)
{
return false;
}
var clientNums1 = int.Parse(clientNums[0]);
var minNums1 = int.Parse(minNums[0]);
if(clientNums1 < minNums1)
{
return false;
}
else if(clientNums1 == minNums1)
{
if(int.Parse(clientNums[1]) < int.Parse(minNums[1]))
{
return false;
}
}
return true;
}
///
/// 低于推荐版本则提示更新
///
public bool IsClientBiggerThanLatestVersion(string latestVersion, string clientVersion)
{
if (string.IsNullOrEmpty(latestVersion) || string.IsNullOrEmpty(clientVersion))
{
return true;
}
var latestNums = latestVersion.Split('.');
var clientNums = clientVersion.Split('.');
if (latestNums.Length < 3 || clientNums.Length < 3)
{
return true;
}
var clientNums1 = int.Parse(clientNums[0]);
var latestNums1 = int.Parse(latestNums[0]);
if (clientNums1 < latestNums1)
{
return false;
}
else if (clientNums1 == latestNums1)
{
if (int.Parse(clientNums[1]) < int.Parse(latestNums[1]))
{
return false;
}
}
return true;
}
protected string GetFileMD5(string filePath)
{
return GameLaunchUtils.GetFileMD5(filePath);
}
protected string GetFileMD5(byte[] content)
{
return GameLaunchUtils.GetFileMD5(content);
}
protected void GetBytesAsync(string path, Action onComplete)
{
byte[] result;
#if UNITY_EDITOR || UNITY_IOS
result = File.ReadAllBytes(path);
onComplete(result);
#elif UNITY_ANDROID
BFMain.Instance.WebRequestMgr.Get(path, (EDownloadCode code, UnityEngine.Networking.UnityWebRequest request) => {
if (code == EDownloadCode.SUCCESS)
{
result = request.downloadHandler.data;
onComplete(result);
}
else
{
onComplete(null);
Debug.LogWarning("GetBytesAsync Failed " + request.responseCode);
}
});
#endif
}
protected void QuitGame()
{
Application.Quit();
}
}
}