public void CyclicCleanup(int iElapsedMillisecs) { List <RSMP_Messages.Status_VTQ> sS = new List <RSMP_Messages.Status_VTQ>(); foreach (cRoadSideObject RoadSideObject in RSMPGS.ProcessImage.RoadSideObjects.Values) { sS.Clear(); // Delete subscription if it already exists foreach (cSubscription Subscription in RoadSideObject.Subscriptions) { if (Subscription.SubscribeStatus == cSubscription.SubscribeMethod.Interval || Subscription.SubscribeStatus == cSubscription.SubscribeMethod.IntervalAndOnChange) { if (DateTime.Compare(Subscription.LastUpdate.AddMilliseconds(Subscription.UpdateRate), DateTime.Now) <= 0) { RSMP_Messages.Status_VTQ s = new RSMP_Messages.Status_VTQ(); s.sCI = Subscription.StatusObject.sStatusCodeId; s.n = Subscription.StatusReturnValue.sName; // Subscription.StatusObject.StatusReturnValues .StatusReturnValues[iIndex].sName; UpdateStatusValue(ref s, Subscription.StatusReturnValue.Value.GetValueType(), Subscription.StatusReturnValue.Value.GetValue()); sS.Add(s); Subscription.LastUpdate = DateTime.Now; } } } if (sS.Count > 0) { RSMPGS.JSon.CreateAndSendStatusUpdateMessage(RoadSideObject, sS); } } }
public void UpdateStatusValue(ref RSMP_Messages.Status_VTQ s, string sType, string sStatus) { if (sStatus == null || sStatus == "?") { s.s = null; s.q = "unknown"; } else { // Could be base64 if (sType.Equals("base64", StringComparison.OrdinalIgnoreCase)) { // Path? if (sStatus.Contains("\\")) { try { byte[] Base64Bytes = null; // Open file for reading System.IO.FileStream fsBase64 = new System.IO.FileStream(sStatus, System.IO.FileMode.Open, System.IO.FileAccess.Read); System.IO.BinaryReader brBase64 = new System.IO.BinaryReader(fsBase64); long lBytes = new System.IO.FileInfo(sStatus).Length; Base64Bytes = brBase64.ReadBytes((Int32)lBytes); fsBase64.Close(); fsBase64.Dispose(); brBase64.Close(); s.s = Convert.ToBase64String(Base64Bytes); if (s.s.Length > (cTcpSocketClientThread.BUFLENGTH - 100)) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Error, "Base64 encoded packet is too big (" + Base64Bytes.GetLength(0).ToString() + " bytes), max buffer length is " + cTcpSocketClientThread.BUFLENGTH.ToString() + " bytes"); s.s = null; } s.q = "recent"; } catch (Exception e) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Error, "Could not base64-encode and send file '{0}', error {1}", sStatus, e.Message); s.q = "unknown"; } } else { s.s = sStatus; s.q = "recent"; } } else { s.s = sStatus; s.q = "recent"; } } }
public void LoadProcessImageValues(RSMPGS_Main MainForm, string FileName) { bool bWeAreConnected = false; try { if (RSMPGS.RSMPConnection != null) { bWeAreConnected = RSMPGS.RSMPConnection.ConnectionStatus() == cTcpSocket.ConnectionStatus_Connected; } List <RSMP_Messages.Status_VTQ> sS = new List <RSMP_Messages.Status_VTQ>(); //StreamReader swReferenceFile = new StreamReader((System.IO.Stream)File.OpenRead(FileName), encoding); //swReferenceFile.Close(); /* * [26108.AB+26108=881CG001.Passagedetektor.Passagedetektor DP1.AB+26108=881DP001.Alarms] * A904.Active=True * * [26108.AB+26108=881CG001.Passagedetektor.Passagedetektor DP1.AB+26108=881DP001.AlarmEvents] * A904.AlarmEvent_0.MessageId=f56ad0f6-7c4c-4b51-a602-8ba9fadf6ea8 * A904.AlarmEvent_0.TimeStamp=2011-11-16T12:52:39.437 * [26108.AB+26108=881CG001.Passagedetektor.Passagedetektor DP1.AB+26108=881DP001.Status] * S0001.status 1.Status=10 */ foreach (cRoadSideObject RoadSideObject in RSMPGS.ProcessImage.RoadSideObjects.Values) { bool bSomeThingWasChangedInAggregatedStatus = false; if (MainForm.checkBox_ProcessImageLoad_AlarmStatus.Checked) { foreach (cAlarmObject AlarmObject in RoadSideObject.AlarmObjects) { string sSection = RoadSideObject.UniqueId() + ".Alarms"; string sParameter = AlarmObject.sAlarmCodeId + ".Active"; cAlarmEvent AlarmEvent = null; cAlarmObject NewAlarmObject = new cAlarmObject(); NewAlarmObject.bActive = cPrivateProfile.GetIniFileInt(FileName, RoadSideObject.UniqueId() + ".Alarms", AlarmObject.sAlarmCodeId + ".Active", 0) != 0; NewAlarmObject.bSuspended = cPrivateProfile.GetIniFileInt(FileName, RoadSideObject.UniqueId() + ".Alarms", AlarmObject.sAlarmCodeId + ".Suspended", 0) != 0; NewAlarmObject.bAcknowledged = cPrivateProfile.GetIniFileInt(FileName, RoadSideObject.UniqueId() + ".Alarms", AlarmObject.sAlarmCodeId + ".Acknowledged", 0) != 0; AlarmObject.AlarmEvents.Clear(); foreach (cAlarmReturnValue AlarmReturnValue in AlarmObject.AlarmReturnValues) { string sValue = cPrivateProfile.GetIniFileString(FileName, RoadSideObject.UniqueId() + ".Alarms", AlarmObject.sAlarmCodeId + "." + AlarmReturnValue.sName + ".Value", "?"); if (sValue != "?") { AlarmReturnValue.Value.SetValue(sValue); } } if (AlarmObject.bSuspended != NewAlarmObject.bSuspended) { AlarmObject.bSuspended = NewAlarmObject.bSuspended; if (bWeAreConnected) { RSMPGS.JSon.CreateAndSendAlarmMessage(AlarmObject, cJSon.AlarmSpecialisation.Suspend); } } if (AlarmObject.bActive != NewAlarmObject.bActive) { AlarmObject.bActive = NewAlarmObject.bActive; if (bWeAreConnected) { if (NewAlarmObject.bActive) { RSMPGS.JSon.CreateAndSendAlarmMessage(AlarmObject, cJSon.AlarmSpecialisation.Issue, out AlarmEvent); if (AlarmEvent != null) { AlarmObject.AlarmEvents.Add(AlarmEvent); } } else { RSMPGS.JSon.CreateAndSendAlarmMessage(AlarmObject, cJSon.AlarmSpecialisation.Issue); AlarmObject.AlarmEvents.Clear(); } } } if (AlarmObject.bAcknowledged != NewAlarmObject.bAcknowledged) { AlarmObject.bAcknowledged = NewAlarmObject.bAcknowledged; if (bWeAreConnected) { RSMPGS.JSon.CreateAndSendAlarmMessage(AlarmObject, cJSon.AlarmSpecialisation.Acknowledge); } AlarmObject.AlarmEvents.Clear(); } AlarmObject.AlarmCount = 0; /* * sSection = sObjectUniqueId + ".AlarmEvents"; * * foreach (cAlarmReturnValue AlarmReturnValue in AlarmObject.AlarmReturnValues) * { * AlarmReturnValue.sValue = cPrivateProfile.GetIniFileString(FileName, sSection, AlarmObject.sAlarmCodeId + ".ReturnValue_" + AlarmReturnValue.sName + ".Value", ""); * } * for (int iIndex = 0; ; iIndex++) * { * string sMsgId = cPrivateProfile.GetIniFileString(FileName, sSection, AlarmObject.sAlarmCodeId + ".AlarmEvent_" + iIndex.ToString() + ".MessageId", ""); * string sTS = cPrivateProfile.GetIniFileString(FileName, sSection, AlarmObject.sAlarmCodeId + ".AlarmEvent_" + iIndex.ToString() + ".TimeStamp", ""); * if (sMsgId.Length > 0) * { * cAlarmEvent AlarmEvent = new cAlarmEvent(); * AlarmEvent.sMessageId = sMsgId; * AlarmEvent.sTimeStamp = sTS; * AlarmObject.AlarmEvents.Add(AlarmEvent); * } * else * { * break; * } * * } */ } } if (MainForm.checkBox_ProcessImageLoad_Status.Checked) { // Stored status foreach (cStatusObject StatusObject in RoadSideObject.StatusObjects) { foreach (cStatusReturnValue StatusReturnValue in StatusObject.StatusReturnValues) { string sStatus = cPrivateProfile.GetIniFileString(FileName, RoadSideObject.UniqueId() + ".Status", StatusObject.sStatusCodeId + "." + StatusReturnValue.sName + ".Status", "?"); StatusReturnValue.bRecentlyChanged = false; if (sStatus != "?") { StatusReturnValue.bRecentlyChanged = StatusReturnValue.Value.GetValue().Equals(sStatus) ? false : true; StatusReturnValue.Value.SetValue(sStatus); } } } sS.Clear(); foreach (cSubscription Subscription in RoadSideObject.Subscriptions) { if (Subscription.SubscribeStatus == cSubscription.SubscribeMethod.OnChange || Subscription.SubscribeStatus == cSubscription.SubscribeMethod.IntervalAndOnChange) { if (Subscription.StatusReturnValue.bRecentlyChanged) { RSMP_Messages.Status_VTQ s = new RSMP_Messages.Status_VTQ(); s.sCI = Subscription.StatusObject.sStatusCodeId; s.n = Subscription.StatusReturnValue.sName; // Subscription.StatusObject.StatusReturnValues .StatusReturnValues[iIndex].sName; UpdateStatusValue(ref s, Subscription.StatusReturnValue.Value.GetValueType(), Subscription.StatusReturnValue.Value.GetValue()); sS.Add(s); Subscription.LastUpdate = DateTime.Now; Subscription.StatusReturnValue.bRecentlyChanged = false; } } } if (sS.Count > 0) { if (bWeAreConnected) { RSMPGS.JSon.CreateAndSendStatusUpdateMessage(RoadSideObject, sS); } } } if (MainForm.checkBox_ProcessImageLoad_AggregatedStatus.Checked) { if (RoadSideObject.bIsComponentGroup) { if (RoadSideObject.sFunctionalPosition.Equals(cPrivateProfile.GetIniFileString(FileName, RoadSideObject.UniqueId() + ".AggregatedStatus", "FunctionalPosition", "")) == false) { RoadSideObject.sFunctionalPosition = cPrivateProfile.GetIniFileString(FileName, RoadSideObject.UniqueId() + ".AggregatedStatus", "FunctionalPosition", ""); bSomeThingWasChangedInAggregatedStatus = true; } if (RoadSideObject.sFunctionalState.Equals(cPrivateProfile.GetIniFileString(FileName, RoadSideObject.UniqueId() + ".AggregatedStatus", "FunctionalState", "")) == false) { RoadSideObject.sFunctionalState = cPrivateProfile.GetIniFileString(FileName, RoadSideObject.UniqueId() + ".AggregatedStatus", "FunctionalState", ""); bSomeThingWasChangedInAggregatedStatus = true; } for (int iIndex = 0; iIndex < RoadSideObject.bBitStatus.GetLength(0); iIndex++) { if (RoadSideObject.bBitStatus[iIndex] != (cPrivateProfile.GetIniFileInt(FileName, RoadSideObject.UniqueId() + ".AggregatedStatus", "BitStatus_" + iIndex.ToString(), 0) != 0)) { RoadSideObject.bBitStatus[iIndex] = cPrivateProfile.GetIniFileInt(FileName, RoadSideObject.UniqueId() + ".AggregatedStatus", "BitStatus_" + iIndex.ToString(), 0) != 0; bSomeThingWasChangedInAggregatedStatus = true; } } if (bSomeThingWasChangedInAggregatedStatus) { if (MainForm.checkBox_AggregatedStatus_SendAutomaticallyWhenChanged.Checked) { if (bWeAreConnected) { RSMPGS.JSon.CreateAndSendAggregatedStatusMessage(RoadSideObject); } } } } } if (MainForm.treeView_SitesAndObjects.SelectedNode != null) { if (MainForm.treeView_SitesAndObjects.SelectedNode.Tag != null && MainForm.treeView_SitesAndObjects.SelectedNode.Parent != null) { if (RoadSideObject == (cRoadSideObject)MainForm.treeView_SitesAndObjects.SelectedNode.Tag) { MainForm.UpdateStatusListView(null, RoadSideObject); MainForm.UpdateAlarmListView(null, RoadSideObject); if (bSomeThingWasChangedInAggregatedStatus) { for (int iIndex = 0; iIndex < RoadSideObject.bBitStatus.GetLength(0); iIndex++) { ListViewItem lvItem = MainForm.listView_AggregatedStatus_StatusBits.Items[iIndex]; MainForm.SetStatusBitColor(lvItem, RoadSideObject.bBitStatus[iIndex]); } RSMPGS_Main.bIsCurrentlyChangingSelection = true; MainForm.listBox_AggregatedStatus_FunctionalPosition.ClearSelected(); for (int iIndex = 0; iIndex < MainForm.listBox_AggregatedStatus_FunctionalPosition.Items.Count; iIndex++) { if (MainForm.listBox_AggregatedStatus_FunctionalPosition.Items[iIndex].Equals(RoadSideObject.sFunctionalPosition)) { MainForm.listBox_AggregatedStatus_FunctionalPosition.SelectedIndex = iIndex; } } MainForm.listBox_AggregatedStatus_FunctionalState.ClearSelected(); for (int iIndex = 0; iIndex < MainForm.listBox_AggregatedStatus_FunctionalState.Items.Count; iIndex++) { if (MainForm.listBox_AggregatedStatus_FunctionalState.Items[iIndex].Equals(RoadSideObject.sFunctionalState)) { MainForm.listBox_AggregatedStatus_FunctionalState.SelectedIndex = iIndex; } } RSMPGS_Main.bIsCurrentlyChangingSelection = false; } } } } } /* * listBox_AggregatedStatus_FunctionalPosition_SelectedIndexChanged(object sender, EventArgs e) * listBox_AggregatedStatus_FunctionalState_SelectedIndexChanged(object sender, EventArgs e) * */ RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Loaded Process data from '{0}'", FileName); } catch (Exception e) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Error, "Failed to load Process data from '{0}' - {1}", FileName, e.Message); } }
private bool DecodeAndParseStatusMessage(RSMP_Messages.Header packetHeader, StatusMsgType statusMsgType, string sJSon, bool bUseStrictProtocolAnalysis, bool bUseCaseSensitiveIds, ref bool bHasSentAckOrNack, ref string sError) { StringComparison sc = bUseCaseSensitiveIds ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; bool bSuccess = true; // Values to return List <RSMP_Messages.Status_VTQ> sS = new List <RSMP_Messages.Status_VTQ>(); try { // StatusSubscribe, StatusUnsubscribe and StatusRequest are very much alike, differns by the uRt property only RSMP_Messages.StatusSubscribe_Over_3_1_4 StatusSubscribe = JSonSerializer.Deserialize <RSMP_Messages.StatusSubscribe_Over_3_1_4>(sJSon); foreach (RSMP_Messages.StatusSubscribe_Status_Over_3_1_4 StatusSubscribe_Status in StatusSubscribe.sS) { if (StatusSubscribe_Status.sCI == null) { sError = "StatusCode Id (sCI) in " + packetHeader.type + " is missing"; return(false); } } cRoadSideObject RoadSideObject = cHelper.FindRoadSideObject(StatusSubscribe.ntsOId, StatusSubscribe.cId, bUseCaseSensitiveIds); if (RoadSideObject != null) { foreach (RSMP_Messages.StatusSubscribe_Status_Over_3_1_4 StatusSubscribe_Status in StatusSubscribe.sS) { RSMP_Messages.Status_VTQ s = new RSMP_Messages.Status_VTQ(); s.sCI = StatusSubscribe_Status.sCI; s.n = StatusSubscribe_Status.n; s.s = null; // 3.1.1 = unknown //s.q = "unknown"; // 3.1.2 = undefined ?? s.q = "undefined"; // Find status in object cStatusObject StatusObject = RoadSideObject.StatusObjects.Find(x => x.sStatusCodeId.Equals(StatusSubscribe_Status.sCI, sc)); cStatusReturnValue StatusReturnValue = null; if (StatusObject != null) { StatusReturnValue = StatusObject.StatusReturnValues.Find(x => x.sName.Equals(StatusSubscribe_Status.n, sc)); } if (StatusReturnValue != null) { RSMPGS.ProcessImage.UpdateStatusValue(ref s, StatusReturnValue.Value.GetValueType(), StatusReturnValue.Value.GetValue()); switch (statusMsgType) { case StatusMsgType.Request: RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Got status request (NTSObjectId: {0}, ComponentId: {1}, StatusCodeId: {2}, Name: {3}, Status: {4})", StatusSubscribe.ntsOId, StatusSubscribe.cId, StatusObject.sStatusCodeId, StatusReturnValue.sName, StatusReturnValue.Value.GetValue()); break; case StatusMsgType.UnSubscribe: case StatusMsgType.Subscribe: // Delete subscription if it already exists foreach (cSubscription Subscription in RoadSideObject.Subscriptions) { if (Subscription.StatusReturnValue == StatusReturnValue) { RoadSideObject.Subscriptions.Remove(Subscription); break; } } if (statusMsgType == StatusMsgType.Subscribe) { string sUpdateRate = StatusSubscribe_Status.uRt; float fUpdateRate = 0; float.TryParse(StatusSubscribe_Status.uRt, out fUpdateRate); if (fUpdateRate == 0) { float.TryParse(StatusSubscribe_Status.uRt.Replace('.', ','), out fUpdateRate); } bool bAlwaysSendOnChange = StatusSubscribe_Status.sOc; RoadSideObject.Subscriptions.Add(new cSubscription(StatusObject, StatusReturnValue, fUpdateRate, bAlwaysSendOnChange)); RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Got status subscribe (NTSObjectId: {0}, ComponentId: {1}. StatusCodeId: {2}, Name: {3}, Status: {4})", StatusSubscribe.ntsOId, StatusSubscribe.cId, StatusObject.sStatusCodeId, StatusReturnValue.sName, StatusReturnValue.Value.GetValue()); } else { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Got status unsubscribe, removed subscription (NTSObjectId: {0}, ComponentId: {1}. StatusCodeId: {2}, Name: {3}, Status: {4})", StatusSubscribe.ntsOId, StatusSubscribe.cId, StatusObject.sStatusCodeId, StatusReturnValue.sName, StatusReturnValue.Value.GetValue()); } break; } } if (s.s == null) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Error, "Got status request/subscribe, failed to update StatusCodeId or Object (could be unknown value) (NTSObjectId: {0}, ComponentId: {1}, StatusCodeId: {2}))", StatusSubscribe.ntsOId, StatusSubscribe.cId, StatusSubscribe_Status.sCI); } sS.Add(s); } } else { // Failed, fill return list with 'unknown' foreach (RSMP_Messages.StatusSubscribe_Status_Over_3_1_4 StatusSubscribe_Status in StatusSubscribe.sS) { RSMP_Messages.Status_VTQ s = new RSMP_Messages.Status_VTQ(); s.sCI = StatusSubscribe_Status.sCI; s.n = StatusSubscribe_Status.n; s.s = null; // 3.1.1 = unknown //s.q = "unknown"; // 3.1.2 = undefined ?? s.q = "undefined"; sS.Add(s); } RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Error, "Got status message, failed to find object (NTSObjectId: {0}, ComponentId: {1})", StatusSubscribe.ntsOId, StatusSubscribe.cId); } if (statusMsgType != StatusMsgType.UnSubscribe) { // Response message RSMP_Messages.StatusResponse StatusResponse = new RSMP_Messages.StatusResponse(); // Send response to client StatusResponse.mType = "rSMsg"; StatusResponse.type = (statusMsgType == StatusMsgType.Subscribe) ? "StatusUpdate" : "StatusResponse"; StatusResponse.mId = System.Guid.NewGuid().ToString(); StatusResponse.ntsOId = StatusSubscribe.ntsOId; StatusResponse.xNId = StatusSubscribe.xNId; StatusResponse.cId = StatusSubscribe.cId; StatusResponse.sTs = CreateISO8601UTCTimeStamp(); StatusResponse.sS = sS; string sSendBuffer = JSonSerializer.SerializeObject(StatusResponse); if (bHasSentAckOrNack == false) { bHasSentAckOrNack = SendPacketAck(true, packetHeader.mId, ""); } RSMPGS.JSon.SendJSonPacket(StatusResponse.type, StatusResponse.mId, sSendBuffer, true); if (RSMPGS.MainForm.checkBox_ViewOnlyFailedPackets.Checked == false) { RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Sent StatusResponse message, Type: " + StatusResponse.type + ", MsgId: " + StatusResponse.mId); } } } catch (Exception e) { sError = "Failed to deserialize packet: " + e.Message; bSuccess = false; } return(bSuccess); }
private void button_BufferedMessages_CreateRandom_Click(object sender, EventArgs e) { if (comboBox_BufferedMessages_CreateRandom_Type.SelectedIndex < 0) { return; } int iMessageCount; if (Int32.TryParse(textBox_CreateRandomMessages_Count.Text, out iMessageCount) == false || iMessageCount > 30000) { MessageBox.Show("Invalid number or too many messages (>30000)", "Create buffered messages", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (iMessageCount <= 0) { return; } Cursor.Current = Cursors.WaitCursor; Application.DoEvents(); List <cAlarmObject> AlarmObjects = new List <cAlarmObject>(); List <cStatusReturnValue> StatusReturnValues = new List <cStatusReturnValue>(); List <cStatusReturnValue> ValidStatusReturnValues = new List <cStatusReturnValue>(); List <cRoadSideObject> AggregatedStatusRoadSideObjects = new List <nsRSMPGS.cRoadSideObject>(); foreach (cRoadSideObject RoadSideObject in RSMPGS.ProcessImage.RoadSideObjects.Values) { AlarmObjects.AddRange(RoadSideObject.AlarmObjects); foreach (cStatusObject StatusObject in RoadSideObject.StatusObjects) { StatusReturnValues.AddRange(StatusObject.StatusReturnValues); ValidStatusReturnValues.AddRange(StatusObject.StatusReturnValues.FindAll(srv => srv.Value.Quality == cValue.eQuality.recent)); } if (RoadSideObject.bIsComponentGroup) { AggregatedStatusRoadSideObjects.Add(RoadSideObject); } } Random rnd = new Random(); ListView_BufferedMessages.StopSorting(); ListView_BufferedMessages.BeginUpdate(); // RSMPGS.ProcessImage.AggregatedStatusObjects string sSendBuffer; for (int iIndex = 0; iIndex < iMessageCount; iIndex++) { switch (comboBox_BufferedMessages_CreateRandom_Type.SelectedIndex) { case 0: if (AlarmObjects.Count > 0) { cAlarmObject AlarmObject = AlarmObjects[rnd.Next(0, AlarmObjects.Count - 1)]; cJSon.AlarmSpecialisation alarmSpecialisation = new cJSon.AlarmSpecialisation[] { cJSon.AlarmSpecialisation.Acknowledge, cJSon.AlarmSpecialisation.Issue, cJSon.AlarmSpecialisation.Suspend }[rnd.Next(0, 2)]; RSMP_Messages.AlarmHeaderAndBody alarmHeaderAndBody = RSMPGS.JSon.CreateAndSendAlarmMessage(AlarmObject, alarmSpecialisation, true, out sSendBuffer); cBufferedMessage BufferedMessage = new cBufferedMessage(cBufferedMessage.eMessageType.Alarm, alarmHeaderAndBody.type, alarmHeaderAndBody.mId, sSendBuffer); AddBufferedMessageToListAndListView(BufferedMessage); } break; case 1: if (AggregatedStatusRoadSideObjects.Count > 0) { cRoadSideObject RoadSideObject = AggregatedStatusRoadSideObjects[rnd.Next(0, AggregatedStatusRoadSideObjects.Count - 1)]; RSMP_Messages.AggregatedStatus aggregatedStatus = RSMPGS.JSon.CreateAndSendAggregatedStatusMessage(RoadSideObject, true, out sSendBuffer); cBufferedMessage BufferedMessage = new cBufferedMessage(cBufferedMessage.eMessageType.AggregatedStatus, aggregatedStatus.type, aggregatedStatus.mId, sSendBuffer); AddBufferedMessageToListAndListView(BufferedMessage); } break; case 2: if (StatusReturnValues.Count > 0) { cStatusReturnValue StatusReturnValue = StatusReturnValues[rnd.Next(0, StatusReturnValues.Count - 1)]; List <RSMP_Messages.Status_VTQ> sS = new List <RSMP_Messages.Status_VTQ>(); RSMP_Messages.Status_VTQ s = new RSMP_Messages.Status_VTQ(); s.sCI = StatusReturnValue.StatusObject.sStatusCodeId; s.n = StatusReturnValue.sName; s.q = StatusReturnValue.Value.Quality.ToString(); s.s = StatusReturnValue.Value.Quality == cValue.eQuality.unknown ? null : StatusReturnValue.Value.GetValue(); sS.Add(s); RSMP_Messages.StatusUpdate statusUpdate = RSMPGS.JSon.CreateAndSendStatusUpdateMessage(StatusReturnValue.StatusObject.RoadSideObject, sS, true, out sSendBuffer); cBufferedMessage BufferedMessage = new cBufferedMessage(cBufferedMessage.eMessageType.Status, statusUpdate.type, statusUpdate.mId, sSendBuffer); AddBufferedMessageToListAndListView(BufferedMessage); } break; case 3: if (ValidStatusReturnValues.Count > 0) { cStatusReturnValue StatusReturnValue = ValidStatusReturnValues[rnd.Next(0, ValidStatusReturnValues.Count - 1)]; List <RSMP_Messages.Status_VTQ> sS = new List <RSMP_Messages.Status_VTQ>(); RSMP_Messages.Status_VTQ s = new RSMP_Messages.Status_VTQ(); s.sCI = StatusReturnValue.StatusObject.sStatusCodeId; s.n = StatusReturnValue.sName; s.q = StatusReturnValue.Value.Quality.ToString(); s.s = StatusReturnValue.Value.Quality == cValue.eQuality.unknown ? null : StatusReturnValue.Value.GetValue(); sS.Add(s); RSMP_Messages.StatusUpdate statusUpdate = RSMPGS.JSon.CreateAndSendStatusUpdateMessage(StatusReturnValue.StatusObject.RoadSideObject, sS, true, out sSendBuffer); cBufferedMessage BufferedMessage = new cBufferedMessage(cBufferedMessage.eMessageType.Status, statusUpdate.type, statusUpdate.mId, sSendBuffer); AddBufferedMessageToListAndListView(BufferedMessage); } break; } //cBufferedMessage //AddBufferedMessageToListAndListView(cBufferedMessage BufferedMessage) } ListView_BufferedMessages.EndUpdate(); ListView_BufferedMessages.ResumeSorting(); Cursor.Current = Cursors.Default; }
private void ToolStripMenuItem_ProcessImage_RandomUpdates_Click(object sender, EventArgs e) { Random Rnd = new Random(); List <RSMP_Messages.Status_VTQ> sS = new List <RSMP_Messages.Status_VTQ>(); foreach (cRoadSideObject RoadSideObject in RSMPGS.ProcessImage.RoadSideObjects.Values) { sS.Clear(); // Delete subscription if it already exists foreach (cSubscription Subscription in RoadSideObject.Subscriptions) { switch (Subscription.StatusReturnValue.Value.GetValueType().ToLower()) { case "boolean": Subscription.StatusReturnValue.Value.SetValue(Rnd.Next(0, 2) >= 1 ? "true" : "false"); break; case "string": Subscription.StatusReturnValue.Value.SetValue(Rnd.Next(0, 1).ToString()); break; case "real": Subscription.StatusReturnValue.Value.SetValue((Rnd.Next(-10000, 10000) / 10).ToString()); break; default: Subscription.StatusReturnValue.Value.SetValue(Rnd.Next(-1000, 1000).ToString()); break; } if (Subscription.SubscribeStatus == cSubscription.SubscribeMethod.OnChange || Subscription.SubscribeStatus == cSubscription.SubscribeMethod.IntervalAndOnChange) { RSMP_Messages.Status_VTQ s = new RSMP_Messages.Status_VTQ(); s.sCI = Subscription.StatusObject.sStatusCodeId; s.n = Subscription.StatusReturnValue.sName; RSMPGS.ProcessImage.UpdateStatusValue(ref s, Subscription.StatusReturnValue.Value.GetValueType(), Subscription.StatusReturnValue.Value.GetValue()); sS.Add(s); } } if (sS.Count > 0) { RSMPGS.JSon.CreateAndSendStatusUpdateMessage(RoadSideObject, sS); } // Update ListView if this RoadSide object is selected if (treeView_SitesAndObjects.SelectedNode != null) { if (treeView_SitesAndObjects.SelectedNode.Tag != null) { if (treeView_SitesAndObjects.SelectedNode.Parent == null) { cSiteIdObject SiteIdObject = (cSiteIdObject)treeView_SitesAndObjects.SelectedNode.Tag; UpdateStatusListView(SiteIdObject, null); } else { if (RoadSideObject == (cRoadSideObject)treeView_SitesAndObjects.SelectedNode.Tag) { UpdateStatusListView(null, RoadSideObject); } } } } } }
private void listView_Status_MouseDoubleClick(object sender, MouseEventArgs e) { ListView listview = (ListView)sender; ListViewItem lvItem; if (listview.SelectedItems.Count == 0) { return; } lvItem = listview.SelectedItems[0]; cStatusReturnValue StatusReturnValue = (cStatusReturnValue)lvItem.Tag; cStatusObject StatusObject = StatusReturnValue.StatusObject; try { string sText = StatusReturnValue.Value.GetValue(); if (cFormsHelper.InputStatusBoxValueType("Enter new status", ref sText, StatusReturnValue.Value, StatusReturnValue.sComment, true) == DialogResult.OK) { StatusReturnValue.Value.SetValue(sText); lvItem.SubItems[4].Text = sText; // Find out if this status is subscribed foreach (cSubscription Subscription in StatusObject.RoadSideObject.Subscriptions) { if (Subscription.StatusReturnValue == StatusReturnValue) { if (Subscription.SubscribeStatus == cSubscription.SubscribeMethod.OnChange || Subscription.SubscribeStatus == cSubscription.SubscribeMethod.IntervalAndOnChange) { List <RSMP_Messages.Status_VTQ> sS = new List <RSMP_Messages.Status_VTQ>(); RSMP_Messages.Status_VTQ s = new RSMP_Messages.Status_VTQ(); s.sCI = StatusObject.sStatusCodeId; s.n = StatusReturnValue.sName; RSMPGS.ProcessImage.UpdateStatusValue(ref s, StatusReturnValue.Value.GetValueType(), StatusReturnValue.Value.GetValue()); sS.Add(s); RSMPGS.JSon.CreateAndSendStatusUpdateMessage(StatusObject.RoadSideObject, sS); } } } } } catch { } /* * int iSelectedColumn = 0; * * if (listview.SelectedItems.Count == 0) * { * return; * } * * lvItem = listview.SelectedItems[0]; * * ListViewHitTestInfo lvHitTest = listview.HitTest(LastMouseX, LastMouseY); * * foreach (ListViewItem.ListViewSubItem ScanSubItem in lvItem.SubItems) * { * if (lvHitTest.SubItem == ScanSubItem) * { * break; * } * iSelectedColumn++; * } * * try * { * // Tag is ex Status_2 * if (listview.Columns[iSelectedColumn].Tag.ToString().StartsWith("Status", StringComparison.OrdinalIgnoreCase)) * { * string sType = lvItem.SubItems[iSelectedColumn - 1].Text; * string sText = lvHitTest.SubItem.Text; * int iIndex = Int32.Parse(listview.Columns[iSelectedColumn].Tag.ToString().Substring(7)); * if (cFormsHelper.InputBox("Enter new status", "Status", ref sText, sType.Equals("base64", StringComparison.OrdinalIgnoreCase), true) == DialogResult.OK) * { * cStatusObject StatusObject = (cStatusObject)lvItem.Tag; * StatusObject.StatusReturnValues[iIndex].sStatus = sText; * lvHitTest.SubItem.Text = sText; * // Find out if this status is subscribed * foreach (cSubscription Subscription in StatusObject.RoadSideObject.Subscriptions) * { * if (Subscription.StatusReturnValue == StatusObject.StatusReturnValues[iIndex]) * { * if (Subscription.SubscribeStatus == cSubscription.Subscribe_OnChange) * { * List<RSMP_Messages.Status_VTQ> sS = new List<RSMP_Messages.Status_VTQ>(); * RSMP_Messages.Status_VTQ s = new RSMP_Messages.Status_VTQ(); * s.sCI = StatusObject.sStatusCodeId; * s.n = StatusObject.StatusReturnValues[iIndex].sName; * RSMPGS.ProcessImage.UpdateStatusValue(ref s, StatusObject.StatusReturnValues[iIndex].sType, StatusObject.StatusReturnValues[iIndex].sStatus); * sS.Add(s); * RSMPGS.JSon.CreateAndSendStatusUpdateMessage(StatusObject.RoadSideObject, sS); * } * } * } * } * } * } * catch * { * } */ }