/// <summary>Process Message Notification.</summary>
        /// <param name="systemId">system id.</param>
        /// <param name="messageId">message id.</param>
        /// <param name="fieldList">field list.</param>
        public void OnMessageNotification(string systemId, string messageId, fieldStruct[] fieldList)
        {
            lock (_lock)
            {
                if (!string.IsNullOrEmpty(systemId) && !string.IsNullOrEmpty(messageId) && fieldList != null && fieldList.Length != 0)
                {
                    if (messageId == T2GDataConverter.PisBaseline)
                    {
                        PisBaseline baseline = T2GDataConverter.BuildPisBaseLine(fieldList);

                        if (baseline != null)
                        {
                            _localDataStorage.OnMessageChanged(systemId, messageId, baseline);
                        }
                    }
                    else if (messageId == T2GDataConverter.PisVersion)
                    {
                        PisVersion version = T2GDataConverter.BuildPisVersion(fieldList);

                        if (version != null)
                        {
                            _localDataStorage.OnMessageChanged(systemId, messageId, version);
                        }
                    }
                    else if (messageId == T2GDataConverter.PisMission || messageId == T2GDataConverter.SivngMission)
                    {
                        PisMission mission = T2GDataConverter.BuildPisMission(fieldList);

                        if (mission != null)
                        {
                            _localDataStorage.OnMessageChanged(systemId, messageId, mission);
                        }
                    }

                    ElementEventArgs elementEventArgs = _localDataStorage.BuildElementInfoChangedEvent(systemId);

                    if (elementEventArgs != null)
                    {
                        _notifierTarget.RaiseOnElementInfoChangeEvent(elementEventArgs);
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>Executes the message changed action.</summary>
        /// <param name="systemId">System id.</param>
        /// <param name="messageId">Identifier for the message.</param>
        /// <param name="lVersion">The software version information.</param>
        internal void OnMessageChanged(string systemId, string messageId, PisMission pisMission)
        {
            if (LogManager.IsTraceActive(TraceType.INFO))
            {
                string logMessage = string.Format(CultureInfo.CurrentCulture, "OnMessageChanged called, systemId={0}, messageId={1}", systemId, messageId);
                LogManager.WriteLog(TraceType.INFO, logMessage, "PIS.Ground.Core.T2G.LocalDataStorage.OnMessageChanged", null, EventIdEnum.GroundCore);
            }

            lock (_systemListLock)
            {
                SystemInfo existingSystemInfo;

                if (_systemList.TryGetValue(systemId, out existingSystemInfo))
                {
                    // Update existing system


                    // Add updated info
                    SystemInfo updatedSystemInfo = new SystemInfo(
                        existingSystemInfo.SystemId,
                        existingSystemInfo.MissionId,
                        existingSystemInfo.VehiclePhysicalId,
                        existingSystemInfo.Status,
                        existingSystemInfo.IsOnline,
                        existingSystemInfo.CommunicationLink,
                        existingSystemInfo.ServiceList,
                        existingSystemInfo.PisBaseline,
                        existingSystemInfo.PisVersion,
                        pisMission,
                        existingSystemInfo.IsPisBaselineUpToDate && existingSystemInfo.IsOnline);

                    _systemList[systemId] = updatedSystemInfo;
                }
            }

            DumpCurrentSystemList(TraceType.DEBUG, "After OnMessageChanged called:", "PIS.Ground.Core.T2G.LocalDataStorage.OnMessageChanged");
        }
Exemple #3
0
        /// <summary>Build PisMission.</summary>
        /// <param name="fieldList">FieldList for a message.</param>
        /// <returns>PisVersion object if it succeeds, null if it fails.</returns>
        internal static PisMission BuildPisMission(fieldStruct[] fieldList)
        {
            PisMission mission = null;

            if (fieldList != null && fieldList.Length > 0)
            {
                mission = new PisMission();

                // CR: atvcm00614906 - [PIS-GROUND URBAN] Gap 2277: missing notification when mission code not defined in t2gvehicleinfo.xml
                // Must verify if all expected items are in the message... If not, we will log a trace.
                List <string> expectedItemsInMessage = new List <string>()
                {
                    CommercialNumber, OperatorCode, MissionState
                };

                foreach (fieldStruct lObjfieldStruct in fieldList)
                {
                    if (lObjfieldStruct.id == CommercialNumber)
                    {
                        mission.CommercialNumber = lObjfieldStruct.value;

                        if (lObjfieldStruct.type != fieldTypeEnum.unknown)
                        {
                            expectedItemsInMessage.Remove(CommercialNumber);
                        }

                        continue;
                    }

                    if (lObjfieldStruct.id == OperatorCode)
                    {
                        mission.OperatorCode = lObjfieldStruct.value;

                        if (lObjfieldStruct.type != fieldTypeEnum.unknown)
                        {
                            expectedItemsInMessage.Remove(OperatorCode);
                        }

                        continue;
                    }

                    if (lObjfieldStruct.id == MissionState)
                    {
                        try
                        {
                            mission.MissionState = (MissionStateEnum)Enum.Parse(typeof(MissionStateEnum), lObjfieldStruct.value);
                        }
                        catch (Exception)
                        {
                            mission.MissionState = MissionStateEnum.NI;
                        }

                        if (lObjfieldStruct.type != fieldTypeEnum.unknown)
                        {
                            expectedItemsInMessage.Remove(MissionState);
                        }

                        continue;
                    }
                }

                // CR: atvcm00614906 - [PIS-GROUND URBAN] Gap 2277: missing notification when mission code not defined in t2gvehicleinfo.xml
                // Log an error if the message did not contain all expected items.
                if (expectedItemsInMessage.Count > 0)
                {
                    LogNotificationMessageItemMissingError(expectedItemsInMessage, string.Concat(T2GDataConverter.PisMission, "/", T2GDataConverter.SivngMission));
                }
            }

            return(mission);
        }