public override void SocketIsConnectedAndInitSequenceIsNegotiated()
        {
            base.SocketIsConnectedAndInitSequenceIsNegotiated();

            string sAutoSubscribeAtConnectInterval = cPrivateProfile.GetIniFileString("RSMP", "AutoSubscribeAtConnectInterval", "");

            int iAutoSubscribeValues = 0;

            RSMPGS.MainForm.button_AggregatedStatus_Request.Enabled = RSMPGS.JSon.NegotiatedRSMPVersion >= cJSon.RSMPVersion.RSMP_3_1_5;

            // Auto subscribe for all status' (2019-04-14/TR for some performance testing Sthlm Stad)
            if (sAutoSubscribeAtConnectInterval != "")
            {
                foreach (cRoadSideObject RoadSideObject in RSMPGS.ProcessImage.RoadSideObjects.Values)
                {
                    List <RSMP_Messages.StatusSubscribe_Status_Over_3_1_4> StatusSubscribe_Values = new List <RSMP_Messages.StatusSubscribe_Status_Over_3_1_4>();

                    foreach (cStatusObject StatusObject in RoadSideObject.StatusObjects)
                    {
                        foreach (cStatusReturnValue StatusReturnValue in StatusObject.StatusReturnValues)
                        {
                            RSMP_Messages.StatusSubscribe_Status_Over_3_1_4 StatusSubscribe_Value = new RSMP_Messages.StatusSubscribe_Status_Over_3_1_4();
                            StatusSubscribe_Value.sCI = StatusReturnValue.StatusObject.sStatusCodeId;
                            StatusSubscribe_Value.n   = StatusReturnValue.sName;
                            StatusSubscribe_Value.uRt = sAutoSubscribeAtConnectInterval;
                            StatusSubscribe_Value.sOc = false;
                            StatusSubscribe_Values.Add(StatusSubscribe_Value);
                            iAutoSubscribeValues++;
                        }
                    }
                    RSMPGS.JSon.CreateAndSendSubscriptionMessage(RoadSideObject, StatusSubscribe_Values);
                }
                RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Initially subscribed to {0} status updates using UpdateRate {1}", iAutoSubscribeValues, sAutoSubscribeAtConnectInterval);
            }
        }
        public void ReSendSubscriptions(bool bSubscribe)
        {
            foreach (cRoadSideObject RoadSideObject in RoadSideObjects.Values)
            {
                List <RSMP_Messages.StatusSubscribe_Status_Over_3_1_4> StatusSubscribe_Values = new List <RSMP_Messages.StatusSubscribe_Status_Over_3_1_4>();

                foreach (cStatusObject StatusObject in RoadSideObject.StatusObjects)
                {
                    foreach (cStatusReturnValue StatusReturnValue in StatusObject.StatusReturnValues)
                    {
                        if (StatusReturnValue.sLastUpdateRate != null)
                        {
                            RSMP_Messages.StatusSubscribe_Status_Over_3_1_4 StatusSubscribe_Value = new RSMP_Messages.StatusSubscribe_Status_Over_3_1_4();
                            StatusSubscribe_Value.sCI = StatusReturnValue.StatusObject.sStatusCodeId;
                            StatusSubscribe_Value.n   = StatusReturnValue.sName;
                            StatusSubscribe_Value.uRt = StatusReturnValue.sLastUpdateRate;
                            StatusSubscribe_Value.sOc = StatusReturnValue.bLastUpdateOnChange;

                            StatusSubscribe_Values.Add(StatusSubscribe_Value);
                        }
                    }
                }
                if (StatusSubscribe_Values.Count > 0)
                {
                    if (bSubscribe)
                    {
                        RSMPGS.JSon.CreateAndSendSubscriptionMessage(RoadSideObject, StatusSubscribe_Values);
                    }
                    else
                    {
                        RSMPGS.JSon.CreateAndSendStatusMessage(RoadSideObject, StatusSubscribe_Values, "StatusUnsubscribe");
                    }
                }
            }
        }
