网上演练
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

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)
{
//灾情数据文件很小,暂不处理进度显示
}
}