using System; using System.IO; using UnityEngine; using System.Collections.Generic; using System.Linq; using Unity.VisualScripting; namespace FlowerPower { public class ConfigSystem : BaseSystem { private static Dictionary configData = new Dictionary(); public static List light_weblist = new List(); public static List dark_weblist = new List(); public static string web_through_str; public static int requestConfigType = 0; public ConfigSystem(bool isAutoInit = true) { if (isAutoInit) { Init(); } } public sealed override void Init() { base.Init(); AddListener(); } private void AddListener() { NetworkDispatcher.Instance.AddListener(NetworkMsg.GetConfig, OnRequestGetConfig); } private void RemoveListener() { NetworkDispatcher.Instance.RemoveListener(NetworkMsg.GetConfig, OnRequestGetConfig); } private void OnRequestGetConfig(object obj) { var reqData = new RespLoginFunnelData { type = "loadBegin", payload = "" }; NetworkKit.PostFunnelLogin(reqData); if (obj != null) requestConfigType = (int)obj; var loginData = GameHelper.GetLoginModel(); var configFileName = "JarvisConfigFile"; var configFileSavePath = $"{GemCrushFileKit.GetSavePath()}/Config/"; var assetHotFixFilePath = $"{configFileSavePath}{configFileName}.txt"; var configFileNameKey = "configFileName"; var CDNConfigFileName = loginData.setting; string savedCfgName = PlayerPrefs.GetString(configFileNameKey); bool needDownloadConfigFile = false; if (!string.IsNullOrEmpty(CDNConfigFileName)) { //如果本地Player Prefs里没有保存配置文件名 if (string.IsNullOrEmpty(savedCfgName)) { // Debug.Log("[UNITY] No config file name saved."); needDownloadConfigFile = true; } else { Debug.Log($"[UNITY] Saved config name: {savedCfgName}, CDN config name: {CDNConfigFileName}"); //与CDN上的对比名称 if (!savedCfgName.Equals(CDNConfigFileName)) { needDownloadConfigFile = true; } } } Debug.Log($"[UNITY] needDownloadConfigFile: {needDownloadConfigFile}"); //默默地拉去新配置 if (needDownloadConfigFile) { CrazyAsyKit.StartCoroutine(DownloadKit.GetTextFromUrl($"{NetworkKit.CDNUrl}config/{CDNConfigFileName}", configFileName, (content) => { if (content == null) { Debug.Log("down config error"); loadLocalConfig(assetHotFixFilePath, configFileName, configFileSavePath); } else { Debug.Log("down config success"); PlayerPrefs.SetString(configFileNameKey, CDNConfigFileName); ParseConfig(content); UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.NetLoadingUI_Close); var reqData = new RespLoginFunnelData { type = "loadFinish", payload = "" }; NetworkKit.PostFunnelLogin(reqData); AppDispatcher.Instance.Dispatch(AppMsg.LoginInit); } SaveingPotHelper.ResetHistory(); }, configFileSavePath)); } else { loadLocalConfig(assetHotFixFilePath, configFileName, configFileSavePath); } } private void loadLocalConfig(string assetHotFixFilePath, string configFileName, string configFileSavePath) { if (File.Exists(assetHotFixFilePath)) { ParseConfig(File.ReadAllText(assetHotFixFilePath)); UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.NetLoadingUI_Close); var reqData = new RespLoginFunnelData { type = "loadFinish", payload = "" }; NetworkKit.PostFunnelLogin(reqData); AppDispatcher.Instance.Dispatch(AppMsg.LoginInit); } else { var path = $"{Application.streamingAssetsPath}/Config/{configFileName}.txt"; #if UNITY_IOS path = "file://" + path; #endif // Debug.Log($"[UNITY] Load config from streaming asset: {path}"); CrazyAsyKit.StartCoroutine(DownloadKit.GetTextFromUrl(path, configFileName, content => { ParseConfig(content); UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.NetLoadingUI_Close); var reqData = new RespLoginFunnelData { type = "loadFinish", payload = "" }; NetworkKit.PostFunnelLogin(reqData); AppDispatcher.Instance.Dispatch(AppMsg.LoginInit); }, configFileSavePath)); } } private void ParseConfig(string json) { if (json == null) { return; } if (!json.StartsWith("{")) { json = Base64Kit.Decode(json, NetworkManager.identifier); } var dictionary = SerializeUtil.ToObject>(json); ParseGameConfig(dictionary); CtrlDispatcher.Instance.Dispatch(CtrlMsg.Game_StartBefore); if (requestConfigType == 0) { // Debug.Log("NeedShowOpenAd----0-"); if (GameHelper.NeedShowOpenAd()) { Debug.Log("NeedShowOpenAd----0-"); GameHelper.ShowOpenAd(); } else { GameDispatcher.Instance.Dispatch(GameMsg.CloseMask); } } var reqData1 = new RespLoginFunnelData { type = "loadFinish", payload = "" }; NetworkKit.PostFunnelLogin(reqData1); } #region 游戏配置 private void ParseGameConfig(IReadOnlyDictionary dictionary) { if (dictionary.TryGetValue("Common", out var common)) { var commonModel = SerializeUtil.ToObject(common.ToString()); configData[typeof(CommonModel)] = commonModel; } var GameConfigModel = new GameConfigModel(); foreach (var item in dictionary) { if (item.Key.StartsWith("GameBoard")) { string[] parts = item.Key.Split('_'); int boardIndex; if (parts.Length > 1 && int.TryParse(parts[1], out boardIndex)) { // 成功解析出数字 // Debug.Log($"boardIndex==== {boardIndex}"); } else { boardIndex = 1; } if (dictionary.TryGetValue(item.Key, out var gameboard)) { if (!GameConfigModel.game_conf.ContainsKey(boardIndex)) { GameConfigModel.game_conf.Add(boardIndex, null); } GameConfigModel.game_conf[boardIndex] = SerializeUtil.ToObject>(gameboard.ToString()); } } } configData[typeof(GameConfigModel)] = GameConfigModel; if (dictionary.TryGetValue("SignDailyReward", out var signDailyReward)) { var signDailyRewardModel = new SignDailyRewardModel(); signDailyRewardModel.dataList = SerializeUtil.ToObject>(signDailyReward.ToString()); configData[typeof(SignDailyRewardModel)] = signDailyRewardModel; } if (dictionary.TryGetValue("turntable", out var turntable)) { var turntableModel = new TurntableModel(); turntableModel.dataList = SerializeUtil.ToObject>(turntable.ToString()); configData[typeof(TurntableModel)] = turntableModel; } if (dictionary.TryGetValue("rewardNum", out var rewardNum)) { var rewardNumModel = new RewardNumModel(); rewardNumModel.dataList = SerializeUtil.ToObject>(rewardNum.ToString()); configData[typeof(RewardNumModel)] = rewardNumModel; } if (dictionary.TryGetValue("Durationtasks", out var durationtasks)) { var DurationtasksModel = new DurationtasksModel(); DurationtasksModel.dataList = SerializeUtil.ToObject>(durationtasks.ToString()); configData[typeof(DurationtasksModel)] = DurationtasksModel; } if (dictionary.TryGetValue("PassingTasks", out var passingtask)) { var PassingTaskModel = new PassingTaskModel(); PassingTaskModel.dataList = SerializeUtil.ToObject>(passingtask.ToString()); configData[typeof(PassingTaskModel)] = PassingTaskModel; } if (dictionary.TryGetValue("ADTasks", out var adtask)) { var ADTaskModel = new ADTaskModel(); ADTaskModel.dataList = SerializeUtil.ToObject>(adtask.ToString()); configData[typeof(ADTaskModel)] = ADTaskModel; } if (dictionary.TryGetValue("Passportrewards", out var Passportrewards)) { var PassportrewardsModel = new PassportrewardsModel(); PassportrewardsModel.dataList = SerializeUtil.ToObject>(Passportrewards.ToString()); configData[typeof(PassportrewardsModel)] = PassportrewardsModel; } if (dictionary.TryGetValue("SmallrewardNum", out var SmallrewardNum)) { var SmallrewardNumModel = new SmallrewardNumModel(); SmallrewardNumModel.dataList = SerializeUtil.ToObject>(SmallrewardNum.ToString()); configData[typeof(SmallrewardNumModel)] = SmallrewardNumModel; // Debug.Log(SmallrewardNum.ToString()); } if (dictionary.TryGetValue("LargerewardNum", out var LargerewardNum)) { var LargerewardNumModel = new LargerewardNumModel(); LargerewardNumModel.dataList = SerializeUtil.ToObject>(LargerewardNum.ToString()); configData[typeof(LargerewardNumModel)] = LargerewardNumModel; // Debug.Log(LargerewardNum.ToString()); } if (dictionary.TryGetValue("exBrPool", out var exBrPool)) { var exBrPoolModel = new exBrPoolModel(); exBrPoolModel.dataList = SerializeUtil.ToObject>(exBrPool.ToString()); configData[typeof(exBrPoolModel)] = exBrPoolModel; ConfigSystem.GetConfig().config_name_list = ConfigSystem.GetConfig().dataList[0].user_name.Split(",").ToList(); ConfigSystem.GetConfig().config_money_list = ConfigSystem.GetConfig().dataList[0].amount.Split(",").ToList(); } if (dictionary.TryGetValue("exBrPool_2", out var exBrPool_2)) { var exBrPoolModel_2 = new exBrPoolModel_2 { dataList = SerializeUtil.ToObject>(exBrPool_2.ToString()) }; configData[typeof(exBrPoolModel_2)] = exBrPoolModel_2; ConfigSystem.GetConfig().config_name_list = ConfigSystem.GetConfig().dataList[0].user_name.Split(",").ToList(); ConfigSystem.GetConfig().config_money_list = ConfigSystem.GetConfig().dataList[0].amount.Split(",").ToList(); } if (dictionary.TryGetValue("makeup", out var makeup)) { var makeupModel = new MakeupModel { dataList = SerializeUtil.ToObject>(makeup.ToString()) }; configData[typeof(MakeupModel)] = makeupModel; } if (dictionary.TryGetValue("makeup_2", out var makeup_2)) { var makeupModel_2 = new MakeupModel_2 { dataList = SerializeUtil.ToObject>(makeup_2.ToString()) }; Debug.Log("---------------" + makeup_2.ToString()); configData[typeof(MakeupModel_2)] = makeupModel_2; } if (dictionary.TryGetValue("GameUrls", out var GameUrls)) { light_weblist.Clear(); dark_weblist.Clear(); web_through_str = ""; List alllist = new List(); alllist = SerializeUtil.ToObject>(GameUrls.ToString()); List type_list = new List(); for (int i = 0; i < alllist.Count; i++) { if (alllist[i].webType == 2) { if (GameHelper.IsGiftSwitch() && (alllist[i].isMagic == 1)) light_weblist.Add(alllist[i]); else if (!GameHelper.IsGiftSwitch() && (alllist[i].isMagic == 0)) light_weblist.Add(alllist[i]); } else { dark_weblist.Add(alllist[i]); if (!type_list.Contains(alllist[i].wvType)) { web_through_str += alllist[i].wvthrough; web_through_str += "|"; type_list.Add(alllist[i].wvType); } } } web_through_str.Remove(web_through_str.Length - 1); var gameUrlsModel = new GameUrlsModel { dataList = light_weblist }; configData[typeof(GameUrlsModel)] = gameUrlsModel; } if (dictionary.TryGetValue("Paidcoins", out var Paidcoins)) { var PaidcoinsModel = new PaidcoinsModel { dataList = SerializeUtil.ToObject>(Paidcoins.ToString()) }; configData[typeof(PaidcoinsModel)] = PaidcoinsModel; // Debug.Log(Paidcoins.ToString()); } if (dictionary.TryGetValue("Paidgift", out var Paidgift)) { var PaidgiftModel = new PaidgiftModel { dataList = SerializeUtil.ToObject>(Paidgift.ToString()) }; configData[typeof(PaidgiftModel)] = PaidgiftModel; } if (dictionary.TryGetValue("Multigift", out var Multigift)) { var MultigiftModel = new MultigiftModel { dataList = SerializeUtil.ToObject>(Multigift.ToString()) }; configData[typeof(MultigiftModel)] = MultigiftModel; } if (dictionary.TryGetValue("FAQRule", out var FAQRule)) { var FaqModel = new FAQRuleModel { dataList = SerializeUtil.ToObject>(FAQRule.ToString()) }; configData[typeof(FAQRuleModel)] = FaqModel; } if (dictionary.TryGetValue("FAQRule_1", out var FAQRule_1)) { var FaqModel = new FAQRuleModel_1 { dataList = SerializeUtil.ToObject>(FAQRule_1.ToString()) }; configData[typeof(FAQRuleModel_1)] = FaqModel; } if (dictionary.TryGetValue("MessageBoard", out var MessageBoard)) { var messageModel = new MessageBoardModel { dataList = SerializeUtil.ToObject>(MessageBoard.ToString()) }; configData[typeof(MessageBoardModel)] = messageModel; } if (dictionary.TryGetValue("MessageBoard_1", out var MessageBoard_1)) { var messageModel = new MessageBoardModel_1 { dataList = SerializeUtil.ToObject>(MessageBoard_1.ToString()) }; configData[typeof(MessageBoardModel_1)] = messageModel; } if (dictionary.TryGetValue("RankHourRewards", out var RankHourRewards)) { var RankHourRewardsModel = new RankHourRewardsModel(); RankHourRewardsModel.dataList = SerializeUtil.ToObject>(RankHourRewards.ToString()); configData[typeof(RankHourRewardsModel)] = RankHourRewardsModel; } if (dictionary.TryGetValue("RankDayRewards", out var RankDayRewards)) { var RankDayRewardsModel = new RankDayRewardsModel(); RankDayRewardsModel.dataList = SerializeUtil.ToObject>(RankDayRewards.ToString()); configData[typeof(RankDayRewardsModel)] = RankDayRewardsModel; } if (dictionary.TryGetValue("RankWeekRewards", out var RankWeekRewards)) { var RankWeekRewardsModel = new RankWeekRewardsModel(); RankWeekRewardsModel.dataList = SerializeUtil.ToObject>(RankWeekRewards.ToString()); configData[typeof(RankWeekRewardsModel)] = RankWeekRewardsModel; } if (dictionary.TryGetValue("TurnOffRewards", out var TurnOffRewards)) { var TurnOffRewardsModel = new TurnOffRewardsModel(); TurnOffRewardsModel.dataList = SerializeUtil.ToObject>(TurnOffRewards.ToString()); configData[typeof(TurnOffRewardsModel)] = TurnOffRewardsModel; } if (dictionary.TryGetValue("LevelAttempts", out var LevelAttempts)) { var LevelAttemptsModel = new LevelAttemptsModel(); LevelAttemptsModel.dataList = SerializeUtil.ToObject>(LevelAttempts.ToString()); configData[typeof(LevelAttemptsModel)] = LevelAttemptsModel; ConfigSystem.GetConfig().config_name_list = ConfigSystem.GetConfig().dataList[0].user_name.Split(",").ToList(); ConfigSystem.GetConfig().config_money_list = ConfigSystem.GetConfig().dataList[0].amount.Split(",").ToList(); } if (dictionary.TryGetValue("ExchangeDescriptors", out var ExchangeDescriptors)) { var ExchangeDesModel = new ExchangeDesModel(); ExchangeDesModel.dataList = SerializeUtil.ToObject>(ExchangeDescriptors.ToString()); configData[typeof(ExchangeDesModel)] = ExchangeDesModel; } if (dictionary.TryGetValue("SplashAD", out var SplashAD)) { var AppOpenAdModel = new AppOpenAdModel(); AppOpenAdModel.dataList = SerializeUtil.ToObject>(SplashAD.ToString()); configData[typeof(AppOpenAdModel)] = AppOpenAdModel; } } #endregion public static T GetConfig() { return configData.TryGetValue(typeof(T), out var value) ? (T)value : default; } public override void Dispose() { base.Dispose(); RemoveListener(); } } }