コード例 #1
0
ファイル: T2GManager.cs プロジェクト: aioliaaiolos/PISGround
        /// <summary>
        /// Search AvailableElementData By TargetAddress (By Element, MissionOperatorCode, or MissionId)
        /// </summary>
        /// <param name="targetAddress">Target address.</param>
        /// <param name="lstAvailableElementData">[out] Information describing the list available element.</param>
        /// <returns>List of AvailableElementData matching TargetAddress criteria.</returns>
        public T2GManagerErrorEnum GetAvailableElementDataByTargetAddress(TargetAddressType targetAddress, out ElementList <AvailableElementData> lstAvailableElementData)
        {
            T2GManagerErrorEnum lReturn = T2GManagerErrorEnum.eFailed;

            lstAvailableElementData = new ElementList <AvailableElementData>();

            if (targetAddress != null && !string.IsNullOrEmpty(targetAddress.Id))
            {
                // Resolve target elements
                switch (targetAddress.Type)
                {
                case AddressTypeEnum.Element:
                    AvailableElementData element = new AvailableElementData();
                    lReturn = GetAvailableElementDataByElementNumber(targetAddress.Id, out element);
                    if (lReturn == T2GManagerErrorEnum.eSuccess)
                    {
                        lstAvailableElementData.Add(element);
                    }
                    break;

                case AddressTypeEnum.MissionOperatorCode:
                    lReturn = GetAvailableElementDataListByMissionOperatorCode(targetAddress.Id, out lstAvailableElementData);
                    break;

                case AddressTypeEnum.MissionCode:
                    lReturn = GetAvailableElementDataListByMissionCode(targetAddress.Id, out lstAvailableElementData);
                    break;
                }
            }

            return(lReturn);
        }
コード例 #2
0
        /// <summary>
        /// This function allows the GroundApp to request from the ground PIS the list of available
        /// elements. This list includes also missions that are running for each element, and the
        /// versions of the LMT and PIS Base data packages.
        /// </summary>
        /// <param name="sessionId">Identifier for the session.</param>
        /// <returns>
        /// The code “request accepted” when the command is valid and the list of elements, or and error
        /// code when the command is rejected.
        /// </returns>
        RealTimeAvailableElementListResult IRealTimeService.GetAvailableElementList(Guid sessionId)
        {
            var result = new RealTimeAvailableElementListResult();

            result.ResultCode  = RealTimeServiceErrorEnum.ElementListNotAvailable;
            result.ElementList = null;

            if (_sessionManager.IsSessionValid(sessionId))
            {
                T2GManagerErrorEnum rqstResult = _t2gManager.GetAvailableElementDataList(out result.ElementList);

                if (rqstResult == T2GManagerErrorEnum.eSuccess)
                {
                    result.ResultCode = RealTimeServiceErrorEnum.RequestAccepted;
                }
                else
                {
                    result.ResultCode = RealTimeServiceErrorEnum.ElementListNotAvailable;
                }
            }
            else
            {
                result.ResultCode = RealTimeServiceErrorEnum.ErrorInvalidSessionId;
            }

            return(result);
        }
コード例 #3
0
ファイル: T2GManager.cs プロジェクト: aioliaaiolos/PISGround
        /// <summary>Search AvailableElementData By MissionOperatorCode.</summary>
        /// <param name="missionOperatorCode">Mission Operator code.</param>
        /// <param name="elementDataList">[out] Information describing the list available element.</param>
        /// <returns>ElementList of AvailableElementData.</returns>
        public T2GManagerErrorEnum GetAvailableElementDataListByMissionOperatorCode(string missionOperatorCode, out ElementList <AvailableElementData> elementDataList)
        {
            if (LogManager.IsTraceActive(TraceType.INFO))
            {
                LogManager.WriteLog(TraceType.INFO, "GetAvailableElementDataListByMissionOperatorCode called for mission operator code: '" + missionOperatorCode ?? string.Empty + "'.", "PIS.Ground.Core.T2G.T2GManager.GetAvailableElementDataByElementNumber", null, EventIdEnum.GroundCore);
            }

            elementDataList = new ElementList <AvailableElementData>();            // always return an object

            T2GManagerErrorEnum result = T2GManagerErrorEnum.eFailed;

            if (T2GServerConnectionStatus)
            {
                elementDataList = _localDataStorage.GetAvailableElementDataListByMissionOperatorCode(missionOperatorCode);

                if (elementDataList.Count > 0)
                {
                    result = T2GManagerErrorEnum.eSuccess;
                }
                else
                {
                    result = T2GManagerErrorEnum.eElementNotFound;
                }
            }
            else
            {
                result = T2GManagerErrorEnum.eT2GServerOffline;
            }

            return(result);
        }
コード例 #4
0
ファイル: T2GManager.cs プロジェクト: aioliaaiolos/PISGround
        /// <summary>Search AvailableElementData By ElementNumber.</summary>
        /// <param name="elementNumber">element number.</param>
        /// <param name="objAvailableElementData">[out] Information describing the object available element.</param>
        /// <returns>The success of the operation. Possible values are:
        /// <list type="table">
        /// <listheader><term>Error code</term><description>Description</description></listheader>
        /// <item><term>T2GManagerErrorEnum.eSuccess</term><description>Queryed element found.</description></item>
        /// <item><term>T2GManagerErrorEnum.eElementNotFound</term><description>Queried element is unknown.</description></item>
        /// <item><term>T2GManagerErrorEnum.eT2GServerOffline</term><description>T2G services are down.</description></item>
        /// </list>
        /// </returns>
        public T2GManagerErrorEnum GetAvailableElementDataByElementNumber(string elementNumber, out AvailableElementData objAvailableElementData)
        {
            if (LogManager.IsTraceActive(TraceType.INFO))
            {
                LogManager.WriteLog(TraceType.INFO, "GetAvailableElementDataByElementNumber called for element '" + elementNumber ?? string.Empty + "'.", "PIS.Ground.Core.T2G.T2GManager.GetAvailableElementDataByElementNumber", null, EventIdEnum.GroundCore);
            }


            T2GManagerErrorEnum result = T2GManagerErrorEnum.eFailed;

            if (T2GServerConnectionStatus)
            {
                AvailableElementData elementData = _localDataStorage.GetAvailableElementDataByElementNumber(elementNumber);

                if (elementData != null)
                {
                    objAvailableElementData = elementData;                     // copy reference

                    result = T2GManagerErrorEnum.eSuccess;
                }
                else
                {
                    objAvailableElementData = new AvailableElementData(); // always return an object
                    result = T2GManagerErrorEnum.eElementNotFound;
                }
            }
            else
            {
                objAvailableElementData = new AvailableElementData(); // always return an object
                result = T2GManagerErrorEnum.eT2GServerOffline;
            }

            return(result);
        }
コード例 #5
0
ファイル: T2GManager.cs プロジェクト: aioliaaiolos/PISGround
        /// <summary>Verify if a system is online or not.</summary>
        /// <param name="elementNumber">The system identifier to query.</param>
        /// <param name="IsOnline">[out] Online status on the train. In case of error, value is forced to false.</param>
        /// <returns>The success of the operation. Possible values are:
        /// <list type="table">
        /// <listheader><term>Error code</term><description>Description</description></listheader>
        /// <item><term>T2GManagerErrorEnum.eSuccess</term><description>Service retrieved successfully and it is available</description></item>
        /// <item><term>T2GManagerErrorEnum.eElementNotFound</term><description>Queried system is unknown.</description></item>
        /// <item><term>T2GManagerErrorEnum.eT2GServerOffline</term><description>T2G services are down.</description></item>
        /// </list>
        /// </returns>
        public T2GManagerErrorEnum IsElementOnline(string elementNumber, out bool isOnline)
        {
            T2GManagerErrorEnum lReturn = T2GManagerErrorEnum.eFailed;

            isOnline = false;

            if (T2GServerConnectionStatus)
            {
                // Get connection status of element first to improve speed when system is online.
                // Then, check if the element exist.
                isOnline = _localDataStorage.IsElementOnline(elementNumber);
                if (isOnline || _localDataStorage.ElementExists(elementNumber))
                {
                    lReturn = T2GManagerErrorEnum.eSuccess;
                }
                else
                {
                    lReturn = T2GManagerErrorEnum.eElementNotFound;
                }
            }
            else
            {
                lReturn = T2GManagerErrorEnum.eT2GServerOffline;
            }

            return(lReturn);
        }
コード例 #6
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);
            }
        }
