/// <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
                    };
                }
            }
        }
Beispiel #2
0
        /// <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);
            }
        }