using System; using System.Collections.Generic; using System.IO; using System.Linq; using UnityEngine; namespace ET.Client { [Invoke] public class GetAllConfigBytes: AInvokeHandler> { public override Dictionary Handle(ConfigComponent.GetAllConfigBytes args) { Dictionary output = new Dictionary(); HashSet configTypes = EventSystem.Instance.GetTypes(typeof (ConfigAttribute)); if (Define.IsEditor) { string ct = "cs"; GlobalConfig globalConfig = Resources.Load("GlobalConfig"); CodeMode codeMode = globalConfig.CodeMode; switch (codeMode) { case CodeMode.Client: ct = "c"; break; case CodeMode.Server: ct = "s"; break; case CodeMode.ClientServer: ct = "cs"; break; default: throw new ArgumentOutOfRangeException(); } List startConfigs = new List() { "StartMachineConfigCategory", "StartProcessConfigCategory", "StartSceneConfigCategory", "StartZoneConfigCategory", }; foreach (Type configType in configTypes) { string configFilePath; if (startConfigs.Contains(configType.Name)) { configFilePath = $"../Config/GenFromExcel/{ct}/{Options.Instance.StartConfig}/{configType.Name}.bytes"; } else { configFilePath = $"../Config/GenFromExcel/{ct}/{configType.Name}.bytes"; } output[configType] = File.ReadAllBytes(configFilePath); } } else { using (Root.Instance.Scene.AddComponent()) { const string configBundleName = "config.unity3d"; ResourcesComponent.Instance.LoadBundle(configBundleName); foreach (Type configType in configTypes) { TextAsset v = ResourcesComponent.Instance.GetAsset(configBundleName, configType.Name) as TextAsset; output[configType] = v.bytes; } } } return output; } } [Invoke] public class GetOneConfigBytes: AInvokeHandler { public override byte[] Handle(ConfigComponent.GetOneConfigBytes args) { var abNames = args.ConfigName.Split('.'); TextAsset v = ResourcesComponent.Instance.GetAsset("config.unity3d", abNames[1]) as TextAsset; return v.bytes; //throw new NotImplementedException("client cant use LoadOneConfig"); } } }