Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
 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";
         }
     }
 }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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;
        }
Esempio n. 6
0
        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);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 7
0
        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
             * {
             * }
             */
        }