2020-05-09 13:31:21 +08:00
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using GameCore;
|
|
|
|
|
using ResUpdate;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
namespace GameLogic
|
|
|
|
|
{
|
|
|
|
|
public class Version
|
|
|
|
|
{
|
|
|
|
|
Hashtable info;
|
|
|
|
|
|
|
|
|
|
public Version(string json)
|
|
|
|
|
{
|
|
|
|
|
info = MiniJSON.jsonDecode(json) as Hashtable;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string ToJson()
|
|
|
|
|
{
|
|
|
|
|
return MiniJSON.jsonEncode(info);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string GetInfo(string key)
|
|
|
|
|
{
|
|
|
|
|
if (info.ContainsKey(key))
|
|
|
|
|
{
|
|
|
|
|
return info[key] as string;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void RemoveInfo(string key)
|
|
|
|
|
{
|
|
|
|
|
if (info.ContainsKey(key))
|
|
|
|
|
{
|
|
|
|
|
info.Remove(key);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetInfo(string key, string value)
|
|
|
|
|
{
|
|
|
|
|
info[key] = value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 版本管理器
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class VersionManager : Singleton<VersionManager>
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 版本号文件
|
|
|
|
|
/// </summary>
|
|
|
|
|
const string VersionsFile = "version";
|
2021-04-15 17:29:21 +08:00
|
|
|
|
|
2020-05-09 13:31:21 +08:00
|
|
|
|
/// <summary>
|
2021-04-15 17:29:21 +08:00
|
|
|
|
/// 版本文件路径
|
2020-05-09 13:31:21 +08:00
|
|
|
|
/// </summary>
|
2021-04-15 17:29:21 +08:00
|
|
|
|
string VersionsFilePath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return AppConst.PersistentDataPath + VersionsFile + ".txt";
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-05-09 13:31:21 +08:00
|
|
|
|
/// <summary>
|
2021-04-15 17:29:21 +08:00
|
|
|
|
/// Stream版本文件路径
|
2020-05-09 13:31:21 +08:00
|
|
|
|
/// </summary>
|
2021-04-15 17:29:21 +08:00
|
|
|
|
string VersionsStreamFilePath
|
2020-05-09 13:31:21 +08:00
|
|
|
|
{
|
2021-04-15 17:29:21 +08:00
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return AppConst.StreamPath + VersionsFile + ".txt";
|
|
|
|
|
}
|
2020-05-09 13:31:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2021-04-15 17:29:21 +08:00
|
|
|
|
/// 版本号
|
2020-05-09 13:31:21 +08:00
|
|
|
|
/// </summary>
|
2021-04-15 17:29:21 +08:00
|
|
|
|
Version VersionInfo;
|
|
|
|
|
|
|
|
|
|
public IEnumerator Initialize()
|
2020-05-09 13:31:21 +08:00
|
|
|
|
{
|
2021-04-15 17:29:21 +08:00
|
|
|
|
if (File.Exists(VersionsFilePath))
|
|
|
|
|
{
|
|
|
|
|
VersionInfo = new Version(File.ReadAllText(VersionsFilePath, System.Text.Encoding.UTF8));
|
|
|
|
|
}
|
|
|
|
|
else
|
2020-05-09 13:31:21 +08:00
|
|
|
|
{
|
2021-04-15 17:29:21 +08:00
|
|
|
|
string url = AppConst.FilePathEx + VersionsStreamFilePath;
|
|
|
|
|
Debug.Log("[VersionLoader Start ]@" + url);
|
|
|
|
|
WWW _www = new WWW(url);
|
|
|
|
|
yield return _www;
|
|
|
|
|
if (string.IsNullOrEmpty(_www.error))
|
2020-05-09 13:31:21 +08:00
|
|
|
|
{
|
2021-04-15 17:29:21 +08:00
|
|
|
|
Debug.Log("[VersionLoader OK ]=" + _www.text);
|
|
|
|
|
VersionInfo = new Version(_www.text);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Debug.LogError("[VersionLoader ERR ]=" + _www.error);
|
2020-05-09 13:31:21 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2021-04-15 17:29:21 +08:00
|
|
|
|
yield return null;
|
|
|
|
|
}
|
2020-05-09 13:31:21 +08:00
|
|
|
|
|
2021-04-15 17:29:21 +08:00
|
|
|
|
public void InitVersions()
|
|
|
|
|
{
|
2020-05-09 13:31:21 +08:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-04 20:19:26 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 保存版本号
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="version"></param>
|
|
|
|
|
public void SetInfo(string key, string value)
|
|
|
|
|
{
|
2021-04-15 17:29:21 +08:00
|
|
|
|
if (VersionInfo != null)
|
2021-03-04 20:19:26 +08:00
|
|
|
|
{
|
2021-04-15 17:29:21 +08:00
|
|
|
|
VersionInfo.SetInfo(key, value);
|
2021-03-04 20:19:26 +08:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-09 13:31:21 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 保存版本号
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="version"></param>
|
|
|
|
|
public void SaveVersion(string version)
|
|
|
|
|
{
|
2021-04-15 17:29:21 +08:00
|
|
|
|
if (VersionInfo != null)
|
2020-05-09 13:31:21 +08:00
|
|
|
|
{
|
2021-04-15 17:29:21 +08:00
|
|
|
|
VersionInfo.SetInfo("version", version);
|
|
|
|
|
SaveToFiles(VersionInfo);
|
2020-05-09 13:31:21 +08:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取版本号
|
|
|
|
|
/// 1.优先从外部拿
|
|
|
|
|
/// 2.拿不到返回-1
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public string GetLocalVersion()
|
|
|
|
|
{
|
2021-04-15 17:29:21 +08:00
|
|
|
|
if (VersionInfo != null)
|
2020-05-09 13:31:21 +08:00
|
|
|
|
{
|
2021-04-15 17:29:21 +08:00
|
|
|
|
return VersionInfo.GetInfo("version");
|
2020-05-09 13:31:21 +08:00
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 对比版本号,返回不一样的位数 -1表示对比异常,0表示相同,其余表示按位不同
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="ver1"></param>
|
|
|
|
|
/// <param name="ver2"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static int VersionCompare(string ver1, string ver2)
|
|
|
|
|
{
|
|
|
|
|
string[] vs1 = ver1.Split('.');
|
|
|
|
|
string[] vs2 = ver2.Split('.');
|
|
|
|
|
|
|
|
|
|
if(vs1.Length != vs2.Length)
|
|
|
|
|
{
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int v1, v2;
|
|
|
|
|
for (int i = 0; i < vs1.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
if (!int.TryParse(vs1[i], out v1))
|
|
|
|
|
{
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
if (!int.TryParse(vs2[i], out v2))
|
|
|
|
|
{
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
if (v1 != v2)
|
|
|
|
|
{
|
|
|
|
|
return i + 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取版本内容,优先拿外部
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="key"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public string GetVersionInfo(string key)
|
|
|
|
|
{
|
2021-04-15 17:29:21 +08:00
|
|
|
|
if (VersionInfo != null)
|
2020-05-09 13:31:21 +08:00
|
|
|
|
{
|
2021-04-15 17:29:21 +08:00
|
|
|
|
return VersionInfo.GetInfo(key);
|
2020-05-09 13:31:21 +08:00
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 保存到文件
|
|
|
|
|
/// </summary>
|
|
|
|
|
void SaveToFiles(Version version)
|
|
|
|
|
{
|
|
|
|
|
string directoryPath = Path.GetDirectoryName(VersionsFilePath);
|
|
|
|
|
if (!Directory.Exists(directoryPath)) Directory.CreateDirectory(directoryPath);
|
|
|
|
|
File.WriteAllText(VersionsFilePath, version.ToJson(), System.Text.Encoding.UTF8);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 检测包版本,用于比较本地包与线上包的差异,有差异则需要更换新包
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static bool CheckPackageVersionSame(string checkVersion)
|
|
|
|
|
{
|
|
|
|
|
string localPackageVersion = Instance.GetVersionInfo("packageVersion");
|
|
|
|
|
if(localPackageVersion != null && checkVersion != null)
|
|
|
|
|
{
|
|
|
|
|
return localPackageVersion.Equals(checkVersion);
|
|
|
|
|
}else if(localPackageVersion == null && checkVersion == null)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|