private void RemoveBufferedMessages(cBufferedMessage.eMessageType MessageType)
        {
            Cursor.Current = Cursors.WaitCursor;
            Application.DoEvents();

            ListView_BufferedMessages.StopSorting();
            ListView_BufferedMessages.BeginUpdate();
            for (int iIndex = ListView_BufferedMessages.Items.Count - 1; iIndex >= 0; iIndex--)
            {
                cBufferedMessage BufferedMessage = (cBufferedMessage)ListView_BufferedMessages.Items[iIndex].Tag;
                if (BufferedMessage.MessageType == MessageType)
                {
                    ListView_BufferedMessages.Items.RemoveAt(iIndex);
                }
            }
            RSMPGS.ProcessImage.BufferedMessages.RemoveAll(bbuf => bbuf.MessageType == MessageType);

            /*
             *
             * List<cBufferedMessage> BufferedMessagesToSend =
             * foreach (cBufferedMessage BufferedMessage in BufferedMessagesToSend)
             * {
             * ListView_BufferedMessages.Items.Remove(BufferedMessage.lvItem);
             * }
             * RSMPGS.ProcessImage.BufferedMessages.RemoveAll(bbuf => bbuf.MessageType == MessageType);
             */
            ListView_BufferedMessages.EndUpdate();
            ListView_BufferedMessages.ResumeSorting();

            textBox_BufferedMessages.Text = RSMPGS.ProcessImage.BufferedMessages.Count.ToString();

            Cursor.Current = Cursors.Default;
        }
示例#2
0
        public RSMP_Messages.AggregatedStatus CreateAndSendAggregatedStatusMessage(cRoadSideObject RoadSideObject, bool bCreateMessageOnly, out string sSendBuffer)
        {
            sSendBuffer = "";

            RSMP_Messages.AggregatedStatus AggregatedStatusMessage = new RSMP_Messages.AggregatedStatus();

            AggregatedStatusMessage.mType  = "rSMsg";
            AggregatedStatusMessage.type   = "AggregatedStatus";
            AggregatedStatusMessage.mId    = System.Guid.NewGuid().ToString();
            AggregatedStatusMessage.ntsOId = RoadSideObject.sNTSObjectId;
            AggregatedStatusMessage.xNId   = RoadSideObject.sExternalNTSId;
            AggregatedStatusMessage.cId    = RoadSideObject.sComponentId;

            if (RoadSideObject.dtLastChangedAggregatedStatus == DateTime.MinValue)
            {
                RoadSideObject.dtLastChangedAggregatedStatus = DateTime.Now;
            }

            AggregatedStatusMessage.aSTS = CreateISO8601UTCTimeStamp(RoadSideObject.dtLastChangedAggregatedStatus);

            AggregatedStatusMessage.fP = RoadSideObject.sFunctionalPosition.Length > 0 ? RoadSideObject.sFunctionalPosition : null;
            AggregatedStatusMessage.fS = RoadSideObject.sFunctionalState.Length > 0 ? RoadSideObject.sFunctionalState : null;

            AggregatedStatusMessage.se = (bool[])RoadSideObject.bBitStatus.Clone();

            for (int iIndex = 0; iIndex < RoadSideObject.bBitStatus.GetLength(0); iIndex++)
            {
                AggregatedStatusMessage.se[iIndex] = RoadSideObject.bBitStatus[iIndex];
            }

            sSendBuffer = JSonSerializer.SerializeObject(AggregatedStatusMessage);

            if (bCreateMessageOnly)
            {
                return(AggregatedStatusMessage);
            }

            if (RSMPGS.JSon.SendJSonPacket(AggregatedStatusMessage.type, AggregatedStatusMessage.mId, sSendBuffer, true))
            {
                if (RSMPGS.MainForm.checkBox_ViewOnlyFailedPackets.Checked == false)
                {
                    RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Sent aggregated status message, ntsOId: " + AggregatedStatusMessage.ntsOId + ", Type: " + AggregatedStatusMessage.type + ", MsgId: " + AggregatedStatusMessage.mId);
                }
            }
            else
            {
                if (cHelper.IsSettingChecked("BufferAndSendAggregatedStatusWhenConnect"))
                {
                    cBufferedMessage BufferedMessage = new cBufferedMessage(cBufferedMessage.eMessageType.AggregatedStatus, AggregatedStatusMessage.type, AggregatedStatusMessage.mId, sSendBuffer);
                    RSMPGS.MainForm.AddBufferedMessageToListAndListView(BufferedMessage);
                    RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Warning, "Buffered aggregated status message, ntsOId: " + AggregatedStatusMessage.ntsOId + ", Type: " + AggregatedStatusMessage.type + ", MsgId: " + AggregatedStatusMessage.mId);
                }
            }

            return(AggregatedStatusMessage);
        }
        public void AddBufferedMessageToListAndListView(cBufferedMessage BufferedMessage)
        {
            ListViewItem lvItem = new ListViewItem(BufferedMessage.MessageType.ToString());

            lvItem.SubItems.Add(BufferedMessage.sMessageId);
            lvItem.SubItems.Add(BufferedMessage.sSendString);
            lvItem.Tag = BufferedMessage;
            ListView_BufferedMessages.Items.Add(lvItem);
            BufferedMessage.lvItem = lvItem;
            RSMPGS.ProcessImage.BufferedMessages.Add(BufferedMessage);
            textBox_BufferedMessages.Text = RSMPGS.ProcessImage.BufferedMessages.Count.ToString();
        }