コード例 #7
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public InfotainmentJournalingElementListResponse GetAvailableElementList(Guid sessionId)
        {
            InfotainmentJournalingElementListResponse result = new InfotainmentJournalingElementListResponse();

            result.ResultCode = ResultCodeEnum.InternalError;

            if (_sessionManager.IsSessionValid(sessionId))
            {
                T2GManagerErrorEnum lResult = _t2gManager.GetAvailableElementDataList(out result.ElementList);

                if (lResult == T2GManagerErrorEnum.eSuccess)
                {
                    result.ResultCode = ResultCodeEnum.RequestAccepted;
                }
                else
                {
                    result.ResultCode = ResultCodeEnum.ElementListNotAvailable;
                }
            }
            else
            {
                result.ResultCode = ResultCodeEnum.InvalidSessionId;
            }

            return(result);
        }
コード例 #8
0
        private static void SendStartStreamingCommandToProperStatusElements(string url)
        {
            try
            {
                // Get the list of all currently available trains
                ElementList <AvailableElementData> elements = new ElementList <AvailableElementData>();
                T2GManagerErrorEnum rqstResult = _t2gManager.GetAvailableElementDataList(out elements);

                switch (rqstResult)
                {
                case T2GManagerErrorEnum.eSuccess:
                    // Send notification to all clients
                    LiveVideoControlService.SendNotificationToGroundApp(
                        Guid.Empty,
                        PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlAutomaticMode,
                        url);

                    // Send a start command to each train that is online and in mission
                    foreach (AvailableElementData element in elements)
                    {
                        TargetAddressType target = new TargetAddressType();
                        target.Type = AddressTypeEnum.Element;
                        target.Id   = element.ElementNumber;

                        _dicVideoHistory[target]            = url;
                        _dicVideoHistorySentService[target] = null;

                        if (element.OnlineStatus == true && element.MissionState == MissionStateEnum.MI)
                        {
                            ServiceInfo availableService;
                            if (_t2gManager.GetAvailableServiceData(element.ElementNumber, (int)eServiceID.eSrvSIF_LiveVideoControlServer, out availableService) == T2GManagerErrorEnum.eSuccess)
                            {
                                _dicVideoHistorySentService[target] = availableService;
                            }

                            SendStartStreamingCommand(Guid.Empty, target, url);
                        }
                    }
                    break;

                case T2GManagerErrorEnum.eT2GServerOffline:
                    LogManager.WriteLog(TraceType.ERROR, "T2G Server: Offline",
                                        "PIS.Ground.LiveVideoControl.LiveVideoControlService.ProcessAutomaticMode",
                                        null, EventIdEnum.LiveVideoControl);
                    break;

                default:
                    LogManager.WriteLog(TraceType.ERROR, "Element not found",
                                        "PIS.Ground.LiveVideoControl.LiveVideoControlService.ProcessAutomaticMode", null, EventIdEnum.LiveVideoControl);
                    break;
                }
            }
            catch (System.Exception exception)
            {
                LogManager.WriteLog(TraceType.EXCEPTION, exception.Message,
                                    "PIS.Ground.LiveVideoControl.LiveVideoControlService.ProcessAutomaticMode", exception, EventIdEnum.LiveVideoControl);
            }
        }
コード例 #9
0
        public void GetAvailableElementListNotAvailable()
        {
            ElementList <AvailableElementData> elementList = new ElementList <AvailableElementData>();
            T2GManagerErrorEnum returns = T2GManagerErrorEnum.eElementNotFound;
            Guid sessionId = Guid.NewGuid();

            _sessionManagerMock.Setup(x => x.IsSessionValid(sessionId)).Returns(true);
            _train2groundClientMock.Setup(y => y.GetAvailableElementDataList(out elementList)).Returns(returns);

            MissionServiceElementListResult result = _missionService.GetAvailableElementList(sessionId);

            _train2groundClientMock.Verify(w => w.GetAvailableElementDataList(out elementList), Times.Once());
            Assert.AreEqual(MissionErrorCode.ElementListNotAvailable, result.ResultCode);
        }
コード例 #10
0
        public void GetAvailableElementListRequestAccepted()
        {
            ElementList <AvailableElementData> elementList = new ElementList <AvailableElementData>();
            T2GManagerErrorEnum returns = T2GManagerErrorEnum.eSuccess;

            this._sessionManagerMock.Setup(x => x.IsSessionValid(It.IsAny <Guid>())).Returns(true);
            this._train2groundClientMock.Setup(x => x.GetAvailableElementDataList(out elementList)).Returns(returns);

            MissionAvailableElementListResult result = this._missionService.GetAvailableElementList(Guid.NewGuid());

            this._train2groundClientMock.Verify(w => w.GetAvailableElementDataList(out elementList), Times.Once());

            Assert.AreEqual(MissionServiceErrorCodeEnum.RequestAccepted, result.ResultCode);
        }
コード例 #11
0
        /// <summary>Sends a video streaming status request.</summary>
        /// <param name="requestId">Request ID for the corresponding request.</param>
        private static void SendVideoStreamingStatusRequest(Guid requestId)
        {
            ElementList <AvailableElementData> availableElementData = new ElementList <AvailableElementData>();
            T2GManagerErrorEnum result = _t2gManager.GetAvailableElementDataList(out availableElementData);

            switch (result)
            {
            case T2GManagerErrorEnum.eSuccess:
                foreach (AvailableElementData element in availableElementData)
                {
                    ServiceInfo serviceInfo;
                    result = _t2gManager.GetAvailableServiceData(element.ElementNumber, (int)eServiceID.eSrvSIF_LiveVideoControlServer, out serviceInfo);
                    switch (result)
                    {
                    case T2GManagerErrorEnum.eSuccess:
                        ProcessSendVideoStreamingStatusRequestContext request = new ProcessSendVideoStreamingStatusRequestContext(
                            element.ElementNumber,
                            requestId,
                            serviceInfo);
                        _requestProcessor.AddRequest(request);
                        break;

                    case T2GManagerErrorEnum.eT2GServerOffline:
                        LiveVideoControlService.SendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlT2GServerOffline, string.Empty);
                        break;

                    case T2GManagerErrorEnum.eElementNotFound:
                        LiveVideoControlService.SendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlElementNotFound, element.ElementNumber);
                        break;

                    case T2GManagerErrorEnum.eServiceInfoNotFound:
                        LiveVideoControlService.SendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlServiceNotFound, element.ElementNumber);
                        break;

                    default:
                        break;
                    }
                }

                break;

            case T2GManagerErrorEnum.eT2GServerOffline:
                LiveVideoControlService.SendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlT2GServerOffline, string.Empty);
                break;

            default:
                break;
            }
        }
コード例 #12
0
        public void InitializeMissionNewMissionRequestAccepted()
        {
            AvailableElementData elementData = InitTrainElement();
            Guid requestId = Guid.NewGuid();

            File.Copy(this._dbSourcePath, Path.Combine(this._dbWorkingPath, "file.db"));
            List <string> inputStationList = InitStationList(StationListTypeEnum.VALID_ONLY);

            MissionParams missionParams = InitMissionParams(
                this._sessionId,
                this._newMissionCode,
                this._elementId,
                inputStationList,
                1);

            ServiceInfo serviceInfo = this.InitServiceInfo();

            this._sessionManagerMock.Setup(x => x.IsSessionValid(It.IsAny <Guid>())).Returns(true);
            this._sessionManagerMock.Setup(x => x.GenerateRequestID(It.IsAny <Guid>(), out requestId)).Returns(string.Empty);
            this._train2groundClientMock.Setup(y => y.GetAvailableElementDataByElementNumber(missionParams.ElementId, out elementData)).Returns(T2GManagerErrorEnum.eSuccess);
            this._remoteDataStoreFactoryMock.Setup(z => z.GetRemoteDataStoreInstance()).Returns(new RemoteDataStoreSimulator.RemoteDataStore(this._dbWorkingPath, "3.0.13.0"));

            T2GManagerErrorEnum rslt = T2GManagerErrorEnum.eSuccess;

            this._train2groundClientMock.Setup(x => x.GetAvailableServiceData(
                                                   missionParams.ElementId,
                                                   (int)eServiceID.eSrvSIF_MissionServer,
                                                   out serviceInfo)).Returns(rslt);

            MissionInitializeMissionResult result = this._missionService.InitializeMission(
                missionParams.SessionId,
                missionParams.MissionCode,
                missionParams.ElementId,
                missionParams.StationList,
                missionParams.Timeout);

            Assert.AreEqual(MissionServiceErrorCodeEnum.RequestAccepted, result.ResultCode);
            Assert.AreEqual(result.RequestId, requestId);
            Assert.AreEqual(result.MissionCode, this._newMissionCode);
        }
