public void HandleStatusListUpdate(cRoadSideObject RoadSideObject, cStatusEvent StatusEvent, bool bSend) { string sKey = StatusEvent.sStatusCommandId.ToUpper() + "/" + StatusEvent.sName.ToUpper(); if (RoadSideObject.StatusGroup.Items.ContainsKey(sKey)) { ListViewItem lvItem = RoadSideObject.StatusGroup.Items[sKey]; if (!bSend) { lvItem.SubItems[4].Text = StatusEvent.sStatus; lvItem.SubItems[5].Text = StatusEvent.sQuality; } else { lvItem.SubItems[6].Text = StatusEvent.sUpdateRate; lvItem.SubItems[7].Text = StatusEvent.bUpdateOnChange.ToString(); } } AddStatusEventToList(RoadSideObject, StatusEvent); }
private void AddStatusEventToList(cRoadSideObject RoadSideObject, cStatusEvent StatusEvent) { if (bIsUpdatingStatusEventList == false) { listView_StatusEvents.StopSorting(); listView_StatusEvents.BeginUpdate(); bIsUpdatingStatusEventList = true; } ListViewItem lvItem = new ListViewItem(StatusEvent.sTimeStamp.ToString()); lvItem.SubItems.Add(StatusEvent.sMessageId); lvItem.SubItems.Add(StatusEvent.sEvent); lvItem.SubItems.Add(StatusEvent.sStatusCommandId); lvItem.SubItems.Add(StatusEvent.sName); lvItem.SubItems.Add(StatusEvent.sStatus); lvItem.SubItems.Add(StatusEvent.sQuality); lvItem.SubItems.Add(StatusEvent.sUpdateRate); lvItem.SubItems.Add(StatusEvent.bUpdateOnChange.ToString()); listView_StatusEvents.Items.Add(lvItem); }
private void AddSubscriptionMessageEvent(cRoadSideObject RoadSideObject, string sMessageId, string sComponentId, RSMP_Messages.StatusSubscribe_Status_Over_3_1_4 StatusSubscribe_Status) { cStatusEvent StatusEvent = null; StatusEvent = new cStatusEvent(); StatusEvent.sTimeStamp = CreateLocalTimeStamp(); StatusEvent.sMessageId = sMessageId; StatusEvent.sEvent = "Sent subscription"; StatusEvent.sStatusCommandId = StatusSubscribe_Status.sCI; StatusEvent.sName = StatusSubscribe_Status.n; StatusEvent.sUpdateRate = StatusSubscribe_Status.uRt; StatusEvent.bUpdateOnChange = StatusSubscribe_Status.sOc; if (RSMPGS_Main.bWriteEventsContinous) { RSMPGS.SysLog.EventLog("Status;{0}\tMId: {1}\tComponentId: {2}\tStatusCommandId: {3}\tName: {4}\tStatus: {5}\tQuality: {6}\tUpdateRate: {7}\tEvent: {8}", StatusEvent.sTimeStamp, StatusEvent.sMessageId, sComponentId, StatusEvent.sStatusCommandId, StatusEvent.sName, StatusEvent.sStatus, StatusEvent.sQuality, StatusEvent.sUpdateRate, StatusEvent.sEvent); } RoadSideObject.StatusEvents.Add(StatusEvent); RSMPGS.MainForm.HandleStatusListUpdate(RoadSideObject, StatusEvent, true); }
public void CreateAndSendStatusMessage(cRoadSideObject RoadSideObject, List <RSMP_Messages.StatusSubscribe_Status_Over_3_1_4> StatusSubscribeValues, string statusType) { RSMP_Messages.StatusRequest StatusRequest; RSMP_Messages.StatusRequest_Status StatusRequest_Status; cStatusEvent StatusEvent = null; string sSendBuffer; try { StatusRequest = new RSMP_Messages.StatusRequest(); StatusRequest.mType = "rSMsg"; StatusRequest.type = statusType; StatusRequest.mId = System.Guid.NewGuid().ToString(); StatusRequest.ntsOId = RoadSideObject.sNTSObjectId; StatusRequest.xNId = RoadSideObject.sExternalNTSId; StatusRequest.cId = RoadSideObject.sComponentId; StatusRequest.sS = new List <RSMP_Messages.StatusRequest_Status>(); foreach (RSMP_Messages.StatusSubscribe_Status_Over_3_1_4 StatusSubscribeValue in StatusSubscribeValues) { StatusRequest_Status = new RSMP_Messages.StatusRequest_Status(); StatusRequest_Status.sCI = StatusSubscribeValue.sCI; StatusRequest_Status.n = StatusSubscribeValue.n; StatusRequest.sS.Add(StatusRequest_Status); StatusEvent = new cStatusEvent(); StatusEvent.sTimeStamp = CreateLocalTimeStamp(); StatusEvent.sMessageId = StatusRequest.mId; StatusEvent.sStatusCommandId = StatusRequest_Status.sCI; StatusEvent.sName = StatusRequest_Status.n; if (statusType.ToLower() == "statusunsubscribe") { StatusEvent.sEvent = "Sent unsubscription"; //StatusReturnValue.sLastUpdateRate = null; } else { StatusEvent.sEvent = "Sent status request"; } if (RSMPGS_Main.bWriteEventsContinous) { RSMPGS.SysLog.EventLog("Status;{0}\tMId: {1}\tComponentId: {2}\tStatusCommandId: {3}\tName: {4}\tStatus: {5}\tQuality: {6}\tUpdateRate: {7}\tEvent: {8}", StatusEvent.sTimeStamp, StatusEvent.sMessageId, StatusRequest.cId, StatusEvent.sStatusCommandId, StatusEvent.sName, StatusEvent.sStatus, StatusEvent.sQuality, StatusEvent.sUpdateRate, StatusEvent.sEvent); } RoadSideObject.StatusEvents.Add(StatusEvent); RSMPGS.MainForm.HandleStatusListUpdate(RoadSideObject, StatusEvent, true); } sSendBuffer = JSonSerializer.SerializeObject(StatusRequest); RSMPGS.JSon.SendJSonPacket(StatusRequest.type, StatusRequest.mId, sSendBuffer, true); if (RSMPGS.MainForm.checkBox_ViewOnlyFailedPackets.Checked == false) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Sent status message, ComponentId: " + StatusRequest.cId + " , MsgId: " + StatusRequest.mId); } } catch (Exception e) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Error, "Failed to create status message: {0}", e.Message); } }
private bool DecodeAndParseStatusMessage(RSMP_Messages.Header packetHeader, string sJSon, bool bUseStrictProtocolAnalysis, bool bUseCaseSensitiveIds, ref bool bHasSentAckOrNack, ref string sError) { StringComparison sc = bUseCaseSensitiveIds ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; bool bSuccess = false; try { RSMP_Messages.StatusResponse StatusResponse = JSonSerializer.Deserialize <RSMP_Messages.StatusResponse>(sJSon); cRoadSideObject RoadSideObject = cHelper.FindRoadSideObject(StatusResponse.ntsOId, StatusResponse.cId, bUseCaseSensitiveIds); foreach (RSMP_Messages.Status_VTQ Reply in StatusResponse.sS) { cStatusObject StatusObject = RoadSideObject.StatusObjects.Find(x => x.sStatusCodeId.Equals(Reply.sCI, sc)); if (StatusObject == null) { continue; } cStatusReturnValue StatusReturnValue = StatusObject.StatusReturnValues.Find(x => x.sName.Equals(Reply.n, sc)); if (StatusReturnValue == null) { continue; } if (StatusReturnValue.Value.GetValueType().Equals("base64", StringComparison.OrdinalIgnoreCase)) { if (RSMPGS.MainForm.ToolStripMenuItem_StoreBase64Updates.Checked) { StatusReturnValue.Value.SetValue(RSMPGS.SysLog.StoreBase64DebugData(Reply.s)); } else { StatusReturnValue.Value.SetValue("base64"); } } else { StatusReturnValue.Value.SetValue(Reply.s); } StatusReturnValue.sQuality = Reply.q; if (ValidateTypeAndRange(StatusReturnValue.Value.GetValueType(), Reply.s)) { bSuccess = true; } else { string sStatusValue; if (Reply.s == null) { sStatusValue = "(null)"; } else { sStatusValue = (Reply.s.Length < 10) ? Reply.s : Reply.s.Substring(0, 9) + "..."; } sError = "Value and/or type is out of range or invalid for this RSMP protocol version, type: " + StatusReturnValue.Value.GetValueType() + ", quality: " + StatusReturnValue.sQuality + ", statusvalue: " + sStatusValue; RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Error, sError); } cStatusEvent StatusEvent = new cStatusEvent(); StatusEvent.sTimeStamp = UnpackISO8601UTCTimeStamp(StatusResponse.sTs); StatusEvent.sMessageId = StatusResponse.mId; StatusEvent.sEvent = "Received status"; StatusEvent.sStatusCommandId = Reply.sCI; StatusEvent.sName = Reply.n; if (StatusReturnValue.Value.GetValueType().Equals("base64", StringComparison.OrdinalIgnoreCase)) { StatusEvent.sStatus = "base64"; } else { StatusEvent.sStatus = Reply.s; } StatusEvent.sQuality = Reply.q; if (RSMPGS_Main.bWriteEventsContinous) { RSMPGS.SysLog.EventLog("Status;{0}\tMId: {1}\tComponentId: {2}\tStatusCommandId: {3}\tName: {4}\tStatus: {5}\tQuality: {6}\tUpdateRate: {7}\tUpdateOnChange: {8}\tEvent: {9}", StatusEvent.sTimeStamp, StatusEvent.sMessageId, StatusResponse.cId, StatusEvent.sStatusCommandId, StatusEvent.sName, StatusEvent.sStatus, StatusEvent.sQuality, StatusEvent.sUpdateRate, StatusEvent.bUpdateOnChange, StatusEvent.sEvent); } RoadSideObject.StatusEvents.Add(StatusEvent); RSMPGS.MainForm.HandleStatusListUpdate(RoadSideObject, StatusEvent, false); } } catch (Exception e) { sError = "Failed to deserialize packet: " + e.Message; bSuccess = false; } return(bSuccess); }