using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.Common; using AxibugEmuOnline.Client.Event; using AxibugEmuOnline.Client.Network; using AxibugProtobuf; using System.Collections.Generic; using System.Linq; namespace AxibugEmuOnline.Client.Manager { public class AppGameSavMgr { Dictionary dictRomId2SavInfo = new Dictionary(); public AppGameSavMgr() { NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdGamesavGetGameSavList, RecvGetGameSavList); NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdGamesavDelGameSav, RecvDelGameSavList); NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdGamesavUploadGameSav, RecvUpLoadGameSav); } /// /// 从数据层取存档列表数据(一般是OnNetGameSavListUpdate事件来了之后来取数据) /// /// /// public Protobuf_Mine_GameSavInfo[] GetRomSaveIDList(int RomID) { if (!dictRomId2SavInfo.ContainsKey(RomID)) { dictRomId2SavInfo[RomID] = null; } return dictRomId2SavInfo[RomID]; } /// /// 发送请求即时存档列表 /// /// public void SendGetGameSavList(int RomID) { Protobuf_Mine_GetGameSavList req = new Protobuf_Mine_GetGameSavList() { RomID = RomID, }; App.log.Info($"SendGetGameSavList"); App.network.SendToServer((int)CommandID.CmdGamesavGetGameSavList, ProtoBufHelper.Serizlize(req)); } void RecvGetGameSavList(byte[] reqData) { Protobuf_Mine_GetGameSavList_RESP msg = ProtoBufHelper.DeSerizlize(reqData); Protobuf_Mine_GameSavInfo[] savArr = GetRomSaveIDList(msg.RomID); for (int i = 0; i < savArr.Length; i++) { Protobuf_Mine_GameSavInfo info = msg.SavDataList.FirstOrDefault(w => w.SavDataIdx == i); savArr[i] = info; } Eventer.Instance.PostEvent(EEvent.OnNetGameSavListUpdate, msg.RomID); } /// /// 发送删除即时存档 /// /// /// public void SendDelGameSavList(int RomID,int SavDataIdx) { Protobuf_Mine_DelGameSav req = new Protobuf_Mine_DelGameSav() { RomID = RomID, SavDataIdx = SavDataIdx }; App.log.Info($"SendDelGameSavList"); App.network.SendToServer((int)CommandID.CmdGamesavGetGameSavList, ProtoBufHelper.Serizlize(req)); } void RecvDelGameSavList(byte[] reqData) { Protobuf_Mine_DelGameSav_RESP msg = ProtoBufHelper.DeSerizlize(reqData); Protobuf_Mine_GameSavInfo[] savArr = GetRomSaveIDList(msg.RomID); savArr[msg.SavDataIdx] = null; Eventer.Instance.PostEvent(EEvent.OnNetGameSavListUpdate, msg.RomID); } /// /// 上传即时存档 /// /// /// public void SendUpLoadGameSav(int RomID,int SavDataIdx, byte[] RawData, byte[] SavImgData) { //压缩 byte[] compressRawData = Helper.CompressByteArray(RawData); //压缩 byte[] compressImgData = Helper.CompressByteArray(SavImgData); Protobuf_Mine_UpLoadGameSav req = new Protobuf_Mine_UpLoadGameSav() { RomID = RomID, SavDataIdx = SavDataIdx, StateRaw = Google.Protobuf.ByteString.CopyFrom(compressRawData), SavImg = Google.Protobuf.ByteString.CopyFrom(compressImgData), }; App.log.Info($"SendDelGameSavList"); App.log.Info($"上传即时存档数据 原数据大小:{RawData.Length},压缩后;{compressRawData.Length}"); App.log.Info($"上传截图 原数据大小:{SavImgData.Length},压缩后;{compressImgData.Length}"); App.network.SendToServer((int)CommandID.CmdGamesavGetGameSavList, ProtoBufHelper.Serizlize(req)); } void RecvUpLoadGameSav(byte[] reqData) { Protobuf_Mine_UpLoadGameSav_RESP msg = ProtoBufHelper.DeSerizlize(reqData); Protobuf_Mine_GameSavInfo[] savArr = GetRomSaveIDList(msg.RomID); savArr[msg.UploadSevInfo.SavDataIdx] = msg.UploadSevInfo; Eventer.Instance.PostEvent(EEvent.OnNetGameSavListUpdate, msg.RomID); } /// /// 即时存档或网络截图下载完成之后,需要先解压再使用 /// /// public byte[] UnGzipData(byte[] data) { return Helper.DecompressByteArray(data); } } }