コード例 #13
0
ファイル: T2GManager.cs プロジェクト: aioliaaiolos/PISGround
        /// <summary>Get the information on a specific service on a specific train. Service shall be available.</summary>
        /// <param name="systemId">The system identifier to retrieve the information.</param>
        /// <param name="serviceId">The service identifier to retrieve information on</param>
        /// <param name="serviceDataResult">[out] Information on the service retrieve. It's never null.</param>
        /// <returns>The success of the operation. Possible values are:
        /// <list type="table">
        /// <listheader><term>Error code</term><description>Description</description></listheader>
        /// <item><term>T2GManagerErrorEnum.eSuccess</term><description>Service retrieved successfully and it is available</description></item>
        /// <item><term>T2GManagerErrorEnum.eServiceInfoNotFound</term><description>Service is unknown or it is not available..</description></item>
        /// <item><term>T2GManagerErrorEnum.eElementNotFound</term><description>Queried system is unknown.</description></item>
        /// <item><term>T2GManagerErrorEnum.eT2GServerOffline</term><description>T2G services are down.</description></item>
        /// </list>
        /// </returns>
        public T2GManagerErrorEnum GetAvailableServiceData(string systemId, int serviceId, out ServiceInfo serviceDataResult)
        {
            T2GManagerErrorEnum lReturn = T2GManagerErrorEnum.eFailed;

            serviceDataResult = null;

            if (T2GServerConnectionStatus)
            {
                // By default, assume that system exist to speed up expected behavior
                ServiceInfo service = _localDataStorage.GetAvailableServiceData(systemId, serviceId);
                if (object.ReferenceEquals(service, null))
                {
                    lReturn = _localDataStorage.ElementExists(systemId) ? T2GManagerErrorEnum.eServiceInfoNotFound : T2GManagerErrorEnum.eElementNotFound;
                }
                else if (service.IsAvailable)
                {
                    serviceDataResult = service; // Copy reference, service info immutable

                    lReturn = T2GManagerErrorEnum.eSuccess;
                }
                else
                {
                    lReturn = T2GManagerErrorEnum.eServiceInfoNotFound;
                }
            }
            else
            {
                lReturn = T2GManagerErrorEnum.eT2GServerOffline;
            }

            if (lReturn != T2GManagerErrorEnum.eSuccess)
            {
                // Always return a valid object.
                serviceDataResult = new ServiceInfo();
            }
            return(lReturn);
        }
コード例 #14
0
        public void CancelMissionRequestAccepted()
        {
            AvailableElementData elementData = null;
            Guid requestId = Guid.NewGuid();

            MissionParams missionParams = InitMissionParams(
                this._sessionId,
                this._existingMissionCode,
                this._elementId,
                null,
                1);

            ServiceInfo serviceInfo = this.InitServiceInfo();

            T2GManagerErrorEnum rslt = T2GManagerErrorEnum.eSuccess;

            this._train2groundClientMock.Setup(x => x.GetAvailableServiceData(
                                                   missionParams.ElementId,
                                                   (int)eServiceID.eSrvSIF_MissionServer,
                                                   out serviceInfo)).Returns(rslt);

            this._sessionManagerMock.Setup(x => x.IsSessionValid(It.IsAny <Guid>())).Returns(true);
            this._sessionManagerMock.Setup(x => x.GenerateRequestID(It.IsAny <Guid>(), out requestId)).Returns(string.Empty);
            this._train2groundClientMock.Setup(y => y.GetAvailableElementDataByElementNumber(missionParams.ElementId, out elementData)).Returns(T2GManagerErrorEnum.eSuccess);
            this._remoteDataStoreFactoryMock.Setup(z => z.GetRemoteDataStoreInstance()).Returns(new RemoteDataStoreSimulator.RemoteDataStore(this._dbWorkingPath, "3.0.13.0"));

            MissionCancelMissionResult result = this._missionService.CancelMission(
                missionParams.SessionId,
                missionParams.MissionCode,
                missionParams.ElementId,
                missionParams.Timeout);

            Assert.AreEqual(MissionServiceErrorCodeEnum.RequestAccepted, result.ResultCode);
            Assert.AreEqual(result.RequestId, requestId);
            Assert.AreEqual(result.MissionCode, this._existingMissionCode);
        }
コード例 #15
0
        /// <summary>Process the station data sending.</summary>
        /// <param name="elementId">Identifier for the element.</param>
        /// <param name="stationCodeList">List of station codes.</param>
        private static void ProcessStationDataSending(string elementId, KeyValuePair <string, List <string> > stationCodeList)
        {
            List <RealTimeStationStatusType> stationDataList = _rtpisDataStore.GetStationRealTimeInformation(stationCodeList.Key, stationCodeList.Value);

            if (stationDataList == null)
            {
                stationDataList = new List <RealTimeStationStatusType>();
            }

            if (stationDataList.Count == 0)
            {
                RealTimeRetrieveStationListResult result = new RealTimeRetrieveStationListResult();
                AvailableElementData elementData         = null;

                T2GManagerErrorEnum t2gTmpResult = _t2gManager.GetAvailableElementDataByElementNumber(elementId, out elementData);

                if (t2gTmpResult == T2GManagerErrorEnum.eSuccess)
                {
                    RealTimeService.GetStationListFromLMTDataBase(stationCodeList.Key, elementId, elementData, ref result);

                    if (result.ResultCode == RealTimeServiceErrorEnum.RequestAccepted)
                    {
                        stationDataList.Capacity = result.StationList.Count;
                        foreach (var station in result.StationList)
                        {
                            stationDataList.Add(new RealTimeStationStatusType()
                            {
                                StationID = station
                            });
                        }
                    }
                    else
                    {
                        LogManager.WriteLog(TraceType.ERROR, string.Format(CultureInfo.CurrentCulture, Logs.ERROR_ACCESSING_STATIONLIST_FOR_ELEMENT, elementId, "GetStationListFromLMTDataBase", result.ResultCode), "PIS.Ground.RealTime.RealTimeService.ProcessStationDataSending", null, EventIdEnum.RealTime);
                    }
                }
                else
                {
                    LogManager.WriteLog(TraceType.ERROR, string.Format(CultureInfo.CurrentCulture, Logs.ERROR_ACCESSING_STATIONLIST_FOR_ELEMENT, elementId, "GetAvailableElementDataByElementNumber", t2gTmpResult), "PIS.Ground.RealTime.RealTimeService.ProcessStationDataSending", null, EventIdEnum.RealTime);
                }
            }

            // Updating the train is important only when the data of at least one station need to be updated.
            if (stationDataList.Count != 0)
            {
                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.ListOfStationDataType stationDataListType = null;

                                RealTimeUtils.ConvertGroundStationDataToTrainStationData(
                                    stationDataList,
                                    out stationDataListType);

                                Train.RealTime.SetStationRealTimeRequest  request  = new Train.RealTime.SetStationRealTimeRequest(stationCodeList.Key, stationDataListType);
                                Train.RealTime.SetStationRealTimeResponse response = ((Train.RealTime.IRealTimeTrainService)lTrainClient).SetStationRealTime(request);

                                ProcessCommandResultList(elementId, stationCodeList.Key, 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.ProcessStationDataSending", 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.ProcessStationDataSending", 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.ProcessStationDataSending", 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.ProcessStationDataSending", null, EventIdEnum.RealTime);
                }
            }
        }
コード例 #16
0
        /// <summary>Transmit request to embedded system.</summary>
        /// <param name="request">The request to send to embedded.</param>
        private static void TransmitRequest(RequestContext request)
        {
            bool requestIsTransmitted = false;

            ServiceInfo serviceInfo;

            // Check if target element is online
            bool elementIsOnline;
            T2GManagerErrorEnum rqstResult = _train2groundManager.IsElementOnline(request.ElementId, out elementIsOnline);

            switch (rqstResult)
            {
            case T2GManagerErrorEnum.eSuccess:
                if (elementIsOnline == true)
                {
                    T2GManagerErrorEnum result = _train2groundManager.GetAvailableServiceData(request.ElementId, (int)eServiceID.eSrvSIF_LiveVideoControlServer, out serviceInfo);
                    switch (result)
                    {
                    case T2GManagerErrorEnum.eSuccess:
                    {
                        string endpoint = "http://" + serviceInfo.ServiceIPAddress + ":" + serviceInfo.ServicePortNumber;
                        try
                        {
                            // Call LiveVideoControl train service
                            using (LiveVideoControlServiceClient trainClient = new LiveVideoControlServiceClient("LiveVideoControlEndpoint", endpoint))
                            {
                                try
                                {
                                    if (request is ProcessStopVideoStreamingCommandRequestContext)
                                    {
                                        RequestProcessor.TransmitStopVideoStreamingCommandRequest(trainClient, request as ProcessStopVideoStreamingCommandRequestContext);
                                    }
                                    else if (request is ProcessStartVideoStreamingCommandRequestContext)
                                    {
                                        RequestProcessor.TransmitStartVideoStreamingCommandRequest(trainClient, request as ProcessStartVideoStreamingCommandRequestContext);
                                    }
                                    else if (request is ProcessSendVideoStreamingStatusRequestContext)
                                    {
                                        RequestProcessor.TransmitSendVideoStreamingStatusRequest(trainClient, request as ProcessSendVideoStreamingStatusRequestContext);
                                    }
                                    else
                                    {
                                        // No other request type supported
                                    }

                                    requestIsTransmitted = true;
                                }
                                catch (Exception ex)
                                {
                                    if (!RequestProcessor.ShouldContinueOnTransmissionError(ex))
                                    {
                                        // Assume transmitted (no reason to retry)
                                        requestIsTransmitted = true;
                                    }
                                }
                                finally
                                {
                                    if (trainClient.State == CommunicationState.Faulted)
                                    {
                                        trainClient.Abort();
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            if (!RequestProcessor.ShouldContinueOnTransmissionError(ex))
                            {
                                // Assume transmitted (no reason to retry)
                                requestIsTransmitted = true;
                            }
                        }
                    }

                    break;

                    case T2GManagerErrorEnum.eT2GServerOffline:
                        RequestProcessor.SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlT2GServerOffline, string.Empty);
                        break;

                    case T2GManagerErrorEnum.eElementNotFound:
                        RequestProcessor.SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlElementNotFound, request.ElementId);
                        break;

                    case T2GManagerErrorEnum.eServiceInfoNotFound:
                        RequestProcessor.SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlServiceNotFound, request.ElementId);
                        break;

                    default:
                        break;
                    }
                }

                break;

            case T2GManagerErrorEnum.eT2GServerOffline:
                RequestProcessor.SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlT2GServerOffline, string.Empty);
                break;

            case T2GManagerErrorEnum.eElementNotFound:
                requestIsTransmitted = true;
                RequestProcessor.SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlElementNotFound, request.ElementId);
                break;

            default:
                break;
            }

            request.TransmissionStatus = requestIsTransmitted;

            if (request.State == RequestState.WaitingRetry && request.TransferAttemptsDone == 1)
            {
                // first attempt failed, send notification
                RequestProcessor.SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlDistributionWaitingToSend, request.ElementId);
            }
        }
