| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Linq;
- using System.Net;
- namespace ET
- {
- public partial class StartSceneConfigCategory
- {
- public MultiMap<int, StartSceneConfig> Gates = new MultiMap<int, StartSceneConfig>();
- public MultiMap<int, StartSceneConfig> Maps = new MultiMap<int, StartSceneConfig>();
- public Dictionary<int, StartSceneConfig> Realms = new Dictionary<int, StartSceneConfig>();
- public MultiMap<int, StartSceneConfig> ProcessScenes = new MultiMap<int, StartSceneConfig>();
- public Dictionary<long, Dictionary<string, StartSceneConfig>> ZoneScenesByName =
- new Dictionary<long, Dictionary<string, StartSceneConfig>>();
- public Dictionary<int, StartSceneConfig> LocationConfigs = new Dictionary<int, StartSceneConfig>();
- public StartSceneConfig AccountConfig;
- public StartSceneConfig LoginCenterConfig;
- public StartSceneConfig NoticeConfig;
- // public StartSceneConfig LogConfig;
- public StartSceneConfig HttpConfig;
- public StartSceneConfig OrderConfig;
- public StartSceneConfig QueueConfig;
- public List<StartSceneConfig> Robots = new List<StartSceneConfig>();
- public List<StartSceneConfig> AllMaps = new List<StartSceneConfig>();
- public MultiMap<int, StartSceneConfig> AllUnitCaches = new MultiMap<int, StartSceneConfig>();
- // public Dictionary<int, StartSceneConfig> UnitCaches = new Dictionary<int, StartSceneConfig>();
- public Dictionary<int, StartSceneConfig> Mails = new Dictionary<int, StartSceneConfig>();
- //SceneType -> SceneName 只适用于只有一个服务在的场景
- public Dictionary<SceneType, string> SingleSceneType2Name = new Dictionary<SceneType, string>();
- public List<StartSceneConfig> GetByProcess(int process)
- {
- return this.ProcessScenes[process];
- }
- public StartSceneConfig GetBySceneName(int zone, string name)
- {
- return this.ZoneScenesByName[zone][name];
- }
- public StartSceneConfig GetUnitCacheConfig(long unitId)
- {
- int zone = UnitIdStruct.GetUnitZone(unitId);
- int n = unitId.GetHashCode() % AllUnitCaches[zone].Count;
- return this.AllUnitCaches[zone][n];
- }
- public StartSceneConfig GetBySceneBySceneType(int zone, SceneType sceneType)
- {
- SingleSceneType2Name.TryGetValue(sceneType, out var name);
- return name == null ? null : ZoneScenesByName[zone][name];
- }
- public List<StartSceneConfig> GetMapsByZone(int zone)
- {
- return this.Maps[zone];
- }
- public List<StartSceneConfig> GetGatesByZone(int zone)
- {
- return this.Gates[zone];
- }
- public override void AfterEndInit()
- {
- foreach (StartSceneConfig startSceneConfig in this.GetAll().Values)
- {
- this.ProcessScenes.Add(startSceneConfig.Process, startSceneConfig);
- if (!this.ZoneScenesByName.ContainsKey(startSceneConfig.Zone))
- {
- this.ZoneScenesByName.Add(startSceneConfig.Zone, new Dictionary<string, StartSceneConfig>());
- }
- this.ZoneScenesByName[startSceneConfig.Zone].Add(startSceneConfig.Name, startSceneConfig);
- if (!SingleSceneType2Name.ContainsKey(startSceneConfig.Type))
- {
- SingleSceneType2Name.Add(startSceneConfig.Type, startSceneConfig.Name);
- }
- switch (startSceneConfig.Type)
- {
- case SceneType.Account:
- this.AccountConfig = startSceneConfig;
- break;
- case SceneType.LoginCenter:
- this.LoginCenterConfig = startSceneConfig;
- break;
- case SceneType.Http:
- this.HttpConfig = startSceneConfig;
- break;
- case SceneType.Notice:
- this.NoticeConfig = startSceneConfig;
- break;
- // case SceneType.Log:
- // this.LogConfig = startSceneConfig;
- // break;
- case SceneType.Gate:
- this.Gates.Add(startSceneConfig.Zone, startSceneConfig);
- break;
- case SceneType.Location:
- this.LocationConfigs.Add(startSceneConfig.Zone, startSceneConfig);
- break;
- case SceneType.Realm:
- this.Realms.Add(startSceneConfig.Zone, startSceneConfig);
- break;
- case SceneType.UnitCache:
- //this.UnitCaches.Add(startSceneConfig.Zone, startSceneConfig);
- this.AllUnitCaches.Add(startSceneConfig.Zone, startSceneConfig);
- break;
- case SceneType.Robot:
- this.Robots.Add(startSceneConfig);
- break;
- case SceneType.Map:
- this.AllMaps.Add(startSceneConfig);
- this.Maps.Add(startSceneConfig.Zone, startSceneConfig);
- break;
- case SceneType.Mail:
- this.Mails.Add(startSceneConfig.Zone, startSceneConfig);
- break;
- case SceneType.Order:
- this.OrderConfig = startSceneConfig;
- break;
- case SceneType.Queue:
- this.QueueConfig = startSceneConfig;
- break;
- }
- }
- }
- }
- public partial class StartSceneConfig : ISupportInitialize
- {
- public long InstanceId;
- public SceneType Type;
- public StartProcessConfig StartProcessConfig
- {
- get { return StartProcessConfigCategory.Instance.Get(this.Process); }
- }
- public StartZoneConfig StartZoneConfig
- {
- get { return StartZoneConfigCategory.Instance.Get(this.Zone); }
- }
- // 内网地址外网端口,通过防火墙映射端口过来
- private IPEndPoint innerIPOutPort;
- public IPEndPoint InnerIPOutPort
- {
- get
- {
- if (innerIPOutPort == null)
- {
- this.innerIPOutPort =
- NetworkHelper.ToIPEndPoint($"{this.StartProcessConfig.InnerIP}:{this.OuterPort}");
- }
- return this.innerIPOutPort;
- }
- }
- private IPEndPoint outerIPPort;
- private IPEndPoint startIPPort;
- private string httpIPPort;
- // 外网地址外网端口
- public IPEndPoint OuterIPPort
- {
- get
- {
- if (this.outerIPPort == null)
- {
- this.outerIPPort =
- NetworkHelper.ToIPEndPoint($"{this.StartProcessConfig.OuterIP}:{this.OuterPort}");
- }
- return this.outerIPPort;
- }
- }
- // 起服
- public IPEndPoint StartIPPort
- {
- get
- {
- if (this.startIPPort == null)
- {
- this.startIPPort = NetworkHelper.ToIPEndPoint($"0.0.0.0:{this.OuterPort}");
- }
- return this.startIPPort;
- }
- }
- public string HttpIPPort
- {
- get
- {
- if (string.IsNullOrEmpty(this.httpIPPort))
- {
- this.httpIPPort = $"http://*:{this.OuterPort}/";
- }
- return this.httpIPPort;
- }
- }
- public override void BeginInit()
- {
- }
- public override void EndInit()
- {
- this.Type = EnumHelper.FromString<SceneType>(this.SceneType);
- InstanceIdStruct instanceIdStruct = new InstanceIdStruct(this.Process, (uint)this.Id);
- this.InstanceId = instanceIdStruct.ToLong();
- }
- }
- }
|