/// <summary>Convert ground mission data to train mission data.</summary> /// <param name="inputData">Information describing the input.</param> /// <param name="outputDelay">[out] The output delay.</param> /// <param name="outputWeather">[out] The output weather.</param> public static void ConvertGroundMissionDataToTrainMissionData(RealTimeInformationType inputData, out Train.RealTime.DelayType outputDelay, out Train.RealTime.WeatherType outputWeather) { outputDelay = null; outputWeather = null; if (inputData != null) { if (inputData.MissionDelay != null) { TimeSpan age = DateTime.Now - inputData.MissionDelay.UpdateDate; outputDelay = new Train.RealTime.DelayType() { Age = (uint)age.TotalSeconds, DelayValue = inputData.MissionDelay.Delay, DelayReason = inputData.MissionDelay.DelayReason, DelayReasonCode = inputData.MissionDelay.DelayReasonCode, }; } if (inputData.MissionWeather != null) { TimeSpan age = DateTime.Now - inputData.MissionWeather.UpdateDate; outputWeather = new Train.RealTime.WeatherType() { Age = (uint)age.TotalSeconds, WeatherCondition = inputData.MissionWeather.WeatherCondition, WeatherConditionCode = inputData.MissionWeather.WeatherConditionCode, TemperatureInCentigrade = inputData.MissionWeather.TemperatureInCentigrade, TemperatureInFahrenheit = inputData.MissionWeather.TemperatureInFahrenheit, Humidity = inputData.MissionWeather.Humidity }; } } }
/// <summary>Process the mission data sending.</summary> /// <param name="elementId">Identifier for the element.</param> /// <param name="missionCode">The mission code.</param> private static void ProcessMissionDataSending(string elementId, string missionCode) { ServiceInfo serviceInfo = null; T2GManagerErrorEnum t2gResult = _t2gManager.GetAvailableServiceData(elementId, (int)eServiceID.eSrvSIF_RealTimeServer, out serviceInfo); if (t2gResult == T2GManagerErrorEnum.eSuccess) { string endpoint = "http://" + serviceInfo.ServiceIPAddress + ":" + serviceInfo.ServicePortNumber; try { // Call RealTime train service and send the request. using (Train.RealTime.RealTimeTrainServiceClient lTrainClient = new Train.RealTime.RealTimeTrainServiceClient("RealTimeTrainEndpoint", endpoint)) { try { Train.RealTime.DelayType rtinfoDelay = null; Train.RealTime.WeatherType rtinfoWeather = null; RealTimeUtils.ConvertGroundMissionDataToTrainMissionData( _rtpisDataStore.GetMissionRealTimeInformation(missionCode), out rtinfoDelay, out rtinfoWeather); Train.RealTime.SetMissionRealTimeRequest request = new Train.RealTime.SetMissionRealTimeRequest( missionCode, rtinfoDelay != null ? Train.RealTime.ActionTypeEnum.Set : Train.RealTime.ActionTypeEnum.Delete, rtinfoDelay, rtinfoWeather != null ? Train.RealTime.ActionTypeEnum.Set : Train.RealTime.ActionTypeEnum.Delete, rtinfoWeather); Train.RealTime.SetMissionRealTimeResponse response = ((Train.RealTime.IRealTimeTrainService)lTrainClient).SetMissionRealTime(request); ProcessCommandResultList(elementId, missionCode, response.ResultList); } catch (Exception ex) { LogManager.WriteLog(TraceType.EXCEPTION, string.Format(CultureInfo.CurrentCulture, Logs.ERROR_FAILED_SEND_REQUEST_TO_EMBEDDED, elementId), "PIS.Ground.RealTime.RealTimeService.ProcessMissionDataSending", ex, EventIdEnum.RealTime); } finally { if (lTrainClient.State == CommunicationState.Faulted) { lTrainClient.Abort(); } } } } catch (Exception ex) { LogManager.WriteLog(TraceType.EXCEPTION, string.Format(CultureInfo.CurrentCulture, Logs.ERROR_FAILED_SEND_REQUEST_TO_EMBEDDED, elementId), "PIS.Ground.RealTime.RealTimeService.ProcessMissionDataSending", ex, EventIdEnum.RealTime); } } else if (t2gResult == T2GManagerErrorEnum.eElementNotFound) { LogManager.WriteLog(TraceType.WARNING, string.Format(CultureInfo.CurrentCulture, Logs.ERROR_GET_SERVICE_DATA_FOR_ELEMENT, elementId, t2gResult), "PIS.Ground.RealTime.RealTimeService.ProcessMissionDataSending", null, EventIdEnum.RealTime); } else if (LogManager.IsTraceActive(TraceType.DEBUG)) { LogManager.WriteLog(TraceType.DEBUG, string.Format(CultureInfo.CurrentCulture, Logs.DEBUG_GET_SERVICE_DATA_FOR_ELEMENT, elementId, t2gResult), "PIS.Ground.RealTime.RealTimeService.ProcessMissionDataSending", null, EventIdEnum.RealTime); } }