示例#4
0
        public RSMP_Messages.StatusUpdate CreateAndSendStatusUpdateMessage(cRoadSideObject RoadSideObject, List <RSMP_Messages.Status_VTQ> sS, bool bCreateMessageOnly, out string sSendBuffer)
        {
            sSendBuffer = "";

            RSMP_Messages.StatusUpdate StatusUpdateMessage = new RSMP_Messages.StatusUpdate();

            StatusUpdateMessage.mType = "rSMsg";
            StatusUpdateMessage.type  = "StatusUpdate";
            StatusUpdateMessage.mId   = System.Guid.NewGuid().ToString();

            StatusUpdateMessage.ntsOId = RoadSideObject.sNTSObjectId;
            StatusUpdateMessage.xNId   = RoadSideObject.sExternalNTSId;
            StatusUpdateMessage.cId    = RoadSideObject.sComponentId;

            StatusUpdateMessage.sTs = CreateISO8601UTCTimeStamp();

            StatusUpdateMessage.sS = sS;

            sSendBuffer = JSonSerializer.SerializeObject(StatusUpdateMessage);

            if (bCreateMessageOnly)
            {
                return(StatusUpdateMessage);
            }

            if (RSMPGS.JSon.SendJSonPacket(StatusUpdateMessage.type, StatusUpdateMessage.mId, sSendBuffer, true))
            {
                if (RSMPGS.MainForm.checkBox_ViewOnlyFailedPackets.Checked == false)
                {
                    RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Sent Status Update message, Type: " + StatusUpdateMessage.type + ", MsgId: " + StatusUpdateMessage.mId);
                }
            }
            else
            {
                if (cHelper.IsSettingChecked("BufferAndSendStatusUpdatesWhenConnect"))
                {
                    cBufferedMessage BufferedMessage = new cBufferedMessage(cBufferedMessage.eMessageType.Status, StatusUpdateMessage.type, StatusUpdateMessage.mId, sSendBuffer);
                    RSMPGS.MainForm.AddBufferedMessageToListAndListView(BufferedMessage);
                    RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Warning, "Buffered Status Update message, Type: " + StatusUpdateMessage.type + ", MsgId: " + StatusUpdateMessage.mId);
                }
            }

            return(StatusUpdateMessage);
        }
