using Sog; using Sog.Log; using ProtoCSStruct; namespace World { public static class WorldServerDataUtils { private const string saveFile = "./worldSvrSaveData.fdb"; public static void SaveDataToFile() { ref WorldSvrSaveFileData data = ref WorldServerUtils.GetWorldServerData().m_WorldServerGlobalData; // 更新商品库存信息 UpdateRealmItemStockInfo(ref data); TraceLog.Stat("WorldServerDataUtils.SaveDataToFile round id {0}", data.RoundId); TraceLog.Debug("WorldServerDataUtils.SaveDataToFile round id {0}", data.RoundId); int iRet = Sog.IO.FileDBSave.SaveToFile(ref data, saveFile); if (iRet != 0) { TraceLog.Error("WorldServerDataUtils.SaveDataToFile save file {0} error, ret {1}", saveFile, iRet); } } public static void LoadDataFromFile() { TraceLog.Trace("WorldServerDataUtils.LoadDataFromFile load file {0} begin", saveFile); ref WorldSvrSaveFileData data = ref WorldServerUtils.GetWorldServerData().m_WorldServerGlobalData; bool success = Sog.IO.FileDBSave.ReadFromFile(ref data, saveFile); if (success) { TraceLog.Trace("WorldServerDataUtils.LoadDataFromFile load file {0} success, count {1}" , saveFile, data.RoundId); // 初始化商品库存信息 InitRealmItemStockInfo(ref data); } else { WorldServerUtils.GetWorldServerData().m_WorldServerGlobalData = new WorldSvrSaveFileData(); TraceLog.Trace("WorldServerDataUtils.LoadDataFromFile no Data, new empty object"); //立即保存一下 SaveDataToFile(); } TraceLog.Trace("WorldServerDataUtils.LoadDataFromFile end"); } public static void InitRealmItemStockInfo(ref WorldSvrSaveFileData data) { TraceLog.Trace("WorldServerDataUtils.InitRealmItemStockInfo realm count {0}", data.RealmItemStock.Count); var nowSec = WorldServerUtils.GetTimeSecond(); var realmStock = WorldServerUtils.GetWorldServerData().m_realmItemStock; for (int i = 0; i < data.RealmItemStock.Count; i++) { var realmInfo = new RealmItemStockInfo { realmId = data.RealmItemStock[i].RealmId }; for (int j = 0; j < data.RealmItemStock[i].ItemStock.Count; j++) { int itemId = data.RealmItemStock[i].ItemStock[j].ItemID; } realmStock.Add(realmInfo.realmId, realmInfo); } } public static void UpdateRealmItemStockInfo(ref WorldSvrSaveFileData data) { data.RealmItemStock.Clear(); var nowSec = WorldServerUtils.GetTimeSecond(); var realmStock = WorldServerUtils.GetWorldServerData().m_realmItemStock; foreach (RealmItemStockInfo realmInfo in realmStock.Values) { var ssrealmInfo = new SSRealmItemStockInfo { RealmId = realmInfo.realmId }; foreach (ItemStockInfoOne stockOne in realmInfo.stockDict.Values) { } // 有效信息才写入fdb if (ssrealmInfo.ItemStock.Count > 0) { TraceLog.Stat("WorldServerDataUtils.UpdateRealmItemStockInfo realm {0} add succ", realmInfo.realmId); data.RealmItemStock.Add(ref ssrealmInfo); } } } } }