Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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);
        }