ServerStartEventHandler.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. using Cysharp.Threading.Tasks;
  2. using KYFramework;
  3. using Model;
  4. using MongoDB.Bson;
  5. using Newtonsoft.Json;
  6. using SimulationServer.Utils;
  7. using SimulationSingleServer.Utils;
  8. using Define = SimulationServer.Utils.Define;
  9. namespace SimulationServer;
  10. [Event]
  11. public class ServerStartEventHandler : AEvent<ServerStart>
  12. {
  13. protected override UniTask Run(ServerStart a)
  14. {
  15. Log.Info("读取配置文件!");
  16. var taskSys = Game.Scene.GetComponent<TaskComponent>();
  17. HttpInterface.serverIp = File.ReadAllText("dbIp.txt");
  18. SimulationCommon.Util.serverIp = HttpInterface.serverIp;
  19. // 读取任务配置文件
  20. string ec_path = "Missions/editor_config.json";
  21. string tc_path = "Missions/task_config.json";
  22. if (!File.Exists(ec_path))
  23. {
  24. Log.Error("editor_config.json文件不存在!");
  25. return UniTask.CompletedTask;
  26. }
  27. if (!File.Exists(tc_path))
  28. {
  29. Log.Error("task_config.json文件不存在!");
  30. return UniTask.CompletedTask;
  31. }
  32. string ec_str = File.ReadAllText("Missions/editor_config.json");
  33. string tc_str = File.ReadAllText("Missions/task_config.json");
  34. EditorConfig? editorConfig = JsonConvert.DeserializeObject<EditorConfig>(ec_str);
  35. TaskConfig? taskConfig = JsonConvert.DeserializeObject<TaskConfig>(tc_str);
  36. if(editorConfig == null || taskConfig == null)
  37. {
  38. Log.Error("配置文件解析失败!");
  39. return UniTask.CompletedTask;
  40. }
  41. //Weather weather = Util.GetWeather("内蒙古", "根河", DateTime.Now.ToString("2024-05-10"));
  42. TaskComponent.Weather = new Weather();
  43. var temp = TaskComponent.Weather.day_temp.Replace("°C", "");
  44. Define.TEMPERATURE = double.Parse(temp);
  45. var wind_temp = TaskComponent.Weather.day_wind_comp.Replace("级", "").Split('-');
  46. Define.WIND = double.Parse(wind_temp[0]);
  47. int index = 1;
  48. foreach (MHTaskConfig mHTaskConfig in taskConfig.mHTaskConfigs)
  49. {
  50. MHRescueMission mission = ComponentFactory.Create<MHRescueMission>();
  51. mission.ExecutionContext = mHTaskConfig.RunTimes;
  52. mission.AddComponent<TotalTaskPerformanceComponent>();
  53. mission.AddComponent<TotalEconomicalComponent>();
  54. mission.AddComponent<EquipmentComponent>();
  55. taskSys.MHRescueMissions.Add(mission);
  56. mission.MissionId = $"灭火任务 {mHTaskConfig.TotalMHId}";
  57. Log.Info($"创建任务 : {mHTaskConfig.TotalMHId}");
  58. mission.slope = Util.GetSlope(editorConfig.firePoints[mHTaskConfig.FirePointId - 1].FirePointLongitude,
  59. editorConfig.firePoints[mHTaskConfig.FirePointId - 1].FirePointLatitude, 30);
  60. FireGround fireGround = ComponentFactory.Create<FireGround>();
  61. mission.FireGround = fireGround;
  62. mission.InitArea = editorConfig.firePoints[mHTaskConfig.FirePointId - 1].InitialArea;
  63. fireGround.FirePoint = new DVector { Latitude = editorConfig.firePoints[mHTaskConfig.FirePointId - 1].FirePointLatitude,
  64. Longitude = editorConfig.firePoints[mHTaskConfig.FirePointId - 1].FirePointLongitude,Altitude = editorConfig.firePoints[mHTaskConfig.FirePointId - 1].FirePointHeight};
  65. foreach (MHTask mhTask in mHTaskConfig.mHTask)
  66. {
  67. Log.Info($"创建灭火任务 : {mhTask.missionInformation.MissionName}");
  68. if(mhTask.missionInformation.AircraftInfos == null) continue;
  69. for (int i = 0; i < mhTask.missionInformation.AircraftInfos.Length; i++)
  70. {
  71. FlightPlanEditor? flightPlanEditor = new FlightPlanEditor();
  72. flightPlanEditor.aircraftparameter = editorConfig.aircraftParameters.Find( a => a.Id == mhTask.missionInformation.AircraftId[i]);
  73. flightPlanEditor.firepoint = new FirePoint[1];
  74. flightPlanEditor.firepoint[0] = editorConfig.firePoints[mHTaskConfig.FirePointId - 1];
  75. flightPlanEditor.missionpoint = mhTask.MissionPoints[0];
  76. flightPlanEditor.originbase = editorConfig.bases.Find(b => b.BaseId == flightPlanEditor.aircraftparameter.AirportId);
  77. flightPlanEditor.cityweather = editorConfig.cityWeather;
  78. AircraftMH aircraft = ComponentFactory.Create<AircraftMH, FlightPlanEditor>( flightPlanEditor);
  79. aircraft.Name = mhTask.missionInformation.AircraftInfos[i];
  80. aircraft.AircraftId = mhTask.missionInformation.AircraftId[i];
  81. aircraft.NextMissionId = mhTask.NextTaskId;
  82. aircraft.fireGround = fireGround;
  83. aircraft.mhRescueMission = mission;
  84. aircraft.AircraftIndex = index.ToString();
  85. mission.aircrafts.Add(aircraft);
  86. aircraft.Airport = flightPlanEditor.originbase.BaseName;
  87. aircraft.TaskName = mhTask.missionInformation.MissionName;
  88. mission.End += aircraft.End;
  89. aircraft.AddComponent<StaticCapacityComponent>();
  90. aircraft.AddComponent<TaskPerformanceComponent>();
  91. aircraft.AddComponent<EconomicalComponent>();
  92. aircraft.TaskReadyTime = mhTask.missionInformation.TakeoffPreparationTime;
  93. Log.Info($"创建机型 : {flightPlanEditor.aircraftparameter.AircraftID}");
  94. index++;
  95. }
  96. }
  97. foreach (DMMHTask dmmhTask in mHTaskConfig.dMMHTask)
  98. {
  99. Log.Info($"创建地面灭火任务 : {dmmhTask.missionInformation.MissionName}");
  100. if(dmmhTask.missionInformation.AircraftInfos == null) continue;
  101. for (int i = 0; i < dmmhTask.missionInformation.AircraftInfos.Length; i++)
  102. {
  103. FlightPlanEditor? flightPlanEditor = new FlightPlanEditor();
  104. flightPlanEditor.aircraftparameter = editorConfig.aircraftParameters.Find( a => a.Id == dmmhTask.missionInformation.AircraftId[i]);
  105. flightPlanEditor.firepoint = new FirePoint[1];
  106. flightPlanEditor.firepoint[0] = editorConfig.firePoints[mHTaskConfig.FirePointId - 1];
  107. flightPlanEditor.missionpoint = dmmhTask.MissionPoints[0];
  108. flightPlanEditor.originbase = editorConfig.bases.Find(b => b.BaseId == flightPlanEditor.aircraftparameter.AirportId);
  109. flightPlanEditor.cityweather = editorConfig.cityWeather;
  110. AircraftMHWithPersion aircraftWithPerson = ComponentFactory.Create<AircraftMHWithPersion, FlightPlanEditor>( flightPlanEditor);
  111. mission.End += aircraftWithPerson.End;
  112. aircraftWithPerson.Name = dmmhTask.missionInformation.AircraftInfos[i];
  113. aircraftWithPerson.fireGround = fireGround;
  114. aircraftWithPerson.mhRescueMission = mission;
  115. aircraftWithPerson.AircraftIndex = index.ToString();
  116. aircraftWithPerson.GroundPersonnel = (int)dmmhTask.GroundPersonnel;
  117. aircraftWithPerson.LandingPersonnel = (int)dmmhTask.LandingPersonnel;
  118. aircraftWithPerson.NextMissionId = dmmhTask.NextTaskId;
  119. aircraftWithPerson.TaskName = dmmhTask.missionInformation.MissionName;
  120. aircraftWithPerson.TaskReadyTime = dmmhTask.missionInformation.TakeoffPreparationTime;
  121. aircraftWithPerson.AircraftId = dmmhTask.missionInformation.AircraftId[i];
  122. mission.aircrafts.Add(aircraftWithPerson);
  123. Log.Info($"创建机型 : {flightPlanEditor.aircraftparameter.AircraftID}");
  124. index++;
  125. }
  126. }
  127. foreach (SHJTask shjTask in mHTaskConfig.sHJTask)
  128. {
  129. Log.Info($"创建索滑降任务 : {shjTask.missionInformation.MissionName}");
  130. if(shjTask.missionInformation.AircraftInfos == null) continue;
  131. for (int i = 0; i < shjTask.missionInformation.AircraftInfos.Length; i++)
  132. {
  133. FlightPlanEditor? flightPlanEditor = new FlightPlanEditor();
  134. flightPlanEditor.aircraftparameter = editorConfig.aircraftParameters.Find(a =>
  135. a.Id == shjTask.missionInformation.AircraftId[i]);
  136. flightPlanEditor.firepoint = new FirePoint[1];
  137. flightPlanEditor.firepoint[0] = editorConfig.firePoints[mHTaskConfig.FirePointId - 1];
  138. flightPlanEditor.missionpoint = shjTask.MissionPoints[0];
  139. flightPlanEditor.originbase =
  140. editorConfig.bases.Find(b => b.BaseId == flightPlanEditor.aircraftparameter.AirportId);
  141. flightPlanEditor.cityweather = editorConfig.cityWeather;
  142. AircraftSHJ aircraftSHJ = ComponentFactory.Create<AircraftSHJ, FlightPlanEditor,SHJTask>( flightPlanEditor, shjTask);
  143. mission.End += aircraftSHJ.End;
  144. aircraftSHJ.AircraftIndex = index.ToString();
  145. mission.aircrafts.Add(aircraftSHJ);
  146. Log.Info($"创建机型 : {flightPlanEditor.aircraftparameter.AircraftID}");
  147. index++;
  148. }
  149. }
  150. }
  151. foreach (ZCTask zcTask in taskConfig.zCTask)
  152. {
  153. Log.Info($"创建侦察任务 : {zcTask.missionInformation.MissionName}");
  154. ZCRescueMission mission = ComponentFactory.Create<ZCRescueMission>();
  155. taskSys.ZCRescueMissions.Add(mission);
  156. mission.MissionId = $"侦擦任务 {zcTask.missionInformation.MissionName}";
  157. FireGround fireGround = ComponentFactory.Create<FireGround>();
  158. fireGround.countArea.burnarea = editorConfig.firePoints[zcTask.FirePointId - 1].InitialArea;
  159. fireGround.FirePoint = new DVector
  160. {
  161. Latitude = editorConfig.firePoints[zcTask.FirePointId - 1].FirePointLatitude,
  162. Longitude = editorConfig.firePoints[zcTask.FirePointId - 1].FirePointLongitude,
  163. Altitude = editorConfig.firePoints[zcTask.FirePointId - 1].FirePointHeight
  164. };
  165. mission.InitArea = editorConfig.firePoints[zcTask.FirePointId - 1].InitialArea;
  166. if(zcTask.missionInformation.AircraftInfos == null) continue;
  167. for (int i = 0; i < zcTask.missionInformation.AircraftInfos.Length; i++)
  168. {
  169. FlightPlanEditor? flightPlanEditor = new FlightPlanEditor();
  170. flightPlanEditor.aircraftparameter =
  171. editorConfig.aircraftParameters.Find(
  172. a => a.AircraftID == zcTask.missionInformation.AircraftInfos[i]);
  173. flightPlanEditor.firepoint = new FirePoint[1];
  174. flightPlanEditor.firepoint[0] = editorConfig.firePoints[zcTask.FirePointId - 1];
  175. flightPlanEditor.missionpoint = zcTask.MissionPoints[0];
  176. flightPlanEditor.originbase =
  177. editorConfig.bases.Find(b => b.BaseId == flightPlanEditor.aircraftparameter.AirportId);
  178. flightPlanEditor.cityweather = editorConfig.cityWeather;
  179. AircraftZC aircraft = ComponentFactory.Create<AircraftZC, FlightPlanEditor,ZCTask>( flightPlanEditor, zcTask);
  180. //aircraft.Name = zcTask.missionInformation.AircraftInfos[i];
  181. //aircraft.NextMissionId = zcTask.NextTaskId;
  182. aircraft.AircraftId = zcTask.missionInformation.AircraftId[i];
  183. aircraft.TaskReadyTime = zcTask.missionInformation.TakeoffPreparationTime;
  184. aircraft.AddComponent<StaticCapacityComponent>();
  185. aircraft.AddComponent<TaskPerformanceComponent>();
  186. aircraft.AddComponent<EconomicalComponent>();
  187. Log.Info($"创建机型 : {flightPlanEditor.aircraftparameter.AircraftID}");
  188. mission.AircraftZCs.Add(aircraft);
  189. }
  190. }
  191. foreach (XHTask xhTask in taskConfig.xHTask)
  192. {
  193. Log.Info($"创建巡护任务 : {xhTask.missionInformation.MissionName}");
  194. XHRescueMission mission = ComponentFactory.Create<XHRescueMission>();
  195. mission.AddComponent<XHEconomicalComponent>();
  196. mission.AddComponent<XHTotalTaskPerformanceComponent>();
  197. mission.AddComponent<EquipmentComponent>();
  198. mission.MissionId = $"巡护任务 {xhTask.missionInformation.MissionId}";
  199. taskSys.XHRescueMissions.Add(mission);
  200. FireGround fireGround = ComponentFactory.Create<FireGround>();
  201. mission.FireGround = fireGround;
  202. fireGround.FirePoint = new DVector
  203. {
  204. Latitude = editorConfig.firePoints[xhTask.FirePointId - 1].FirePointLatitude,
  205. Longitude = editorConfig.firePoints[xhTask.FirePointId - 1].FirePointLongitude,
  206. Altitude = editorConfig.firePoints[xhTask.FirePointId - 1].FirePointHeight
  207. };
  208. if(xhTask.missionInformation.AircraftInfos == null) continue;
  209. for (int i = 0; i < xhTask.missionInformation.AircraftInfos.Length; i++)
  210. {
  211. FlightPlanEditor? flightPlanEditor = new FlightPlanEditor();
  212. flightPlanEditor.aircraftparameter = editorConfig.aircraftParameters.Find(a =>
  213. a.Id == xhTask.missionInformation.AircraftId[i]);
  214. flightPlanEditor.firepoint = new FirePoint[1];
  215. flightPlanEditor.firepoint[0] = editorConfig.firePoints[xhTask.FirePointId - 1];
  216. flightPlanEditor.airroute = xhTask.airroute;
  217. //flightPlanEditor.missionpoint = xhTask.MissionPoints[0];
  218. flightPlanEditor.originbase =
  219. editorConfig.bases.Find(b => b.BaseId == flightPlanEditor.aircraftparameter.AirportId);
  220. flightPlanEditor.cityweather = editorConfig.cityWeather;
  221. AircraftXH aircraft = ComponentFactory.Create<AircraftXH, FlightPlanEditor>( flightPlanEditor);
  222. aircraft.Name = xhTask.missionInformation.AircraftInfos[i];
  223. aircraft.AircraftId = xhTask.missionInformation.AircraftId[i];
  224. aircraft.TaskReadyTime = xhTask.missionInformation.TakeoffPreparationTime;
  225. //aircraft.NextMissionId = zcTask.NextTaskId;
  226. mission.AircraftXHs.Add(aircraft);
  227. mission.End += aircraft.End;
  228. aircraft.AddComponent<XHStaticCapacityComponent>();
  229. aircraft.AddComponent<XHEconomicalComponent>();
  230. Log.Info($"创建机型 : {flightPlanEditor.aircraftparameter.AircraftID}");
  231. }
  232. }
  233. taskSys.Start();
  234. return UniTask.CompletedTask;
  235. }
  236. }