Beispiel #3
0
        private void ToolStripMenuItem_Status_Click(object sender, EventArgs e)
        {
            cRoadSideObject RoadSideObject = null;

            bool bAlwaysUpdateOnChange = false;

            cJSon.StatusMsgType statusMsgType;

            ToolStripMenuItem menuitem = (ToolStripMenuItem)sender;

            string sUpdateRate = "";

            if (menuitem.Equals(ToolStripMenuItem_StatusRequest))
            {
                statusMsgType = cJSon.StatusMsgType.Request;
            }
            else if (menuitem.Equals(ToolStripMenuItem_StatusUnsubscribe))
            {
                statusMsgType = cJSon.StatusMsgType.UnSubscribe;
            }
            else if (menuitem.Equals(ToolStripMenuItem_StatusSubscribe_UpdateOnChangeOnly))
            {
                bAlwaysUpdateOnChange = true;
                sUpdateRate           = "0";
                statusMsgType         = cJSon.StatusMsgType.Subscribe;
            }
            else if (menuitem.Equals(ToolStripMenuItem_StatusSubscribe_UpdateOnInterval_Manually) || menuitem.Equals(ToolStripMenuItem_StatusSubscribe_UpdateOnChangeAndInterval_Manually))
            {
                if (cFormsHelper.InputBox("Enter Update Rate (seconds)", "UpdateRate:", ref sUpdateRate, false, true) != DialogResult.OK)
                {
                    return;
                }
                if (sUpdateRate == "")
                {
                    return;
                }
                bAlwaysUpdateOnChange = menuitem.OwnerItem.Equals(ToolStripMenuItem_StatusSubscribe_UpdateOnChangeAndInterval);
                statusMsgType         = cJSon.StatusMsgType.Subscribe;
            }
            else
            {
                sUpdateRate           = menuitem.Tag.ToString();
                bAlwaysUpdateOnChange = menuitem.OwnerItem.Equals(ToolStripMenuItem_StatusSubscribe_UpdateOnChangeAndInterval);
                statusMsgType         = cJSon.StatusMsgType.Subscribe;
            }

            // Each group belongs to a RoadSide object
            foreach (ListViewGroup lvGroup in listView_Status.Groups)
            {
                RoadSideObject = null;

                List <RSMP_Messages.StatusSubscribe_Status_Over_3_1_4> StatusSubscribeValues = new List <RSMP_Messages.StatusSubscribe_Status_Over_3_1_4>();

                foreach (ListViewItem lvItem in lvGroup.Items)
                {
                    if (lvItem.Selected)
                    {
                        cStatusReturnValue StatusReturnValue = (cStatusReturnValue)lvItem.Tag;

                        if (RoadSideObject == null)
                        {
                            RoadSideObject = StatusReturnValue.StatusObject.RoadSideObject;
                        }

                        RSMP_Messages.StatusSubscribe_Status_Over_3_1_4 statusSubscribe_Status = new RSMP_Messages.StatusSubscribe_Status_Over_3_1_4();

                        statusSubscribe_Status.sCI = StatusReturnValue.StatusObject.sStatusCodeId;
                        statusSubscribe_Status.n   = StatusReturnValue.sName;

                        if (statusMsgType == cJSon.StatusMsgType.Subscribe)
                        {
                            statusSubscribe_Status.uRt = sUpdateRate;
                            statusSubscribe_Status.sOc = bAlwaysUpdateOnChange;
                        }
                        else
                        {
                            statusSubscribe_Status.uRt = null;
                            statusSubscribe_Status.sOc = false;
                        }

                        StatusReturnValue.sLastUpdateRate     = statusSubscribe_Status.uRt;
                        StatusReturnValue.bLastUpdateOnChange = statusSubscribe_Status.sOc;

                        StatusSubscribeValues.Add(statusSubscribe_Status);
                    }
                }

                if (StatusSubscribeValues.Count == 0 || RoadSideObject == null)
                {
                    continue;
                }


                switch (statusMsgType)
                {
                case cJSon.StatusMsgType.Subscribe:
                    RSMPGS.JSon.CreateAndSendSubscriptionMessage(RoadSideObject, StatusSubscribeValues);
                    break;

                case cJSon.StatusMsgType.Request:
                    RSMPGS.JSon.CreateAndSendStatusMessage(RoadSideObject, StatusSubscribeValues, "StatusRequest");
                    break;

                case cJSon.StatusMsgType.UnSubscribe:
                    RSMPGS.JSon.CreateAndSendStatusMessage(RoadSideObject, StatusSubscribeValues, "StatusUnsubscribe");
                    break;

                default:
                    return;
                }
            }
        }
        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);
        }