public void CreateAndSendAlarmMessage(cAlarmObject AlarmObject, AlarmSpecialisation alarmSpecialisation) { RSMP_Messages.AlarmHeader AlarmHeader; cAlarmEvent AlarmEvent = null; string sSendBuffer; try { AlarmHeader = new RSMP_Messages.AlarmHeader(); AlarmHeader.mType = "rSMsg"; AlarmHeader.type = "Alarm"; AlarmHeader.mId = System.Guid.NewGuid().ToString(); AlarmHeader.ntsOId = AlarmObject.RoadSideObject.sNTSObjectId; AlarmHeader.xNId = AlarmObject.RoadSideObject.sExternalNTSId; AlarmHeader.cId = AlarmObject.RoadSideObject.sComponentId; AlarmHeader.aCId = AlarmObject.sAlarmCodeId; AlarmHeader.xACId = AlarmObject.sExternalAlarmCodeId; AlarmHeader.xNACId = AlarmObject.sExternalNTSAlarmCodeId; AlarmHeader.aSp = alarmSpecialisation.ToString(); sSendBuffer = JSonSerializer.SerializeObject(AlarmHeader); AlarmEvent = new cAlarmEvent(); AlarmEvent.AlarmObject = AlarmObject; AlarmEvent.sDirection = "Sent"; AlarmEvent.sTimeStamp = CreateLocalTimeStamp(); AlarmEvent.sMessageId = AlarmHeader.mId; AlarmEvent.sAlarmCodeId = AlarmHeader.aCId; AlarmEvent.sEvent = AlarmHeader.aSp; RSMPGS.MainForm.AddAlarmEventToAlarmObjectAndToList(AlarmObject, AlarmEvent); RSMPGS.MainForm.UpdateAlarmListView(AlarmObject); /* * if (RSMPGS_Main.bWriteEventsContinous) * { * RSMPGS.SysLog.EventLog("Alarm;{0}\tMId: {1}\tComponentId: {2}\tAlarmCodeId: {3}\tEvent: {4}", * AlarmEvent.sTimeStamp, AlarmEvent.sMessageId, AlarmHeader.cId, AlarmEvent.sAlarmCodeId, AlarmEvent.sEvent); * } */ RSMPGS.JSon.SendJSonPacket(AlarmHeader.type, AlarmHeader.mId, sSendBuffer, true); if (RSMPGS.MainForm.checkBox_ViewOnlyFailedPackets.Checked == false) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Sent alarm message, AlarmCode: " + AlarmObject.sAlarmCodeId + ", Type: " + AlarmHeader.type + "/" + AlarmHeader.aSp + ", MsgId: " + AlarmHeader.mId); } } catch (Exception e) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Error, "Failed to create alarm message: {0}", e.Message); } }
public RSMP_Messages.AlarmHeaderAndBody CreateAndSendAlarmMessage(cAlarmObject AlarmObject, AlarmSpecialisation alarmSpecialisation, bool bCreateMessageOnly, out string sSendBuffer, out cAlarmEvent AlarmEvent) { sSendBuffer = ""; RSMP_Messages.AlarmHeaderAndBody AlarmHeaderAndBody; // RSMP_Messages.AlarmHeader AlarmHeader; AlarmHeaderAndBody = new RSMP_Messages.AlarmHeaderAndBody(); AlarmEvent = new cAlarmEvent(); try { AlarmHeaderAndBody.mType = "rSMsg"; AlarmHeaderAndBody.type = "Alarm"; AlarmHeaderAndBody.mId = System.Guid.NewGuid().ToString(); AlarmHeaderAndBody.ntsOId = AlarmObject.RoadSideObject.sNTSObjectId; AlarmHeaderAndBody.xNId = AlarmObject.RoadSideObject.sExternalNTSId; AlarmHeaderAndBody.cId = AlarmObject.RoadSideObject.sComponentId; AlarmHeaderAndBody.aCId = AlarmObject.sAlarmCodeId; AlarmHeaderAndBody.xACId = AlarmObject.sExternalAlarmCodeId; AlarmHeaderAndBody.xNACId = AlarmObject.sExternalNTSAlarmCodeId; AlarmHeaderAndBody.rvs = new List <RSMP_Messages.AlarmReturnValue>(); AlarmEvent.AlarmObject = AlarmObject; AlarmHeaderAndBody.ack = AlarmObject.bAcknowledged ? "Acknowledged" : "notAcknowledged"; AlarmHeaderAndBody.aS = AlarmObject.bActive ? "Active" : "inActive"; AlarmHeaderAndBody.sS = AlarmObject.bSuspended ? "Suspended" : "notSuspended"; switch (alarmSpecialisation) { case AlarmSpecialisation.Issue: AlarmHeaderAndBody.aSp = "Issue"; AlarmEvent.sEvent = AlarmHeaderAndBody.aSp + " / " + AlarmHeaderAndBody.aS; break; case AlarmSpecialisation.Acknowledge: AlarmHeaderAndBody.aSp = "Acknowledge"; AlarmEvent.sEvent = AlarmHeaderAndBody.aSp + " / " + AlarmHeaderAndBody.ack; break; case AlarmSpecialisation.Suspend: AlarmHeaderAndBody.aSp = "Suspend"; AlarmEvent.sEvent = AlarmHeaderAndBody.aSp + " / " + AlarmHeaderAndBody.sS; break; } if (AlarmObject.bActive == false && AlarmObject.bAcknowledged) { AlarmObject.AlarmCount = 0; } if (AlarmObject.dtLastChangedAlarmStatus == DateTime.MinValue) { AlarmObject.dtLastChangedAlarmStatus = DateTime.Now; } AlarmHeaderAndBody.aTs = CreateISO8601UTCTimeStamp(AlarmObject.dtLastChangedAlarmStatus); AlarmHeaderAndBody.cat = AlarmObject.sCategory; AlarmHeaderAndBody.pri = AlarmObject.sPriority; AlarmEvent.sAlarmCodeId = AlarmObject.sAlarmCodeId; AlarmEvent.sDirection = "Sent"; AlarmEvent.sTimeStamp = UnpackISO8601UTCTimeStamp(AlarmHeaderAndBody.aTs); // String.Format("{0:yyyy-MM-dd}T{0:HH:mm:ss.fff}", UnpackISO8601UTCTimeStamp(AlarmHeaderAndBody.aTs)); AlarmEvent.sMessageId = AlarmHeaderAndBody.mId; foreach (cAlarmReturnValue AlarmReturnValue in AlarmObject.AlarmReturnValues) { RSMP_Messages.AlarmReturnValue rv = new RSMP_Messages.AlarmReturnValue(); rv.n = AlarmReturnValue.sName; rv.v = AlarmReturnValue.Value.GetValue(); AlarmHeaderAndBody.rvs.Add(rv); AlarmEvent.AlarmEventReturnValues.Add(new nsRSMPGS.cAlarmEventReturnValue(rv.n, rv.v)); } sSendBuffer = JSonSerializer.SerializeObject(AlarmHeaderAndBody); if (bCreateMessageOnly) { return(AlarmHeaderAndBody); } if (RSMPGS.JSon.SendJSonPacket(AlarmHeaderAndBody.type, AlarmHeaderAndBody.mId, sSendBuffer, true)) { if (RSMPGS.MainForm.checkBox_ViewOnlyFailedPackets.Checked == false) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Sent alarm message, AlarmCode: " + AlarmObject.sAlarmCodeId + ", Type: " + AlarmHeaderAndBody.type + "/" + AlarmHeaderAndBody.aSp + "/" + AlarmHeaderAndBody.aS + ", MsgId: " + AlarmHeaderAndBody.mId);//, SequenceNumber: " + AlarmHeaderAndBody.sNr); } } else { if (cHelper.IsSettingChecked("BufferAndSendAlarmsWhenConnect")) { cBufferedMessage BufferedMessage = new cBufferedMessage(cBufferedMessage.eMessageType.Alarm, AlarmHeaderAndBody.type, AlarmHeaderAndBody.mId, sSendBuffer); RSMPGS.MainForm.AddBufferedMessageToListAndListView(BufferedMessage); RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Warning, "Buffered alarm message, AlarmCode: " + AlarmObject.sAlarmCodeId + ", Type: " + AlarmHeaderAndBody.type + "/" + AlarmHeaderAndBody.aSp + "/" + AlarmHeaderAndBody.aS + ", MsgId: " + AlarmHeaderAndBody.mId);// + ", SequenceNumber: " + AlarmHeaderAndBody.sNr); } } // RSMPGS.ProcessImage.SequenceNumber_Alarm++; } catch (Exception e) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Error, "Failed to create alarm message: {0}", e.Message); AlarmEvent = null; } return(AlarmHeaderAndBody); }
public RSMP_Messages.AlarmHeaderAndBody CreateAndSendAlarmMessage(cAlarmObject AlarmObject, AlarmSpecialisation alarmSpecialisation, out cAlarmEvent AlarmEvent) { string sSendBuffer; return(CreateAndSendAlarmMessage(AlarmObject, alarmSpecialisation, false, out sSendBuffer, out AlarmEvent)); }
public RSMP_Messages.AlarmHeaderAndBody CreateAndSendAlarmMessage(cAlarmObject AlarmObject, AlarmSpecialisation alarmSpecialisation, bool bCreateMessageOnly, out string sSendBuffer) { cAlarmEvent AlarmEvent; return(CreateAndSendAlarmMessage(AlarmObject, alarmSpecialisation, bCreateMessageOnly, out sSendBuffer, out AlarmEvent)); }
public RSMP_Messages.AlarmHeaderAndBody CreateAndSendAlarmMessage(cAlarmObject AlarmObject, AlarmSpecialisation alarmSpecialisation) { cAlarmEvent AlarmEvent; return(CreateAndSendAlarmMessage(AlarmObject, alarmSpecialisation, out AlarmEvent)); }
private bool DecodeAndParseAlarmMessage(RSMP_Messages.Header packetHeader, string sJSon, bool bUseStrictProtocolAnalysis, bool bUseCaseSensitiveIds, ref bool bHasSentAckOrNack, ref string sError) { StringComparison sc = bUseCaseSensitiveIds ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; bool bPacketWasProperlyHandled = false; try { RSMP_Messages.AlarmHeader AlarmHeader = JSonSerializer.Deserialize <RSMP_Messages.AlarmHeader>(sJSon); cRoadSideObject RoadSideObject = cHelper.FindRoadSideObject(AlarmHeader.ntsOId, AlarmHeader.cId, bUseStrictProtocolAnalysis); if (RoadSideObject != null) { foreach (cAlarmObject AlarmObject in RoadSideObject.AlarmObjects) { if (AlarmObject.sAlarmCodeId.Equals(AlarmHeader.aCId, sc)) { cAlarmEvent AlarmEvent = new cAlarmEvent(); AlarmEvent.AlarmObject = AlarmObject; AlarmEvent.sDirection = "Received"; AlarmEvent.sTimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); AlarmEvent.sMessageId = AlarmHeader.mId; AlarmEvent.sAlarmCodeId = AlarmHeader.aCId; AlarmEvent.sEvent = AlarmHeader.aSp; AlarmSpecialisation alarmSpecialisation = cJSon.AlarmSpecialisation.Unknown; switch (AlarmHeader.aSp.ToLower()) { case "acknowledge": RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Ack of alarm, AlarmCodeId: {0}", AlarmHeader.aCId); AlarmObject.bAcknowledged = true; alarmSpecialisation = cJSon.AlarmSpecialisation.Acknowledge; break; case "suspend": RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Suspend of alarm, AlarmCodeId: {0}", AlarmHeader.aCId); AlarmObject.bSuspended = true; alarmSpecialisation = cJSon.AlarmSpecialisation.Suspend; break; case "resume": RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Resume of alarm, AlarmCodeId: {0}", AlarmHeader.aCId); AlarmObject.bSuspended = false; alarmSpecialisation = cJSon.AlarmSpecialisation.Suspend; break; case "request": if (cHelper.IsSettingChecked("AllowRequestsOfAlarmsAndAggStatus")) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Request of alarm status, AlarmCodeId: {0}", AlarmHeader.aCId); alarmSpecialisation = cJSon.AlarmSpecialisation.Issue; } else { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Warning, "Request of alarm status, AlarmCodeId: {0}. RSMP settings prevent us from answering.", AlarmHeader.aCId); } break; } if (bHasSentAckOrNack == false) { if (alarmSpecialisation == AlarmSpecialisation.Unknown) { bHasSentAckOrNack = SendPacketAck(false, packetHeader.mId, "Unknown Alarm Specialisation: " + AlarmHeader.aSp); } else { bHasSentAckOrNack = SendPacketAck(true, packetHeader.mId, ""); } } bPacketWasProperlyHandled = true; if (alarmSpecialisation != AlarmSpecialisation.Unknown) { if (AlarmObject.bActive == false && AlarmObject.bAcknowledged && alarmSpecialisation != AlarmSpecialisation.Unknown) { AlarmObject.AlarmCount = 0; } if (AlarmHeader.aSp.ToLower() != "request") { AlarmObject.dtLastChangedAlarmStatus = DateTime.Now; } CreateAndSendAlarmMessage(AlarmObject, alarmSpecialisation); RSMPGS.MainForm.AddAlarmEventToAlarmObjectAndToList(AlarmObject, AlarmEvent); RSMPGS.MainForm.UpdateAlarmListView(AlarmObject); } } } } if (bPacketWasProperlyHandled == false) { sError = "Failed to handle alarm message, AlarmCodeId " + AlarmHeader.aCId + " could not be found)"; RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Error, "{0}", sError); } } catch (Exception e) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Error, "Failed to deserialize packet: {0}", e.Message); } return(bPacketWasProperlyHandled); }