StartSceneConfig.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. using System.Collections.Generic;
  2. using System.ComponentModel;
  3. using System.Net;
  4. namespace ET
  5. {
  6. public partial class StartSceneConfigCategory
  7. {
  8. public MultiMap<int, StartSceneConfig> Gates = new MultiMap<int, StartSceneConfig>();
  9. public Dictionary<int, StartSceneConfig> Realms = new Dictionary<int, StartSceneConfig>();
  10. public MultiMap<int, StartSceneConfig> ProcessScenes = new MultiMap<int, StartSceneConfig>();
  11. public Dictionary<long, Dictionary<string, StartSceneConfig>> ZoneScenesByName = new Dictionary<long, Dictionary<string, StartSceneConfig>>();
  12. public Dictionary<int, StartSceneConfig> LocationConfigs = new Dictionary<int, StartSceneConfig>();
  13. public StartSceneConfig AccountConfig;
  14. public StartSceneConfig LoginCenterConfig;
  15. public StartSceneConfig NoticeConfig;
  16. public StartSceneConfig LogConfig;
  17. public List<StartSceneConfig> Robots = new List<StartSceneConfig>();
  18. public List<StartSceneConfig> AllMaps = new List<StartSceneConfig>();
  19. public Dictionary<int, StartSceneConfig> UnitCaches = new Dictionary<int, StartSceneConfig>();
  20. public Dictionary<int, StartSceneConfig> Mails = new Dictionary<int, StartSceneConfig>();
  21. public List<StartSceneConfig> GetByProcess(int process)
  22. {
  23. return this.ProcessScenes[process];
  24. }
  25. public StartSceneConfig GetBySceneName(int zone, string name)
  26. {
  27. return this.ZoneScenesByName[zone][name];
  28. }
  29. public StartSceneConfig GetUnitCacheConfig(long unitId)
  30. {
  31. int zone = UnitIdStruct.GetUnitZone(unitId);
  32. return UnitCaches[zone];
  33. }
  34. public override void AfterEndInit()
  35. {
  36. foreach (StartSceneConfig startSceneConfig in this.GetAll().Values)
  37. {
  38. this.ProcessScenes.Add(startSceneConfig.Process, startSceneConfig);
  39. if (!this.ZoneScenesByName.ContainsKey(startSceneConfig.Zone))
  40. {
  41. this.ZoneScenesByName.Add(startSceneConfig.Zone, new Dictionary<string, StartSceneConfig>());
  42. }
  43. this.ZoneScenesByName[startSceneConfig.Zone].Add(startSceneConfig.Name, startSceneConfig);
  44. switch (startSceneConfig.Type)
  45. {
  46. case SceneType.Account:
  47. this.AccountConfig = startSceneConfig;
  48. break;
  49. case SceneType.LoginCenter:
  50. this.LoginCenterConfig = startSceneConfig;
  51. break;
  52. case SceneType.Notice:
  53. this.NoticeConfig = startSceneConfig;
  54. break;
  55. // case SceneType.Log:
  56. // this.LogConfig = startSceneConfig;
  57. // break;
  58. case SceneType.Gate:
  59. this.Gates.Add(startSceneConfig.Zone, startSceneConfig);
  60. break;
  61. case SceneType.Location:
  62. this.LocationConfigs.Add(startSceneConfig.Zone, startSceneConfig);
  63. break;
  64. case SceneType.Realm:
  65. this.Realms.Add(startSceneConfig.Zone, startSceneConfig);
  66. break;
  67. case SceneType.UnitCache:
  68. this.UnitCaches.Add(startSceneConfig.Zone, startSceneConfig);
  69. break;
  70. case SceneType.Robot:
  71. this.Robots.Add(startSceneConfig);
  72. break;
  73. case SceneType.Map:
  74. this.AllMaps.Add(startSceneConfig);
  75. break;
  76. case SceneType.Mail:
  77. this.Mails.Add(startSceneConfig.Zone, startSceneConfig);
  78. break;
  79. }
  80. }
  81. }
  82. }
  83. public partial class StartSceneConfig: ISupportInitialize
  84. {
  85. public long InstanceId;
  86. public SceneType Type;
  87. public StartProcessConfig StartProcessConfig
  88. {
  89. get
  90. {
  91. return StartProcessConfigCategory.Instance.Get(this.Process);
  92. }
  93. }
  94. public StartZoneConfig StartZoneConfig
  95. {
  96. get
  97. {
  98. return StartZoneConfigCategory.Instance.Get(this.Zone);
  99. }
  100. }
  101. // 内网地址外网端口,通过防火墙映射端口过来
  102. private IPEndPoint innerIPOutPort;
  103. public IPEndPoint InnerIPOutPort
  104. {
  105. get
  106. {
  107. if (innerIPOutPort == null)
  108. {
  109. this.innerIPOutPort = NetworkHelper.ToIPEndPoint($"{this.StartProcessConfig.InnerIP}:{this.OuterPort}");
  110. }
  111. return this.innerIPOutPort;
  112. }
  113. }
  114. private IPEndPoint outerIPPort;
  115. private IPEndPoint startIPPort;
  116. private string httpIPPort;
  117. // 外网地址外网端口
  118. public IPEndPoint OuterIPPort
  119. {
  120. get
  121. {
  122. if (this.outerIPPort == null)
  123. {
  124. this.outerIPPort = NetworkHelper.ToIPEndPoint($"{this.StartProcessConfig.OuterIP}:{this.OuterPort}");
  125. }
  126. return this.outerIPPort;
  127. }
  128. }
  129. // 起服
  130. public IPEndPoint StartIPPort
  131. {
  132. get
  133. {
  134. if (this.startIPPort == null)
  135. {
  136. this.startIPPort = NetworkHelper.ToIPEndPoint($"0.0.0.0:{this.OuterPort}");
  137. }
  138. return this.startIPPort;
  139. }
  140. }
  141. public string HttpIPPort
  142. {
  143. get
  144. {
  145. if(string.IsNullOrEmpty(this.httpIPPort))
  146. {
  147. this.httpIPPort = $"http://*:{this.OuterPort}/";
  148. }
  149. return this.httpIPPort;
  150. }
  151. }
  152. public override void BeginInit()
  153. {
  154. }
  155. public override void EndInit()
  156. {
  157. this.Type = EnumHelper.FromString<SceneType>(this.SceneType);
  158. InstanceIdStruct instanceIdStruct = new InstanceIdStruct(this.Process, (uint) this.Id);
  159. this.InstanceId = instanceIdStruct.ToLong();
  160. }
  161. }
  162. }