示例#5
0
        public RSMP_Messages.AlarmHeaderAndBody CreateAndSendAlarmMessage(cAlarmObject AlarmObject, AlarmSpecialisation alarmSpecialisation, bool bCreateMessageOnly, out string sSendBuffer, out cAlarmEvent AlarmEvent)
        {
            sSendBuffer = "";

            RSMP_Messages.AlarmHeaderAndBody AlarmHeaderAndBody;
            //      RSMP_Messages.AlarmHeader AlarmHeader;


            AlarmHeaderAndBody = new RSMP_Messages.AlarmHeaderAndBody();

            AlarmEvent = new cAlarmEvent();

            try
            {
                AlarmHeaderAndBody.mType  = "rSMsg";
                AlarmHeaderAndBody.type   = "Alarm";
                AlarmHeaderAndBody.mId    = System.Guid.NewGuid().ToString();
                AlarmHeaderAndBody.ntsOId = AlarmObject.RoadSideObject.sNTSObjectId;
                AlarmHeaderAndBody.xNId   = AlarmObject.RoadSideObject.sExternalNTSId;
                AlarmHeaderAndBody.cId    = AlarmObject.RoadSideObject.sComponentId;
                AlarmHeaderAndBody.aCId   = AlarmObject.sAlarmCodeId;
                AlarmHeaderAndBody.xACId  = AlarmObject.sExternalAlarmCodeId;
                AlarmHeaderAndBody.xNACId = AlarmObject.sExternalNTSAlarmCodeId;
                AlarmHeaderAndBody.rvs    = new List <RSMP_Messages.AlarmReturnValue>();


                AlarmEvent.AlarmObject = AlarmObject;

                AlarmHeaderAndBody.ack = AlarmObject.bAcknowledged ? "Acknowledged" : "notAcknowledged";
                AlarmHeaderAndBody.aS  = AlarmObject.bActive ? "Active" : "inActive";
                AlarmHeaderAndBody.sS  = AlarmObject.bSuspended ? "Suspended" : "notSuspended";

                switch (alarmSpecialisation)
                {
                case AlarmSpecialisation.Issue:
                    AlarmHeaderAndBody.aSp = "Issue";
                    AlarmEvent.sEvent      = AlarmHeaderAndBody.aSp + " / " + AlarmHeaderAndBody.aS;
                    break;

                case AlarmSpecialisation.Acknowledge:
                    AlarmHeaderAndBody.aSp = "Acknowledge";
                    AlarmEvent.sEvent      = AlarmHeaderAndBody.aSp + " / " + AlarmHeaderAndBody.ack;
                    break;

                case AlarmSpecialisation.Suspend:
                    AlarmHeaderAndBody.aSp = "Suspend";
                    AlarmEvent.sEvent      = AlarmHeaderAndBody.aSp + " / " + AlarmHeaderAndBody.sS;
                    break;
                }

                if (AlarmObject.bActive == false && AlarmObject.bAcknowledged)
                {
                    AlarmObject.AlarmCount = 0;
                }

                if (AlarmObject.dtLastChangedAlarmStatus == DateTime.MinValue)
                {
                    AlarmObject.dtLastChangedAlarmStatus = DateTime.Now;
                }

                AlarmHeaderAndBody.aTs = CreateISO8601UTCTimeStamp(AlarmObject.dtLastChangedAlarmStatus);
                AlarmHeaderAndBody.cat = AlarmObject.sCategory;
                AlarmHeaderAndBody.pri = AlarmObject.sPriority;

                AlarmEvent.sAlarmCodeId = AlarmObject.sAlarmCodeId;
                AlarmEvent.sDirection   = "Sent";
                AlarmEvent.sTimeStamp   = UnpackISO8601UTCTimeStamp(AlarmHeaderAndBody.aTs); // String.Format("{0:yyyy-MM-dd}T{0:HH:mm:ss.fff}", UnpackISO8601UTCTimeStamp(AlarmHeaderAndBody.aTs));
                AlarmEvent.sMessageId   = AlarmHeaderAndBody.mId;

                foreach (cAlarmReturnValue AlarmReturnValue in AlarmObject.AlarmReturnValues)
                {
                    RSMP_Messages.AlarmReturnValue rv = new RSMP_Messages.AlarmReturnValue();
                    rv.n = AlarmReturnValue.sName;
                    rv.v = AlarmReturnValue.Value.GetValue();
                    AlarmHeaderAndBody.rvs.Add(rv);
                    AlarmEvent.AlarmEventReturnValues.Add(new nsRSMPGS.cAlarmEventReturnValue(rv.n, rv.v));
                }

                sSendBuffer = JSonSerializer.SerializeObject(AlarmHeaderAndBody);

                if (bCreateMessageOnly)
                {
                    return(AlarmHeaderAndBody);
                }

                if (RSMPGS.JSon.SendJSonPacket(AlarmHeaderAndBody.type, AlarmHeaderAndBody.mId, sSendBuffer, true))
                {
                    if (RSMPGS.MainForm.checkBox_ViewOnlyFailedPackets.Checked == false)
                    {
                        RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Info, "Sent alarm message, AlarmCode: " + AlarmObject.sAlarmCodeId + ", Type: " + AlarmHeaderAndBody.type + "/" + AlarmHeaderAndBody.aSp + "/" + AlarmHeaderAndBody.aS + ", MsgId: " + AlarmHeaderAndBody.mId);//, SequenceNumber: " + AlarmHeaderAndBody.sNr);
                    }
                }
                else
                {
                    if (cHelper.IsSettingChecked("BufferAndSendAlarmsWhenConnect"))
                    {
                        cBufferedMessage BufferedMessage = new cBufferedMessage(cBufferedMessage.eMessageType.Alarm, AlarmHeaderAndBody.type, AlarmHeaderAndBody.mId, sSendBuffer);
                        RSMPGS.MainForm.AddBufferedMessageToListAndListView(BufferedMessage);
                        RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Warning, "Buffered alarm message, AlarmCode: " + AlarmObject.sAlarmCodeId + ", Type: " + AlarmHeaderAndBody.type + "/" + AlarmHeaderAndBody.aSp + "/" + AlarmHeaderAndBody.aS + ", MsgId: " + AlarmHeaderAndBody.mId);// + ", SequenceNumber: " + AlarmHeaderAndBody.sNr);
                    }
                }

                //        RSMPGS.ProcessImage.SequenceNumber_Alarm++;
            }
            catch (Exception e)
            {
                RSMPGS.SysLog.SysLog(cSysLogAndDebug.Severity.Error, "Failed to create alarm message: {0}", e.Message);
                AlarmEvent = null;
            }

            return(AlarmHeaderAndBody);
        }
        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;
        }