/// <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); } } } }
/// <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"); }
/// <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); }