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