You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.8 KiB
73 lines
2.8 KiB
5 years ago
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using AX.NetworkSystem;
|
||
|
using AX.Network.Protocols;
|
||
|
using AX.Serialization;
|
||
|
using System;
|
||
|
using System.IO;
|
||
|
using UnityEngine.SceneManagement;
|
||
|
|
||
|
public class DISASTER_METADATA_SAVE_REPLY : NetworkMessageBehaviour
|
||
|
{
|
||
|
protected override void Execute(BinaryMessage message)
|
||
|
{
|
||
|
var info = message.Body.Deserialize<DisasterLibrary>();
|
||
|
|
||
|
//保存灾情数据文件到本地
|
||
|
SaveDisasterLibrary(info.Id);
|
||
|
|
||
|
//设置上传路径:上传时在此路径下的 相对目录("DisasterLibrary/" + info.Id.ToString() + ".disaster") 读取文件
|
||
|
FileTransfer.SetUploadPath(Application.streamingAssetsPath);
|
||
|
|
||
|
//上传灾情文件到服务器:服务器会把文件写在服务器某个路径下的 相对目录(DisasterLibrary/" + info.Id.ToString() + ".disaster) 下
|
||
|
NetworkManager.Default.UploadFileAsync("DisasterLibrary/" + info.Id.ToString() + ".disaster", OnProgressChanged, OnCompleted);
|
||
|
}
|
||
|
|
||
|
public void SaveDisasterLibrary(long id)
|
||
|
{
|
||
|
var disaster = DisasterLibraryFile.Instance.CompressedTypelessSerialize();
|
||
|
|
||
|
var directory = Application.streamingAssetsPath + "/" + "DisasterLibrary";
|
||
|
if (!Directory.Exists(directory))
|
||
|
Directory.CreateDirectory(directory);
|
||
|
|
||
|
var fileName = id + ".disaster";
|
||
|
var filePath = directory + "/" + fileName;
|
||
|
|
||
|
using (var filestream = new FileStream(filePath, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.ReadWrite))
|
||
|
{
|
||
|
filestream.Write(disaster, 0, disaster.Length);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 上传文件成功
|
||
|
/// </summary>
|
||
|
/// <param name="fullname">文件的路径</param>
|
||
|
private void OnCompleted(string fullname)
|
||
|
{
|
||
|
gameObject.SetActive(false);
|
||
|
//清空实体管理器,以免返回到DisasterLibraryManage场景直接选中灾情加载进主场景报实体管理器已有该实体的错误
|
||
|
EntitiesManager.Instance.Reset();
|
||
|
//保存后清空灾情库灾情列表,以免返回到DisasterLibraryManage场景直接选中灾情通过编辑加载进主场景,
|
||
|
//然后不操作什么再保存,灾情列表数据重复;然后再查看或编辑进入主场景加载灾情时,会报对象Id重复
|
||
|
DisasterLibraryFile.Instance.Reset();
|
||
|
|
||
|
GameSettings.disasterSetting.isCteateDisaster = false;
|
||
|
|
||
|
//灾情文件上传成功
|
||
|
SceneManager.LoadScene("DisasterLibraryManage");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 上传文件进度
|
||
|
/// </summary>
|
||
|
/// <param name="fullname">文件路径</param>
|
||
|
/// <param name="progress">上传进度</param>
|
||
|
private void OnProgressChanged(string fullname, float progress)
|
||
|
{
|
||
|
//灾情数据文件很小,暂不处理进度显示
|
||
|
}
|
||
|
}
|