@ -8,12 +8,13 @@ using System.Xml;
using UnityEngine ;
using UnityEngine ;
using UnityEngine.SceneManagement ;
using UnityEngine.SceneManagement ;
public class UpdateManager : MonoBehaviour {
public class UpdateManager : MonoBehaviour
{
private static UpdateManager instance ;
private static UpdateManager instance ;
public static UpdateManager Instance
public static UpdateManager Instance
{
{
get
get
{
{
return instance ;
return instance ;
}
}
}
}
@ -21,15 +22,15 @@ public class UpdateManager : MonoBehaviour {
private string serverDirectoryPath ; //服务端文件存储文件夹
private string serverDirectoryPath ; //服务端文件存储文件夹
private string localDirectoryPath ; //本地文件存储文件夹
private string localDirectoryPath ; //本地文件存储文件夹
private string tempDirectoryPath ; //下载下来的配置文件暂存文件夹//单机版注释掉
//private string tempDirectoryPath; //下载下来的配置文件暂存文件夹//单机版注释掉
private string serverFileXml ; //服务端文件版本配置
private string serverFileXml ; //服务端文件版本配置
private string localTempXml ; //本地临时配置文件路径
private string localTempXml ; //本地临时配置文件路径
private string localFileXml ; //本地文件版本配置
private string localFileXml ; //本地文件版本配置
private List < string > fileList = new List < string > ( ) ; //需要更新的文件列表
private List < string > fileList = new List < string > ( ) ; //需要更新的文件列表
private List < string > delList = new List < string > ( ) ; //需要删除的文件列表
private List < string > delList = new List < string > ( ) ; //需要删除的文件列表
private int updateCount ;
private int updateCount ;
private bool [ ] completedList ;
private bool [ ] completedList ;
private float [ ] progressList ;
private float [ ] progressList ;
public bool isEdit = false ;
public bool isEdit = false ;
public UpdateState state ;
public UpdateState state ;
@ -38,52 +39,55 @@ public class UpdateManager : MonoBehaviour {
{
{
instance = this ;
instance = this ;
selectedMsg = new DisasterInfo ( ) ;
selectedMsg = new DisasterInfo ( ) ;
}
}
/// <summary>
/// <summary>
/// 进入编辑模式
/// 进入编辑模式
/// </summary>
/// </summary>
public void Edit ( )
public void Edit ( )
{
{
state = UpdateState . Edit ;
state = UpdateState . Edit ;
DisasterManager . disaster = selectedMsg ;
DisasterManager . disaster = selectedMsg ;
initPath ( ) ;
initPath ( ) ;
downLoadFileVersion ( ) ; //单机版注释
DisasterManager . editorRight = true ;
//versionUpdateOnCompleted();//联机版取消注释
// downLoadFileVersion();//单机版注释
versionUpdateOnCompleted ( ) ; //联机版取消注释
}
}
public void Edit ( DisasterInfo info )
public void Edit ( DisasterInfo info )
{
{
selectedMsg = info ;
selectedMsg = info ;
DisasterManager . disaster = selectedMsg ;
DisasterManager . disaster = selectedMsg ;
state = UpdateState . Edit ;
state = UpdateState . Edit ;
initPath ( ) ;
initPath ( ) ;
downLoadFileVersion ( ) ; //单机版注释
//downLoadFileVersion(); //单机版注释
//versionUpdateOnCompleted() ;
versionUpdateOnCompleted ( ) ;
}
}
/// <summary>
/// <summary>
/// 进入查看模式 //单机版注释
/// 进入查看模式 //单机版注释
/// </summary>
/// </summary>
public void View ( )
public void View ( )
{
{
state = UpdateState . View ;
state = UpdateState . View ;
DisasterManager . disaster = selectedMsg ;
DisasterManager . disaster = selectedMsg ;
DisasterManager . editorRight = false ;
initPath ( ) ;
initPath ( ) ;
downLoadFileVersion ( ) ; //单机版注释
//downLoadFileVersion(); //单机版注释
//versionUpdateOnCompleted() ;
versionUpdateOnCompleted ( ) ;
}
}
/// <summary>
/// <summary>
/// 进入主场景之前先更新 //单机版注释
/// 进入主场景之前先更新 //单机版注释
/// </summary>
/// </summary>
private void UpdateBeforeContinue ( )
//private void UpdateBeforeContinue( )
{
// {
foreach ( string key in delList )
// foreach(string key in delList )
{
// {
File . Delete ( localDirectoryPath + key ) ;
// File.Delete(localDirectoryPath + key) ;
}
// }
progressList = new float [ fileList . Count ] ;
// progressList = new float[fileList.Count] ;
completedList = new bool [ fileList . Count ] ;
// completedList = new bool[fileList.Count];
UpdateResources ( ) ;
// UpdateResources() ;
}
// }
/// <summary>
/// <summary>
/// 不更新直接进入主场景
/// 不更新直接进入主场景
/// </summary>
/// </summary>
@ -93,7 +97,7 @@ public class UpdateManager : MonoBehaviour {
{
{
//删除临时配置文件
//删除临时配置文件
File . Delete ( localTempXml ) ;
File . Delete ( localTempXml ) ;
}
}
DisasterManager . updateFlag = true ;
DisasterManager . updateFlag = true ;
switch ( state )
switch ( state )
{
{
@ -105,9 +109,9 @@ public class UpdateManager : MonoBehaviour {
break ;
break ;
case UpdateState . View :
case UpdateState . View :
//查看
//查看
DisasterManager . model = PlayModel . view ;
DisasterManager . model = PlayModel . view ;
break ;
break ;
case UpdateState . MainSceneUpdate :
case UpdateState . MainSceneUpdate :
break ;
break ;
default :
default :
break ;
break ;
@ -116,13 +120,13 @@ public class UpdateManager : MonoBehaviour {
SceneManager . LoadScene ( "MainScene_New" ) ;
SceneManager . LoadScene ( "MainScene_New" ) ;
}
}
//单机版注释掉
//单机版注释掉
public void MainSceneUpdateDisaster ( )
//public void MainSceneUpdateDisaster( )
{
// {
state = UpdateState . MainSceneUpdate ;
// state = UpdateState.MainSceneUpdate ;
//先更新
// //先更新
initPath ( ) ;
// initPath() ;
downLoadFileVersion ( ) ;
// downLoadFileVersion() ;
}
// }
/// <summary>
/// <summary>
/// 文件路径初始化
/// 文件路径初始化
/// </summary>
/// </summary>
@ -131,17 +135,17 @@ public class UpdateManager : MonoBehaviour {
fileList = new List < string > ( ) ;
fileList = new List < string > ( ) ;
serverDirectoryPath = selectedMsg . Id . ToString ( ) + "/File/" ; //服务器相对路径
serverDirectoryPath = selectedMsg . Id . ToString ( ) + "/File/" ; //服务器相对路径
localDirectoryPath = Application . dataPath + "/Data/" + selectedMsg . Id . ToString ( ) + "/File/" ; //本地路径
localDirectoryPath = Application . dataPath + "/Data/" + selectedMsg . Id . ToString ( ) + "/File/" ; //本地路径
tempDirectoryPath = Application . dataPath + "/Temp/" + selectedMsg . Id . ToString ( ) + "/" ; //本地临时路径 //单机版注释
//tempDirectoryPath = Application.dataPath + "/Temp/" + selectedMsg.Id.ToString() + "/"; //本地临时路径 //单机版注释
//如果本地没有该灾情的文件夹,先创建
//如果本地没有该灾情的文件夹,先创建
if ( ! Directory . Exists ( localDirectoryPath ) )
if ( ! Directory . Exists ( localDirectoryPath ) )
{
{
Directory . CreateDirectory ( localDirectoryPath ) ;
Directory . CreateDirectory ( localDirectoryPath ) ;
}
}
//如果本地没有临时路径,先创建 //单机版注释
//如果本地没有临时路径,先创建 //单机版注释
if ( ! Directory . Exists ( tempDirectoryPath ) )
//if (!Directory.Exists(tempDirectoryPath) )
{
// {
Directory . CreateDirectory ( tempDirectoryPath ) ;
// Directory.CreateDirectory(tempDirectoryPath) ;
}
// }
serverFileXml = selectedMsg . Id . ToString ( ) + "/" + selectedMsg . Id . ToString ( ) + ".xml" ; //服务器配置文件
serverFileXml = selectedMsg . Id . ToString ( ) + "/" + selectedMsg . Id . ToString ( ) + ".xml" ; //服务器配置文件
localTempXml = Application . dataPath + "/Temp/" + selectedMsg . Id . ToString ( ) + ".xml" ; //本地临时配置文件
localTempXml = Application . dataPath + "/Temp/" + selectedMsg . Id . ToString ( ) + ".xml" ; //本地临时配置文件
@ -150,88 +154,88 @@ public class UpdateManager : MonoBehaviour {
/// <summary>
/// <summary>
/// 下载最新的文件配置文档 //单机版注释
/// 下载最新的文件配置文档 //单机版注释
/// </summary>
/// </summary>
private void downLoadFileVersion ( )
//private void downLoadFileVersion( )
{
// {
NetworkManager . Default . DownloadFileAsync ( localTempXml , serverFileXml , null , OnDownloadProgress , OnFileVersionCompleted ) ;
// NetworkManager.Default.DownloadFileAsync(localTempXml, serverFileXml , null, OnDownloadProgress, OnFileVersionCompleted) ;
}
// }
private void OnDownloadProgress ( string arg1 , string arg2 , float progress )
private void OnDownloadProgress ( string arg1 , string arg2 , float progress )
{
{
if ( progress < 1 0 0 )
if ( progress < 1 0 0 )
{
{
ResourceLoadWindow . Instance . LoadTextHintWindow ( "正在更新..." , 0.5f ) ;
ResourceLoadWindow . Instance . LoadTextHintWindow ( "正在更新..." , 0.5f ) ;
}
}
}
}
//单机版注释掉该方法
//单机版注释掉该方法
private void OnFileVersionCompleted ( string localTempXml , string serverFileXml )
//private void OnFileVersionCompleted(string localTempXml, string serverFileXml )
{
// {
if ( ! File . Exists ( localFileXml ) )
// if (!File.Exists(localFileXml) )
{
// {
CreateMD5Tool . Instance . CreateManifestXml ( localDirectoryPath , localFileXml ) ;
// CreateMD5Tool.Instance.CreateManifestXml(localDirectoryPath, localFileXml) ;
}
// }
//获取本地的HashID
// //获取本地的HashID
Dictionary < string , string > localHashID = getMainFileVersion ( localFileXml ) ;
// Dictionary<string, string> localHashID = getMainFileVersion(localFileXml) ;
//获取最新的HashID
// //获取最新的HashID
Dictionary < string , string > serverHashID = getMainFileVersion ( localTempXml ) ;
// Dictionary<string, string> serverHashID = getMainFileVersion(localTempXml) ;
foreach ( string key in serverHashID . Keys )
// foreach (string key in serverHashID.Keys )
{
// {
//1、先判断本地资源列表是否存在,若不存在则属于新资源
// //1、先判断本地资源列表是否存在,若不存在则属于新资源
if ( ! localHashID . ContainsKey ( key ) )
// if (!localHashID.ContainsKey(key) )
{
// {
fileList . Add ( key ) ;
// fileList.Add(key) ;
}
// }
else
// else
{
// {
//2、再判断HashID是否相等,若不等则属于新资源
// //2、再判断HashID是否相等,若不等则属于新资源
string hash = serverHashID [ key ] ;
// string hash = serverHashID[key] ;
if ( localHashID [ key ] ! = serverHashID [ key ] )
// if (localHashID[key] != serverHashID[key] )
{
// {
fileList . Add ( key ) ;
// fileList.Add(key);
}
// }
}
// }
}
// }
foreach ( string key in localHashID . Keys )
// foreach(string key in localHashID.Keys )
{
// {
//如果本地有但服务端没有,则删除该资源
// //如果本地有但服务端没有,则删除该资源
if ( ! serverHashID . ContainsKey ( key ) )
// if (!serverHashID.ContainsKey(key) )
{
// {
//File.Delete(localDirectoryPath + key);
// //File.Delete(localDirectoryPath + key);
delList . Add ( key ) ;
// delList.Add(key) ;
}
// }
}
// }
if ( fileList . Count > 0 | | delList . Count > 0 )
// if (fileList.Count > 0 || delList.Count > 0)
{
// {
switch ( state )
// switch (state )
{
// {
case UpdateState . None :
// case UpdateState.None :
break ;
// break;
case UpdateState . Edit :
// case UpdateState.Edit :
ResourceLoadWindow . Instance . LoadUpdateTipWindow ( "本地与服务端内容不一致,是否更新?" , UpdateBeforeContinue , ContinueWithoutUpdate ) ;
// ResourceLoadWindow.Instance.LoadUpdateTipWindow("本地与服务端内容不一致,是否更新?", UpdateBeforeContinue, ContinueWithoutUpdate);
break ;
// break;
case UpdateState . View :
// case UpdateState.View :
ResourceLoadWindow . Instance . LoadUpdateTipWindow ( "本地与服务端内容不一致,是否更新?" , UpdateBeforeContinue , ContinueWithoutUpdate ) ;
// ResourceLoadWindow.Instance.LoadUpdateTipWindow("本地与服务端内容不一致,是否更新?", UpdateBeforeContinue, ContinueWithoutUpdate);
break ;
// break;
case UpdateState . MainSceneUpdate :
// case UpdateState.MainSceneUpdate :
UpdateBeforeContinue ( ) ;
// UpdateBeforeContinue();
break ;
// break;
default :
// default :
break ;
// break;
}
// }
}
// }
else
// else
{
// {
//将本地临时配置文件替换原有配置文件
// //将本地临时配置文件替换原有配置文件
FileMove ( localTempXml , localFileXml ) ;
// FileMove(localTempXml, localFileXml) ;
//更新完成
// //更新完成
versionUpdateOnCompleted ( ) ;
// versionUpdateOnCompleted() ;
}
// }
}
// }
/// <summary>
/// <summary>
/// 更新完成
/// 更新完成
/// </summary>
/// </summary>
private void versionUpdateOnCompleted ( )
private void versionUpdateOnCompleted ( )
{
{
switch ( state )
switch ( state )
{
{
case UpdateState . None :
case UpdateState . None :
@ -246,28 +250,28 @@ public class UpdateManager : MonoBehaviour {
break ;
break ;
case UpdateState . MainSceneUpdate :
case UpdateState . MainSceneUpdate :
Debug . Log ( "灾情更新完成" ) ;
Debug . Log ( "灾情更新完成" ) ;
MessageDispatcher . SendMessage ( "DisasterUpdateCompelete" ) ; //单机版注释
// MessageDispatcher.SendMessage("DisasterUpdateCompelete"); //单机版注释
break ;
break ;
default :
default :
break ;
break ;
}
}
}
}
/// <summary>
/// <summary>
/// 文件下载更新 单机版注释
/// 文件下载更新 单机版注释
/// </summary>
/// </summary>
private void UpdateResources ( )
//private void UpdateResources( )
{
//{
updateCount = 0 ;
// updateCount = 0;
for ( int i = 0 ; i < fileList . Count ; i + + )
// for (int i = 0; i < fileList.Count; i++ )
{
// {
// Debug.Log("#########################第" + i + "个文件开始下载");
// // Debug.Log("#########################第" + i + "个文件开始下载");
var fullPath = tempDirectoryPath + fileList [ i ] ; //本地临时路径
// var fullPath = tempDirectoryPath + fileList[i]; //本地临时路径
var filePath = serverDirectoryPath + fileList [ i ] ; //服务器相对路径
// var filePath = serverDirectoryPath + fileList[i]; //服务器相对路径
checkDirectory ( fullPath ) ;
// checkDirectory(fullPath);
NetworkManager . Default . DownloadFileAsync ( fullPath , filePath , null , OnDownloadProgress , OnCompleted ) ;
// NetworkManager.Default.DownloadFileAsync(fullPath, filePath, null, OnDownloadProgress, OnCompleted) ;
}
// }
}
// }
private void checkDirectory ( string path )
private void checkDirectory ( string path )
{
{
string directoryName = Path . GetDirectoryName ( path ) ;
string directoryName = Path . GetDirectoryName ( path ) ;
@ -277,27 +281,27 @@ public class UpdateManager : MonoBehaviour {
}
}
}
}
//单机版注释
//单机版注释
private void OnCompleted ( string fullname , string filename )
//private void OnCompleted(string fullname,string filename )
{
// {
updateCount + + ;
// updateCount++ ;
var fileName = filename . Replace ( serverDirectoryPath , string . Empty ) ;
// var fileName = filename.Replace(serverDirectoryPath, string.Empty) ;
var targetFile = localDirectoryPath + fileName ;
// var targetFile = localDirectoryPath + fileName ;
//将临时文件替换原有文件
// //将临时文件替换原有文件
FileMove ( fullname , targetFile ) ;
// FileMove(fullname, targetFile) ;
int index = fileList . IndexOf ( fileName ) ;
// int index = fileList.IndexOf(fileName) ;
completedList [ index ] = true ;
// completedList[index] = true ;
Debug . Log ( "*************************第" + index + "个文件下载完成" ) ;
// Debug.Log("*************************第" + index + "个文件下载完成") ;
//所有文件更新完成
// //所有文件更新完成
if ( updateCount = = fileList . Count )
// if (updateCount == fileList.Count )
{
// {
Directory . Delete ( tempDirectoryPath , true ) ;
// Directory.Delete(tempDirectoryPath, true) ;
//将本地临时配置文件替换原有配置文件
// //将本地临时配置文件替换原有配置文件
FileMove ( localTempXml , localFileXml ) ;
// FileMove(localTempXml, localFileXml) ;
versionUpdateOnCompleted ( ) ;
// versionUpdateOnCompleted() ;
}
// }
}
// }
/// <summary>
/// <summary>
/// 文件移动
/// 文件移动
/// </summary>
/// </summary>
@ -325,7 +329,7 @@ public class UpdateManager : MonoBehaviour {
{
{
Debug . LogError ( exception . Message ) ;
Debug . LogError ( exception . Message ) ;
}
}
}
}
private void createLocalFileXml ( string path )
private void createLocalFileXml ( string path )
{
{
XmlDocument document = new XmlDocument ( ) ;
XmlDocument document = new XmlDocument ( ) ;