コード例 #17
0
        /// <summary>LiveVideoControlService web service method "GetAvailableElementList".</summary>
        /// <param name="sessionId">The session identifier.</param>
        /// <returns>Response <see cref="LiveVideoControlElementListResult"/>.</returns>
        LiveVideoControlElementListResult ILiveVideoControlService.GetAvailableElementList(Guid sessionId)
        {
            LiveVideoControlElementListResult lResult = new LiveVideoControlElementListResult();

            lResult.ResultCode = LiveVideoControlErrorEnum.ElementListNotAvailable;

            if (LiveVideoControlService._sessionManager.IsSessionValid(sessionId))
            {
                // Get the list of all trains
                //
                ElementList <AvailableElementData> lElementList;
                T2GManagerErrorEnum lT2GResult = _t2gManager.GetAvailableElementDataList(out lElementList);

                if (lT2GResult == T2GManagerErrorEnum.eSuccess)
                {
                    var         lLiveVideoServiceElementList = new ElementList <AvailableElementData>();
                    ServiceInfo lServiceInfo;
                    bool        lT2GDisconnection = false;

                    // For each train...
                    //
                    foreach (AvailableElementData lElement in lElementList)
                    {
                        // ...get information related to the live video streaming service
                        //
                        lT2GResult = _t2gManager.GetAvailableServiceData(lElement.ElementNumber,
                                                                         (int)eServiceID.eSrvSIF_LiveVideoControlServer, out lServiceInfo);

                        switch (lT2GResult)
                        {
                        case T2GManagerErrorEnum.eSuccess:

                            // If the streaming service is provided...
                            //
                            if (lServiceInfo.IsAvailable)
                            {
                                // ...add the train to the streaming service elements list
                                lLiveVideoServiceElementList.Add(lElement);
                            }
                            break;

                        case T2GManagerErrorEnum.eT2GServerOffline:
                            lT2GDisconnection = true;
                            break;

                        default:
                            break;
                        }

                        // Since we need T2G to build the list of streaming service elements...
                        if (lT2GDisconnection)
                        {
                            // ...stop wasting time and return immediately
                            lResult.ResultCode = LiveVideoControlErrorEnum.T2GServerOffline;
                            break;
                        }
                    }

                    if (!lT2GDisconnection)
                    {
                        // In case of success, return the list of train(s) that provide video steaming service
                        //
                        lResult.ElementList = lLiveVideoServiceElementList;
                        lResult.ResultCode  = LiveVideoControlErrorEnum.RequestAccepted;
                    }
                    else
                    {
                        lResult.ResultCode = LiveVideoControlErrorEnum.T2GServerOffline;
                    }
                }
                else
                {
                    lResult.ResultCode = LiveVideoControlErrorEnum.ElementListNotAvailable;
                }

                if (false == LiveVideoControlService._statusRequestedSessions.Contains(sessionId))
                {
                    LiveVideoControlService._statusRequestedSessions.Add(sessionId);
                    LiveVideoControlService._delegate(sessionId);
                }
            }
            else
            {
                lResult.ResultCode = LiveVideoControlErrorEnum.InvalidSessionId;
            }

            return(lResult);
        }
コード例 #18
0
        /// <summary>
        /// The function commands the retreival of the station list from an addressee. If a mission code
        /// is provided, only the stations of that mission are returned. By default, all the station list
        /// from the database are returned.
        /// </summary>
        /// <param name="sessionId">Identifier for the session.</param>
        /// <param name="missionCode">The mission code.</param>
        /// <param name="elementId">Identifier for the element.</param>
        /// <returns>
        /// The code “request accepted” when the command is valid and the list of stations for the given
        /// mission code/element id, or and error code when the command is rejected.
        /// </returns>
        RealTimeRetrieveStationListResult IRealTimeService.RetrieveStationList(Guid sessionId, string missionCode, string elementId)
        {
            var result = new RealTimeRetrieveStationListResult();

            result.RequestId   = Guid.Empty;
            result.ResultCode  = RealTimeServiceErrorEnum.ErrorInvalidSessionId;
            result.MissionCode = missionCode;
            result.ElementID   = elementId;
            result.StationList = null;

            if (_sessionManager.IsSessionValid(sessionId))
            {
                string error = _sessionManager.GenerateRequestID(sessionId, out result.RequestId);

                if (string.IsNullOrEmpty(error))
                {
                    AvailableElementData elementData;
                    T2GManagerErrorEnum  rqstResult = _t2gManager.GetAvailableElementDataByElementNumber(elementId, out elementData);

                    switch (rqstResult)
                    {
                    case T2GManagerErrorEnum.eSuccess:
                    {
                        try
                        {
                            GetStationListFromLMTDataBase(missionCode, elementId, elementData, ref result);
                        }
                        catch (TimeoutException)
                        {
                            result.ResultCode = RealTimeServiceErrorEnum.ErrorRemoteDatastoreUnavailable;
                        }
                        catch (CommunicationException)
                        {
                            result.ResultCode = RealTimeServiceErrorEnum.ErrorRemoteDatastoreUnavailable;
                        }
                    }

                    break;

                    case T2GManagerErrorEnum.eT2GServerOffline:
                        result.ResultCode = RealTimeServiceErrorEnum.T2GServerOffline;
                        break;

                    case T2GManagerErrorEnum.eElementNotFound:
                    default:
                        result.ResultCode = RealTimeServiceErrorEnum.ErrorInvalidElementId;
                        break;
                    }
                }
                else
                {
                    result.ResultCode = RealTimeServiceErrorEnum.ErrorRequestIdGeneration;
                }
            }
            else
            {
                result.ResultCode = RealTimeServiceErrorEnum.ErrorInvalidSessionId;
            }

            return(result);
        }
