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