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(); //保存灾情数据文件到本地 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); } } /// /// 上传文件成功 /// /// 文件的路径 private void OnCompleted(string fullname) { gameObject.SetActive(false); //清空实体管理器,以免返回到DisasterLibraryManage场景直接选中灾情加载进主场景报实体管理器已有该实体的错误 EntitiesManager.Instance.Reset(); //保存后清空灾情库灾情列表,以免返回到DisasterLibraryManage场景直接选中灾情通过编辑加载进主场景, //然后不操作什么再保存,灾情列表数据重复;然后再查看或编辑进入主场景加载灾情时,会报对象Id重复 DisasterLibraryFile.Instance.Reset(); GameSettings.disasterSetting.isCteateDisaster = false; //灾情文件上传成功 SceneManager.LoadScene("DisasterLibraryManage"); } /// /// 上传文件进度 /// /// 文件路径 /// 上传进度 private void OnProgressChanged(string fullname, float progress) { //灾情数据文件很小,暂不处理进度显示 } }