コード例 #19
0
        /// <summary>Sends a start streaming command.</summary>
        /// <param name="sessionId">The session identifier.</param>
        /// <param name="targetAddress">Addressee information.</param>
        /// <param name="url">The streaming URL to be used.</param>
        /// <returns>Response <see cref="LiveVideoControlElementListResult"/>.</returns>
        private static LiveVideoControlResult SendStartStreamingCommand(
            Guid sessionId,
            TargetAddressType targetAddress,
            string url)
        {
            LiveVideoControlResult result = new LiveVideoControlResult();

            result.RequestId  = Guid.Empty;
            result.ResultCode = LiveVideoControlErrorEnum.InternalError;
            Guid   requestId = Guid.Empty;
            string error;

            if (sessionId != Guid.Empty)
            {
                error = _sessionManager.GenerateRequestID(sessionId, out requestId);
            }
            else
            {
                error = _sessionManager.GenerateRequestID(out requestId);
            }

            if (requestId != Guid.Empty)
            {
                ElementList <AvailableElementData> elements;
                T2GManagerErrorEnum rqstResult = _t2gManager.GetAvailableElementDataByTargetAddress(targetAddress, out elements);

                switch (rqstResult)
                {
                case T2GManagerErrorEnum.eSuccess:
                    Guid notificationRequestId        = requestId;
                    List <RequestContext> newRequests = new List <RequestContext>();
                    foreach (AvailableElementData element in elements)
                    {
                        if (_dicVideoHistorySentService.ContainsKey(targetAddress))
                        {
                            ServiceInfo availableService;
                            if (_t2gManager.GetAvailableServiceData(element.ElementNumber, (int)eServiceID.eSrvSIF_LiveVideoControlServer, out availableService) == T2GManagerErrorEnum.eSuccess)
                            {
                                _dicVideoHistorySentService[targetAddress] = availableService;
                            }
                        }

                        LiveVideoControlService.SendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlDistributionProcessing, element.ElementNumber);
                        ProcessStartVideoStreamingCommandRequestContext request = new ProcessStartVideoStreamingCommandRequestContext(
                            element.ElementNumber,
                            requestId,
                            sessionId,
                            url);

                        newRequests.Add(request);
                    }

                    _requestProcessor.AddRequestRange(newRequests);
                    result.RequestId  = requestId;
                    result.ResultCode = LiveVideoControlErrorEnum.RequestAccepted;
                    break;

                case T2GManagerErrorEnum.eT2GServerOffline:
                    LogManager.WriteLog(TraceType.ERROR, "T2G Offline", "PIS.Ground.LiveVideoControl.LiveVideoControlService.SendStartStreamingCommand", null, EventIdEnum.LiveVideoControl);
                    result.ResultCode = LiveVideoControlErrorEnum.T2GServerOffline;
                    break;

                case T2GManagerErrorEnum.eElementNotFound:
                    LogManager.WriteLog(TraceType.ERROR, "Element not found", "PIS.Ground.LiveVideoControl.LiveVideoControlService.SendStartStreamingCommand", null, EventIdEnum.LiveVideoControl);
                    result.ResultCode = LiveVideoControlService.GetInvalidTargetAddressResponse(targetAddress);
                    break;

                default:
                    LogManager.WriteLog(TraceType.ERROR, "Problem looking for an element. T2GClient returned: " + rqstResult.ToString(),
                                        "PIS.Ground.LiveVideoControl.LiveVideoControlService.SendStartStreamingCommand", null, EventIdEnum.LiveVideoControl);
                    result.ResultCode = LiveVideoControlErrorEnum.InternalError;
                    break;
                }
            }
            else
            {
                LogManager.WriteLog(TraceType.ERROR, error, "PIS.Ground.LiveVideoControl.LiveVideoControlService.SendStartStreamingCommand", null, EventIdEnum.LiveVideoControl);
                result.ResultCode = LiveVideoControlErrorEnum.InvalidRequestID;
            }

            return(result);
        }
コード例 #20
0
        private static void TransmitNotifyReportRetrievedRequest(NotifyReportRetrievedRequestContext request)
        {
            bool lTransmitted = false;

            ServiceInfo         serviceInfo;
            T2GManagerErrorEnum lRqstResult = _t2gManager.GetAvailableServiceData(request.ElementId, (int)eServiceID.eSrvSIF_ReportExchangeServer, out serviceInfo);

            switch (lRqstResult)
            {
            case T2GManagerErrorEnum.eSuccess:
                String lEndpoint = "http://" + serviceInfo.ServiceIPAddress + ":" + serviceInfo.ServicePortNumber;

                // Check if target element is online
                bool lIsElementOnline;
                lRqstResult = _t2gManager.IsElementOnline(request.ElementId, out lIsElementOnline);

                switch (lRqstResult)
                {
                case T2GManagerErrorEnum.eSuccess:
                    if (lIsElementOnline)
                    {
                        // Call Report Exchange train service
                        using (ReportExchange.ReportExchangeServiceClient client = new ReportExchange.ReportExchangeServiceClient("ReportExchangeEndpoint", lEndpoint))
                        {
                            try
                            {
                                String requestIdStr = request.RequestId.ToString();

                                // Call onboard train Report Exchange Web service
                                ReportExchange.ResultType result = client.NotifyInfotainmentJournalRetrieved(
                                    ref requestIdStr, request.FolderId);

                                switch (result)
                                {
                                case ReportExchange.ResultType.ServiceInhibited:
                                    SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.InfotainmentDownloadInhibited, request.ElementId);
                                    break;

                                case ReportExchange.ResultType.Failure:
                                    SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.Failed, request.ElementId);
                                    break;

                                case ReportExchange.ResultType.Success:
                                    lTransmitted = true;
                                    break;

                                default:
                                    LogManager.WriteLog(TraceType.ERROR,
                                                        String.Format("Unexpected return value from WebService client: {0}", result),
                                                        "PIS.Ground.Infotainment.Journaling.JournalingService.TransmitGetReportRequest",
                                                        null, EventIdEnum.InfotainmentJournaling);
                                    break;
                                }
                            }
                            catch (Exception ex)
                            {
                                LogManager.WriteLog(TraceType.ERROR,
                                                    String.Format("Unexpected error from WebService client: {0}", ex.Message),
                                                    "PIS.Ground.Infotainment.Journaling.JournalingService.TransmitNotifyReportRetrievedRequest",
                                                    ex, EventIdEnum.InfotainmentJournaling);
                            }
                            finally
                            {
                                if (client.State == CommunicationState.Faulted)
                                {
                                    client.Abort();
                                }
                            }
                        }
                    }
                    break;

                case T2GManagerErrorEnum.eT2GServerOffline:
                    SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.InfotainmentT2GServerOffline, String.Empty);
                    break;

                case T2GManagerErrorEnum.eElementNotFound:
                    SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.InfotainmentDownloadElementNotFound, request.ElementId);
                    break;

                default:
                    LogManager.WriteLog(TraceType.ERROR,
                                        String.Format("T2G method IsElementOnline failed with error code: {0}", lRqstResult),
                                        "PIS.Ground.Infotainment.Journaling.JournalingService.TransmitGetReportRequest",
                                        null, EventIdEnum.InfotainmentJournaling);
                    break;
                }
                break;

            case T2GManagerErrorEnum.eT2GServerOffline:
                SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.InfotainmentT2GServerOffline, String.Empty);
                break;

            case T2GManagerErrorEnum.eElementNotFound:
                SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.InfotainmentDownloadElementNotFound, request.ElementId);
                break;

            case T2GManagerErrorEnum.eServiceInfoNotFound:
                SendNotificationToGroundApp(request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.InfotainmentDownloadServiceNotFound, eServiceID.eSrvSIF_ReportExchangeServer.ToString());
                break;

            default:
                LogManager.WriteLog(TraceType.INFO, "Failed to obtain service data from T2G", "PIS.Ground.Infotainment.Journaling.JournalingService.TransmitGetVersionFileRequest", null, EventIdEnum.InfotainmentJournaling);
                break;
            }

            request.TransmissionStatus = lTransmitted;
        }
コード例 #21
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sessionId"></param>
        /// <param name="targetAddress"></param>
        /// <param name="requestTimeout"></param>
        /// <returns></returns>
        public GetReportResponse GetReport(Guid sessionId, TargetAddressType targetAddress, uint requestTimeout)
        {
            GetReportResponse result = new GetReportResponse();

            result.RequestId  = Guid.Empty;
            result.ResultCode = ResultCodeEnum.InternalError;

            if (requestTimeout <= MAX_REQUEST_TIMEOUT)
            {
                if (_sessionManager.IsSessionValid(sessionId))
                {
                    Guid requestId = Guid.Empty;
                    _sessionManager.GenerateRequestID(sessionId, out requestId);

                    if (requestId != Guid.Empty)                     // TODO requires modification to method GenerateRequestID
                    {
                        ElementList <AvailableElementData> elements;
                        T2GManagerErrorEnum lRqstResult = _t2gManager.GetAvailableElementDataByTargetAddress(targetAddress, out elements);
                        switch (lRqstResult)
                        {
                        case T2GManagerErrorEnum.eSuccess:
                            // Queue to request list
                            foreach (AvailableElementData element in elements)
                            {
                                SendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.InfotainmentDownloadProcessing, element.ElementNumber);

                                GetReportRequestContext request = new GetReportRequestContext(element.ElementNumber, requestId, sessionId, requestTimeout);

                                lock (_lock)
                                {
                                    _newRequests.Add(request);
                                }
                            }

                            // Signal thread and start transmitting
                            _transmitEvent.Set();

                            result.RequestId  = requestId;
                            result.ResultCode = ResultCodeEnum.RequestAccepted;
                            break;

                        case T2GManagerErrorEnum.eT2GServerOffline:
                            result.ResultCode = ResultCodeEnum.T2GServerOffline;
                            break;

                        case T2GManagerErrorEnum.eElementNotFound:
                            switch (targetAddress.Type)
                            {
                            case AddressTypeEnum.Element:
                                result.ResultCode = ResultCodeEnum.UnknownElementId;
                                break;

                            case AddressTypeEnum.MissionCode:
                                result.ResultCode = ResultCodeEnum.UnknownMissionId;
                                break;

                            case AddressTypeEnum.MissionOperatorCode:
                                result.ResultCode = ResultCodeEnum.UnknownMissionId;
                                break;
                            }
                            break;

                        default:
                            break;
                        }
                    }
                    else
                    {
                        result.ResultCode = ResultCodeEnum.InvalidSessionId;
                    }
                }
                else
                {
                    result.ResultCode = ResultCodeEnum.InvalidSessionId;
                }
            }
            else
            {
                result.ResultCode = ResultCodeEnum.InvalidRequestTimeout;
            }

            return(result);
        }
コード例 #22
0
        /// <summary>
        /// LiveVideoControlService Web service method "StopVideoStreamingCommand" that cancels all
        /// predefined and free-text messages at addressee.
        /// </summary>
        /// <param name="sessionId">The session identifier.</param>
        /// <param name="targetAddress">Addressee information.</param>
        /// <returns>Response <see cref="LiveVideoControlResult"/>.</returns>
        LiveVideoControlResult ILiveVideoControlService.StopVideoStreamingCommand(
            Guid sessionId,
            TargetAddressType targetAddress)
        {
            LiveVideoControlResult result = new LiveVideoControlResult();

            result.RequestId  = Guid.Empty;
            result.ResultCode = LiveVideoControlErrorEnum.RequestAccepted;

            _dicVideoHistory.Remove(targetAddress);
            _dicVideoHistorySentService.Remove(targetAddress);

            if (_sessionManager.IsSessionValid(sessionId))
            {
                string automaticModeURL;

                if (GetAutomaticMode(out automaticModeURL) == false)
                {
                    Guid   requestId = Guid.Empty;
                    string error     = _sessionManager.GenerateRequestID(sessionId, out requestId);

                    if (requestId != Guid.Empty)
                    {
                        ElementList <AvailableElementData> elements;
                        T2GManagerErrorEnum rqstResult = _t2gManager.GetAvailableElementDataByTargetAddress(targetAddress, out elements);
                        switch (rqstResult)
                        {
                        case T2GManagerErrorEnum.eSuccess:
                        {
                            List <RequestContext> newRequests = new List <RequestContext>();
                            foreach (AvailableElementData element in elements)
                            {
                                LiveVideoControlService.SendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.LiveVideoControlDistributionProcessing, element.ElementNumber);

                                ProcessStopVideoStreamingCommandRequestContext request = new ProcessStopVideoStreamingCommandRequestContext(
                                    element.ElementNumber,
                                    requestId,
                                    sessionId);

                                newRequests.Add(request);
                            }

                            _requestProcessor.AddRequestRange(newRequests);
                            result.RequestId  = requestId;
                            result.ResultCode = LiveVideoControlErrorEnum.RequestAccepted;
                        }

                        break;

                        case T2GManagerErrorEnum.eT2GServerOffline:
                            result.ResultCode = LiveVideoControlErrorEnum.T2GServerOffline;
                            break;

                        case T2GManagerErrorEnum.eElementNotFound:
                            result.ResultCode = LiveVideoControlService.GetInvalidTargetAddressResponse(targetAddress);
                            break;

                        default:
                            break;
                        }
                    }
                    else
                    {
                        LogManager.WriteLog(TraceType.ERROR, error, "PIS.Ground.LiveVideoControl.LiveVideoControlService.StopVideoStreamingCommand", null, EventIdEnum.LiveVideoControl);
                        result.ResultCode = LiveVideoControlErrorEnum.InvalidRequestID;
                    }
                }
                else
                {
                    result.Url        = automaticModeURL;
                    result.ResultCode = LiveVideoControlErrorEnum.AutomaticModeActivated;
                }
            }
            else
            {
                result.ResultCode = LiveVideoControlErrorEnum.InvalidSessionId;
            }

            return(result);
        }
コード例 #23
0
        /// <summary>Gets baseline files urls.</summary>
        /// <param name="requestId">Identifier for the request.</param>
        /// <param name="elementId">Identifier for the element.</param>
        /// <param name="baselineVersion">The baseline version.</param>
        /// <param name="isIncremental">True if this object is incremental.</param>
        /// <param name="notifyGroundApp">True to notify ground application.</param>
        /// <param name="packagesURLs">[Out] The packages ur ls.</param>
        /// <param name="packagesParams">[Out] Options for controlling the packages.</param>
        /// <returns>True if it succeeds, false if it fails.</returns>
        private bool GetBaselineFilesURLs(
            Guid requestId,
            string elementId,
            string baselineVersion,
            bool isIncremental,
            bool notifyGroundApp,
            out List <string> packagesURLs,
            out List <PackageParams> packagesParams)
        {
            bool result = false;

            packagesParams = new List <PackageParams>();
            packagesURLs   = new List <string>();
            BaselineDefinition baselineDefinition = null;
            List <string>      parametersList     = new List <string>()
            {
                elementId,
                baselineVersion
            };

            using (StringWriter stringWriter = new StringWriter())
            {
                _stringListXmlSerializer.Serialize(stringWriter, parametersList);

                if (!string.IsNullOrEmpty(baselineVersion))
                {
                    try
                    {
                        using (IRemoteDataStoreClient remoteDataStore = _remoteDataStoreFactory.GetRemoteDataStoreInstance())
                        {
                            if (remoteDataStore.checkIfBaselineExists(baselineVersion))
                            {
                                baselineDefinition = DataTypeConversion.fromDataContainerToBaselineDefinition(remoteDataStore.getBaselineDefinition(baselineVersion));
                            }

                            if (baselineDefinition == null)
                            {
                                DataPackageService.sendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionFailedMissingDataPackage, stringWriter.ToString());
                                DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_INVALID_BASELINE_VERSION, baselineVersion);
                                result = false;
                            }
                            else if (remoteDataStore.checkIfDataPackageExists(DataPackageType.PISBASE.ToString(), baselineDefinition.PISBaseDataPackageVersion) == false ||
                                     remoteDataStore.checkIfDataPackageExists(DataPackageType.PISMISSION.ToString(), baselineDefinition.PISMissionDataPackageVersion) == false ||
                                     remoteDataStore.checkIfDataPackageExists(DataPackageType.PISINFOTAINMENT.ToString(), baselineDefinition.PISInfotainmentDataPackageVersion) == false ||
                                     remoteDataStore.checkIfDataPackageExists(DataPackageType.LMT.ToString(), baselineDefinition.LMTDataPackageVersion) == false)
                            {
                                if (notifyGroundApp)
                                {
                                    DataPackageService.sendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionFailedMissingDataPackage, stringWriter.ToString());
                                }

                                DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_INVALID_BASELINE_VERSION, baselineVersion);
                                result = false;
                            }
                            else
                            {
                                AvailableElementData elementData;
                                T2GManagerErrorEnum  requestResult = _trainToGroundManager.GetAvailableElementDataByElementNumber(elementId, out elementData);

                                if (requestResult == T2GManagerErrorEnum.eT2GServerOffline)
                                {
                                    DataPackageService.sendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageT2GServerOffline, string.Empty);
                                    DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_T2G_SERVER_OFFLINE);
                                }
                                else if (requestResult == T2GManagerErrorEnum.eElementNotFound)
                                {
                                    DataPackageService.sendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionUnknowElementId, stringWriter.ToString());
                                    DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_ELEMENT_NOT_FOUND, elementId);
                                }

                                Dictionary <DataPackageType, string> uploadPackagesList = new Dictionary <DataPackageType, string>();
                                BaselineDefinition embeddedBaselineDefinition           = null;

                                if (elementData.PisBaselineData != null &&
                                    !string.IsNullOrEmpty(elementData.PisBaselineData.CurrentVersionOut) &&
                                    elementData.PisBaselineData.CurrentVersionOut != "0.0.0.0")
                                {
                                    if (remoteDataStore.checkIfBaselineExists(elementData.PisBaselineData.CurrentVersionOut))
                                    {
                                        embeddedBaselineDefinition = DataTypeConversion.fromDataContainerToBaselineDefinition(remoteDataStore.getBaselineDefinition(elementData.PisBaselineData.CurrentVersionOut));
                                    }
                                    else
                                    {
                                        string message = string.Format(CultureInfo.CurrentCulture, "Baseline version '{0}' installed on element '{1}' is unknown. Full baseline distribution will be performed.", elementData.PisBaselineData.CurrentVersionOut, elementData.ElementNumber);
                                        DataPackageService.mWriteLog(TraceType.WARNING, System.Reflection.MethodBase.GetCurrentMethod().Name, null, message);
                                    }

                                    if (embeddedBaselineDefinition != null)
                                    {
                                        if (baselineDefinition.PISBaseDataPackageVersion != embeddedBaselineDefinition.PISBaseDataPackageVersion)
                                        {
                                            uploadPackagesList.Add(DataPackageType.PISBASE, baselineDefinition.PISBaseDataPackageVersion);
                                        }

                                        if (baselineDefinition.PISMissionDataPackageVersion != embeddedBaselineDefinition.PISMissionDataPackageVersion)
                                        {
                                            uploadPackagesList.Add(DataPackageType.PISMISSION, baselineDefinition.PISMissionDataPackageVersion);
                                        }

                                        if (baselineDefinition.PISInfotainmentDataPackageVersion != embeddedBaselineDefinition.PISInfotainmentDataPackageVersion)
                                        {
                                            uploadPackagesList.Add(DataPackageType.PISINFOTAINMENT, baselineDefinition.PISInfotainmentDataPackageVersion);
                                        }

                                        if (baselineDefinition.LMTDataPackageVersion != embeddedBaselineDefinition.LMTDataPackageVersion)
                                        {
                                            uploadPackagesList.Add(DataPackageType.LMT, baselineDefinition.LMTDataPackageVersion);
                                        }
                                    }
                                }

                                if (embeddedBaselineDefinition == null)
                                {
                                    uploadPackagesList.Add(DataPackageType.PISBASE, baselineDefinition.PISBaseDataPackageVersion);
                                    uploadPackagesList.Add(DataPackageType.PISMISSION, baselineDefinition.PISMissionDataPackageVersion);
                                    uploadPackagesList.Add(DataPackageType.PISINFOTAINMENT, baselineDefinition.PISInfotainmentDataPackageVersion);
                                    uploadPackagesList.Add(DataPackageType.LMT, baselineDefinition.LMTDataPackageVersion);
                                }

                                if (isIncremental == false || embeddedBaselineDefinition == null)
                                {
                                    foreach (KeyValuePair <DataPackageType, string> lDP in uploadPackagesList)
                                    {
                                        DataPackagesCharacteristics packageCharacteristics = DataTypeConversion.fromDataContainerToDataPackagesCharacteristics(remoteDataStore.getDataPackageCharacteristics(lDP.Key.ToString(), lDP.Value));

                                        packagesURLs.Add(ConfigurationSettings.AppSettings["RemoteDataStoreUrl"] + "/" + packageCharacteristics.DataPackagePath);
                                        packagesParams.Add(new PackageParams(lDP.Key, lDP.Value));
                                    }

                                    result = true;
                                }
                                else
                                {
                                    foreach (KeyValuePair <DataPackageType, string> packageToUpload in uploadPackagesList)
                                    {
                                        string embeddedBaselineVersion = string.Empty;
                                        switch (packageToUpload.Key)
                                        {
                                        case DataPackageType.PISBASE:
                                            embeddedBaselineVersion = embeddedBaselineDefinition.PISBaseDataPackageVersion;
                                            break;

                                        case DataPackageType.PISMISSION:
                                            embeddedBaselineVersion = embeddedBaselineDefinition.PISMissionDataPackageVersion;
                                            break;

                                        case DataPackageType.PISINFOTAINMENT:
                                            embeddedBaselineVersion = embeddedBaselineDefinition.PISInfotainmentDataPackageVersion;
                                            break;

                                        case DataPackageType.LMT:
                                            embeddedBaselineVersion = embeddedBaselineDefinition.LMTDataPackageVersion;
                                            break;

                                        default:
                                            break;
                                        }

                                        bool isEmbPackageOnGround = remoteDataStore.checkIfDataPackageExists(packageToUpload.Key.ToString(), embeddedBaselineVersion);
                                        if (!isEmbPackageOnGround)
                                        {
                                            string message = string.Format(CultureInfo.CurrentCulture, "{0}'s data package version '{1}' associated to baseline '{2}' is unknown. Distribution the element '{3}' will receive a complete update for that data package.", packageToUpload.Key.ToString(), embeddedBaselineVersion, packageToUpload.Value, elementData.ElementNumber);
                                            DataPackageService.mWriteLog(TraceType.WARNING, System.Reflection.MethodBase.GetCurrentMethod().Name, null, message);

                                            DataPackagesCharacteristics packageCharacteristics = DataTypeConversion.fromDataContainerToDataPackagesCharacteristics(remoteDataStore.getDataPackageCharacteristics(packageToUpload.Key.ToString(), packageToUpload.Value));

                                            packagesURLs.Add(ConfigurationSettings.AppSettings["RemoteDataStoreUrl"] + "/" + packageCharacteristics.DataPackagePath);
                                            packagesParams.Add(new PackageParams(packageToUpload.Key, packageToUpload.Value));
                                        }
                                        else
                                        {
                                            // Store the current operational timeout.
                                            TimeSpan oldOperationTimeOut = remoteDataStore.OperationTimeout;
                                            try
                                            {
                                                // Set the operational timeout to 10minutes because the getDiffDataPackageUrl can take a long time (Zip operation)
                                                remoteDataStore.OperationTimeout = TimeSpan.FromMinutes(10);
                                                string differentialPackagePath = remoteDataStore.getDiffDataPackageUrl(requestId, elementId, packageToUpload.Key.ToString(), embeddedBaselineVersion, packageToUpload.Value);
                                                if (null != differentialPackagePath && !string.IsNullOrEmpty(differentialPackagePath))
                                                {
                                                    packagesURLs.Add(ConfigurationSettings.AppSettings["RemoteDataStoreUrl"] + "/" + differentialPackagePath);
                                                    packagesParams.Add(new PackageParams(packageToUpload.Key, packageToUpload.Value));
                                                }
                                            }
                                            finally
                                            {
                                                // restore the operation timeout.
                                                remoteDataStore.OperationTimeout = oldOperationTimeOut;
                                            }
                                        }

                                        result = true;
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, ex, Logs.ERROR_REMOTEDATASTORE_NOT_ACCESSIBLE, baselineVersion);
                        result = false;
                    }
                }
                else
                {
                    result = false;
                }
            }

            return(result);
        }
コード例 #24
0
        /// <summary>Process the distribute request described by request.</summary>
        /// <exception cref="NotSupportedException">Thrown when the requested operation is not supported.</exception>
        /// <param name="request">The request.</param>
        private void ProcessDistributeRequest(IRequestContext request)
        {
            BaselineDistributingRequestContext requestContext = request as BaselineDistributingRequestContext;

            if (requestContext == null)
            {
                throw new ArgumentException(Logs.ERROR_INVALID_BASELINE_DISTRIBUTE_REQUEST_CONTEXT, "request");
            }

            List <string> parametersList = new List <string>()
            {
                requestContext.ElementId,
                requestContext.BaselineVersion
            };

            using (StringWriter stringWriter = new StringWriter())
            {
                _stringListXmlSerializer.Serialize(stringWriter, parametersList);

                if (requestContext.TransferAttemptsDone == 1)
                {
                    DataPackageService.sendNotificationToGroundApp(
                        request.RequestId,
                        PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionPending,
                        stringWriter.ToString());
                }

                if (_trainToGroundManager.IsElementOnlineAndPisBaselineUpToDate(requestContext.ElementId))
                {
                    ServiceInfo serviceInfo;
                    if (T2GManagerErrorEnum.eSuccess == _trainToGroundManager.GetAvailableServiceData(requestContext.ElementId, (int)Core.Common.eServiceID.eSrvSIF_DataPackageServer, out serviceInfo))
                    {
                        // Rebuild the url of the service in case that it has changed since the last invocation.
                        requestContext.Endpoint = "http://" + serviceInfo.ServiceIPAddress + ":" + serviceInfo.ServicePortNumber;
                        try
                        {
                            using (PIS.Ground.DataPackage.DataPackageTrainServiceClient lTrainDataPackageClient = new PIS.Ground.DataPackage.DataPackageTrainServiceClient("DataPackageEndpoint", requestContext.Endpoint))
                            {
                                try
                                {
                                    List <RecipientId> recipients = new List <RecipientId>()
                                    {
                                        new RecipientId()
                                        {
                                            ApplicationId = ConfigurationSettings.AppSettings["ApplicationId"],
                                            SystemId      = requestContext.ElementId,
                                            MissionId     = string.Empty
                                        }
                                    };

                                    DataPackageService.mWriteLog(TraceType.INFO, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.INFO_FUTURE_BASELINE, requestContext.ElementId, requestContext.BaselineVersion);

                                    if (!string.IsNullOrEmpty(requestContext.BaselineVersion))
                                    {
                                        List <PackageParams> packagesParamsList;
                                        List <string>        filesUrlsList;
                                        if (GetBaselineFilesURLs(requestContext.RequestId, requestContext.ElementId, requestContext.BaselineVersion, requestContext.IsIncremental, true, out filesUrlsList, out packagesParamsList))
                                        {
                                            try
                                            {
                                                using (IRemoteDataStoreClient remoteDataStore = _remoteDataStoreFactory.GetRemoteDataStoreInstance())
                                                {
                                                    filesUrlsList.Add(ConfigurationSettings.AppSettings["RemoteDataStoreUrl"]
                                                                      + remoteDataStore.createBaselineFile(
                                                                          requestContext.RequestId,
                                                                          requestContext.ElementId,
                                                                          requestContext.BaselineVersion,
                                                                          requestContext.BaselineActivationDate.ToString(),
                                                                          requestContext.BaselineExpirationDate.ToString()));
                                                }
                                            }
                                            catch (Exception ex)
                                            {
                                                DataPackageService.mWriteLog(TraceType.EXCEPTION, System.Reflection.MethodBase.GetCurrentMethod().Name, ex, Logs.ERROR_REMOTEDATASTORE_FAULTED);
                                            }

                                            if (filesUrlsList.Count > 0)
                                            {
                                                UploadFileDistributionRequest uploadFilesRequestContext = new UploadFileDistributionRequest(
                                                    requestContext.RequestId,
                                                    requestContext.RequestId.ToString(),
                                                    requestContext.DistributionAttributes.transferExpirationDate,
                                                    filesUrlsList,
                                                    requestContext.DistributionAttributes.fileCompression,
                                                    recipients,
                                                    requestContext.DistributionAttributes.transferDate,
                                                    "Distribute baseline for element " + requestContext.ElementId,
                                                    requestContext.DistributionAttributes.TransferMode,
                                                    requestContext.DistributionAttributes.priority,
                                                    new EventHandler <FileDistributionStatusArgs>(DataPackageService.OnFileDistributeNotification),
                                                    new EventHandler <FileDistributionTaskCreatedArgs>(_baselineStatusUpdater.OnFileDistributionTaskCreated));

                                                DataPackageService.sendNotificationToGroundApp(requestContext.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageFutureBaselineDefinition, stringWriter.ToString());

                                                string logMessage = "Distribute baseline for element " + requestContext.ElementId;
                                                logMessage += ". Files to upload : ";
                                                foreach (string file in filesUrlsList)
                                                {
                                                    logMessage += file + ", ";
                                                }

                                                logMessage = logMessage.Substring(0, logMessage.Length - 2);
                                                DataPackageService.mWriteLog(TraceType.INFO, System.Reflection.MethodBase.GetCurrentMethod().Name, null, logMessage);

                                                AvailableElementData elementData;
                                                T2GManagerErrorEnum  lRqstResult = _trainToGroundManager.GetAvailableElementDataByElementNumber(requestContext.ElementId, out elementData);

                                                if (lRqstResult == T2GManagerErrorEnum.eSuccess &&
                                                    elementData != null && elementData.PisBaselineData != null)
                                                {
                                                    _baselineStatusUpdater.ProcessDistributeBaselineRequest(
                                                        elementData.ElementNumber,
                                                        requestContext.RequestId,
                                                        elementData.OnlineStatus,
                                                        elementData.PisBaselineData.CurrentVersionOut,
                                                        elementData.PisBaselineData.FutureVersionOut,
                                                        requestContext.BaselineVersion);
                                                }
                                                else
                                                {
                                                    DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_ELEMENT_INFO, requestContext.ElementId);
                                                }

                                                DataPackageService.mAddBaselineVersionToDictionary(requestContext.RequestId, requestContext.ElementId, requestContext.BaselineVersion);
                                                DataPackageService.mAddPackagesToUsedPackagesList(packagesParamsList);
                                                _trainToGroundManager.T2GFileDistributionManager.AddUploadRequest(uploadFilesRequestContext);
                                                requestContext.TransmissionStatus = true;
                                                DataPackageService.mRemovePackagesFromUsedPackagesList(packagesParamsList);
                                            }
                                        }
                                        else
                                        {
                                            requestContext.CompletionStatus = true;
                                            DataPackageService.sendNotificationToGroundApp(requestContext.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionFailed, stringWriter.ToString());
                                            DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED, requestContext.BaselineVersion, requestContext.ElementId, Logs.ERROR_GETTING_URL_LIST);
                                        }
                                    }
                                    else
                                    {
                                        requestContext.CompletionStatus = true;
                                        DataPackageService.sendNotificationToGroundApp(requestContext.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionFailed, stringWriter.ToString());
                                        DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED_UNKNOW_BASELINE_VERSION, requestContext.ElementId);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    if (false == requestContext.OnCommunicationError(ex))
                                    {
                                        requestContext.CompletionStatus = true;
                                        DataPackageService.sendNotificationToGroundApp(requestContext.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionFailedRejectedByElement, stringWriter.ToString());
                                        DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, ex, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED, requestContext.BaselineVersion, requestContext.ElementId, ex.Message);
                                    }
                                    else
                                    {
                                        DataPackageService.mWriteLog(TraceType.DEBUG, System.Reflection.MethodBase.GetCurrentMethod().Name, ex, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED, requestContext.BaselineVersion, requestContext.ElementId, ex.Message);
                                    }
                                }
                                finally
                                {
                                    if (lTrainDataPackageClient.State == CommunicationState.Faulted)
                                    {
                                        lTrainDataPackageClient.Abort();
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            if (false == requestContext.OnCommunicationError(ex))
                            {
                                requestContext.CompletionStatus = true;
                                DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, ex, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED, requestContext.BaselineVersion, requestContext.ElementId, ex.Message);
                                DataPackageService.sendNotificationToGroundApp(requestContext.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionFailed, stringWriter.ToString());
                            }
                            else
                            {
                                DataPackageService.mWriteLog(TraceType.DEBUG, System.Reflection.MethodBase.GetCurrentMethod().Name, ex, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED, requestContext.BaselineVersion, requestContext.ElementId, ex.Message);
                            }
                        }
                    }
                    else
                    {
                        DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED, requestContext.BaselineVersion, requestContext.ElementId, "Cannot get embedded DataPackage service data.");
                        requestContext.TransmissionStatus = false;
                    }
                }
                else
                {
                    requestContext.TransmissionStatus = false;
                }
            }
        }
コード例 #25
0
        /// <summary>Rtpis data store changed.</summary>
        /// <param name="sender">Source of the event.</param>
        /// <param name="e">Rtpis data store event information.</param>
        private static void RTPISDataStoreChanged(object sender, RTPISDataStoreEventArgs e)
        {
            ElementList <AvailableElementData> elementList = null;

            if (e != null)
            {
                // Skip the processing if PIS-Ground does not communicate with T2G.
                if (_t2gManager.T2GServerConnectionStatus)
                {
                    if (!string.IsNullOrEmpty(e.MissionCode))
                    {
                        T2GManagerErrorEnum rqstResult = _t2gManager.GetAvailableElementDataListByMissionCode(e.MissionCode, out elementList);

                        if (rqstResult == T2GManagerErrorEnum.eSuccess)
                        {
                            if (elementList != null)
                            {
                                foreach (var element in elementList)
                                {
                                    ProcessMissionDataSending(element.ElementNumber, e.MissionCode);
                                }
                            }
                        }
                        else
                        {
                            if (LogManager.IsTraceActive(TraceType.INFO))
                            {
                                LogManager.WriteLog(TraceType.INFO, string.Format(CultureInfo.CurrentCulture, Logs.INFO_NO_ELEMENTS_FOR_MISSION, e.MissionCode), "PIS.Ground.RealTime.RealTimeService.RTPISDataStoreChanged", null, EventIdEnum.RealTime);
                            }
                        }
                    }

                    string missionCode;
                    if (e.StationCodeList.HasValue &&
                        !string.IsNullOrEmpty((missionCode = e.StationCodeList.Value.Key)) &&
                        e.StationCodeList.Value.Value.Count > 0)
                    {
                        if (elementList == null)
                        {
                            T2GManagerErrorEnum rqstResult = _t2gManager.GetAvailableElementDataListByMissionCode(missionCode, out elementList);
                            if (rqstResult != T2GManagerErrorEnum.eSuccess && LogManager.IsTraceActive(TraceType.INFO))
                            {
                                LogManager.WriteLog(TraceType.INFO, string.Format(CultureInfo.CurrentCulture, Logs.INFO_NO_ELEMENTS_FOR_MISSION, missionCode), "PIS.Ground.RealTime.RealTimeService.RTPISDataStoreChanged", null, EventIdEnum.RealTime);
                            }
                        }

                        if (elementList != null)
                        {
                            foreach (var element in elementList)
                            {
                                ProcessStationDataSending(element.ElementNumber, e.StationCodeList.Value);
                            }
                        }
                    }
                }
                else if (LogManager.IsTraceActive(TraceType.DEBUG))
                {
                    LogManager.WriteLog(TraceType.DEBUG, Logs.SKIP_NOTIFICATION_RTPISDATASTORECHANGED_T2G_OFFLINE, "PIS.Ground.RealTime.RealTimeService.RTPISDataStoreChanged", null, EventIdEnum.RealTime);
                }
            }
        }