public void processData(byte[] message, int messageLength)
        {
            messageStruct ms = new messageStruct();
            ms.all_data = new byte[messageLength];
            Array.ConstrainedCopy (message, 0, ms.all_data, 0, ms.all_data.Length);;
            ms.length = messageLength;

            // Add messagestruct to the real list that is thread safe
            _listDataBuffer_Log.Add (ms);
            ms = null;

            if (_listDataBuffer_Log.Count > 0) {
                if (_listDataBuffer_Log.ElementAt<messageStruct> (0) != null) {
                    // DATA
                    try
                    {
                        // Extract the first message
                        byte[] data = new byte[_listDataBuffer_Log.ElementAt<messageStruct> (0).length];
                        Array.ConstrainedCopy (_listDataBuffer_Log.ElementAt<messageStruct> (0).all_data, 0, data, 0, data.Length);

                        string sdata = bytesToString (data).Trim ();
                        string scase = sdata.Substring (15, 4);

                        //Console.WriteLine(sdata);

                        string[] ps30;
                        string[] ps30_system_details;

                        // Based on the metadata type
                        switch (scase) {
                        case "PS30":

                            ps30 = sdata.Split ('\r');

                            //Console.WriteLine(ps30[3]);

                            ps30_system_details = ps30 [3].Split (',');

                            if (ps30_system_details[5].Trim() != _lastSys ||
                                ps30_system_details[6].Trim() != _lastGrp) {

                                if (_lastSys.Length > 0 &&
                                    _lastGrp.Length > 0) {

                                    logsDetails ld = new logsDetails();
                                    ld.sys = _lastSys;
                                    ld.grp = _lastGrp;

                                    TimeSpan ts = DateTime.Now - _lastStart;
                                    ld.secs = (long)ts.TotalSeconds;

                                    ld.added = DateTime.Now;

                                    _listLogDetails_Log.Add(ld);

                                    // Add to list for display
                                    int i = -1;

                                    i = _log.LogsList.FindIndex(c => c.sys == _lastSys &&
                                        c.grp == _lastGrp);

                                    if (i == -1)
                                    {
                                        LogsDisplay Item = new LogsDisplay();
                                        Item.sys = _lastSys;
                                        Item.grp = _lastGrp;
                                        Item.alert = false;
                                        Item.lastalert = initialDateTime;

                                        _log.LogsList.Add(Item);
                                    }
                                }

                                _lastSys = ps30_system_details[5].Trim();
                                _lastGrp = ps30_system_details[6].Trim();
                                _lastStart = DateTime.Now;
                            }

                            // Get unique sys/grp values
                            var selectedSysgrp =
                                _listLogDetails_Log.Select(d => new {d.sys, d.grp} ).Distinct();

                            foreach (var sysgrp in selectedSysgrp)
                            {
                                var result = _listLogDetails_Log.Where(d => d.sys == sysgrp.sys &&
                                    d.grp == sysgrp.grp);

                                long secsTotal = result.Sum(span => span.secs);

                                //Console.WriteLine("{0}-{1}: {2} secs, last: {3}", sysgrp.sys, sysgrp.grp, secsTotal);

                                int i = _log.LogsList.FindIndex(l => l.sys == sysgrp.sys &&
                                    l.grp == sysgrp.grp);

                                if (i != -1) {

                                    //Console.WriteLine("{0}-{1}: {2} secs, last: {3}", sysgrp.sys, sysgrp.grp, secsTotal, _log.LogsList[i].lastalert);

                                    int MIN_SECONDS_BEFORE_ALERT;
                                    int.TryParse(Form1._Secs.Text, out MIN_SECONDS_BEFORE_ALERT);
                                    if (secsTotal >= MIN_SECONDS_BEFORE_ALERT) {
                                        TimeSpan ts = DateTime.Now - _log.LogsList[i].lastalert;

                                        int MIN_MINUTES_BEFORE_NEXT_ALERT;
                                        int.TryParse(Form1._Mins.Text, out MIN_MINUTES_BEFORE_NEXT_ALERT);
                                        if (ts.TotalMinutes >= MIN_MINUTES_BEFORE_NEXT_ALERT) {
                                            //Console.WriteLine("ALERT!: {0}-{1}", sysgrp.sys, sysgrp.grp);

                                            _currentAlert_Sys = sysgrp.sys;
                                            _currentAlert_Grp = sysgrp.grp;
                                            _currentAlert_Alert = true;

                                            _log.LogsList[i].lastalert = DateTime.Now;
                                        }
                                    }
                                }
                            }

                            // Remove old log from list
                            DateTime dateTime = DateTime.Now;
                            TimeSpan timeSpan = TimeSpan.FromSeconds(60);

                            dateTime = new DateTime(
                                dateTime.Ticks - timeSpan.Ticks,
                                dateTime.Kind
                            );

                            _listLogDetails_Log.RemoveAll(x => x.added <= dateTime);

                            break;
                        }
                    }  catch (Exception ex) {
                        Console.WriteLine (ex.Message);
                    }
                }

                // Remove the up-most message from list
                // Thread safe
                _listDataBuffer_Log.Take ();
            }
        }
        public void processData(byte[] message, int messageLength)
        {
            messageStruct ms = new messageStruct();

            //Console.WriteLine(bytesToString(message));

            ms.all_data = new byte[messageLength];
            Array.ConstrainedCopy (message, 0, ms.all_data, 0, ms.all_data.Length);;
            ms.length = messageLength;

            // Add messagestruct to the real list that is thread safe
            _listDataBuffer_Screen.Add (ms);
            ms = null;

            if (_listDataBuffer_Screen.Count > 0) {
                if (_listDataBuffer_Screen.ElementAt<messageStruct> (0) != null) {
                    // DATA
                    try
                    {
                        // Extract the first message
                        byte[] data = new byte[_listDataBuffer_Screen.ElementAt<messageStruct> (0).length];
                        Array.ConstrainedCopy (_listDataBuffer_Screen.ElementAt<messageStruct> (0).all_data, 0, data, 0, data.Length);

                        string sdata = bytesToString (data).Trim ();
                        string scase = sdata.Substring (15, 4);

                        //Console.WriteLine(scase);

                        string[] ps01;
                        string[] ps02;
                        string[] ps30;
                        string[] ps40;
                        string[] ps01_system_details;
                        string[] ps02_system_details;
                        string[] ps30_system_details;
                        string[] ps40_system_details;

                        // Based on the metadata type
                        switch (scase) {
                        case "PS01":
                            ps01 = sdata.Split ('\r');
                            ps01_system_details = ps01 [0].Split (',');

                            _scannerScreen_Model = ps01_system_details [1].Trim ();

                            break;
                        case "PS02":
                            ps02 = sdata.Split ('\r');
                            ps02_system_details = ps02 [0].Split (',');

                            _scannerScreen_Model = string.Format("{0} *ADMIN*", ps02_system_details [1].Trim ());

                            break;
                        case "PS30":
                            // The scanner screen
                            // Scanner model, Signal strength
                            // Line 1: System
                            // Line 2: Group
                            // Line 3: Frequency
                            // Line 4: Activated systems
                            // Line 5: Activated groups per system

                            ps30 = sdata.Split ('\r');

                            ps30_system_details = ps30 [6].Split (',');

                            int.TryParse(ps30_system_details[1].Trim(), out _scannerScreen_Signal);

                            ps30_system_details = ps30 [2].Split (',');
                            _scannerScreen_Line1 = ps30_system_details [4].Trim ();

                            string line2 = ps30_system_details [6];
                            line2 = line2.Substring(0, line2.Length - 3);
                            _scannerScreen_Line2 = line2;

                            _scannerScreen_Line3 = ps30_system_details [8].Trim ();
                            _scannerScreen_Line4 = ps30_system_details [10].Trim ();
                            _scannerScreen_Line5 = ps30_system_details [12].Trim ();
                            break;
                        case "PS40":
                            Console.WriteLine("<--" + sdata);
                            ps40 = sdata.Split ('\r');
                            ps40_system_details = ps40 [0].Split (' ');

                            if (sdata == "STARTDAT 00028 PS40   ENDDAT")
                                systemStep1.Set();

                            if (ps40_system_details[3].Substring(0, 3) == "SCT")
                            {
                                systemsList = new List<string>();

                                string[] temp = ps40_system_details[3].Split(',');
                                nbSystems = Convert.ToInt32(temp[1]);

                                ps40_system_details = ps40[1].Split(' ');

                                temp = ps40_system_details[0].Split(',');

                                nextSystem = temp[1];
                                systemStep3.Set();
                            }

                            if (ps40_system_details[3].Substring(0, 3) == "SIN")
                            {
                                ps40_system_details = ps40[0].Split(',');
                                systemName = ps40_system_details[2];

                                systemsList.Add(string.Format("{0}", systemName));

                                if (ps40_system_details[13] != "-1")
                                    nextSystem = ps40_system_details[13];
                                systemStep4.Set();
                            }

                            break;
                        }
                    } catch {
                    }
                }

                // Remove the up-most message from list
                // Thread safe
                _listDataBuffer_Screen.Take ();
            }
        }
Example #3
0
 public void PushSendDataQueue(messageStruct smsg)
 {
     sendMemory.Add(smsg);
 }
        public void processData(byte[] message, int messageLength)
        {
            messageStruct ms = new messageStruct();
            ms.all_data = new byte[messageLength];
            Array.ConstrainedCopy (message, 0, ms.all_data, 0, ms.all_data.Length);;
            ms.length = messageLength;

            // Add messagestruct to the real list that is thread safe
            _listDataBuffer_Screen.Add (ms);
            ms = null;

            if (_listDataBuffer_Screen.Count > 0) {
                if (_listDataBuffer_Screen.ElementAt<messageStruct> (0) != null) {
                    // DATA
                    try
                    {
                        // Extract the first message
                        byte[] data = new byte[_listDataBuffer_Screen.ElementAt<messageStruct> (0).length];
                        Array.ConstrainedCopy (_listDataBuffer_Screen.ElementAt<messageStruct> (0).all_data, 0, data, 0, data.Length);

                        string sdata = bytesToString (data).Trim ();
                        string scase = sdata.Substring (15, 4);

                        //Console.WriteLine(sdata);

                        string[] ps01;
                        string[] ps02;
                        string[] ps30;
                        string[] ps01_system_details;
                        string[] ps02_system_details;
                        string[] ps30_system_details;
                        string[] ps30_system_details_glg;
                        string[] ps30_system_details_pwr;

                        // Based on the metadata type
                        switch (scase) {
                        case "PS01":

                            //Console.WriteLine(sdata);

                            ps01 = sdata.Split ('\r');
                            ps01_system_details = ps01 [0].Split (',');

                            _scannerScreen_Model = ps01_system_details [1].Trim ();

                            break;
                        case "PS02":

                            //Console.WriteLine(sdata);

                            ps02 = sdata.Split ('\r');
                            ps02_system_details = ps02 [0].Split (',');

                            _scannerScreen_Model = string.Format("{0} *ADMIN*", ps02_system_details [1].Trim ());

                            break;
                        case "PS30":
                            // The scanner screen
                            // Scanner model, Signal strength
                            // Line 1: System
                            // Line 2: Group
                            // Line 3: Frequency
                            // Line 4: Activated systems
                            // Line 5: Activated groups per system

                            //Console.WriteLine(sdata);

                            ps30 = sdata.Split ('\r');

                            ps30_system_details = ps30 [6].Split (',');

                            int.TryParse(ps30_system_details[1].Trim(), out _scannerScreen_Signal);

                            ps30_system_details = ps30 [2].Split (',');

                            if (ps30_system_details [3] == "________________")
                            {
                                _scannerScreen_Line1 = ps30_system_details [2].Trim ();
                                _scannerScreen_Line2 = ps30_system_details [5].Trim () == string.Empty ?
                                                       ps30_system_details [4].Trim () :
                                                       "[" + ps30_system_details [4].Trim () + "]";
                                _scannerScreen_Line3 = ps30_system_details [7].Trim () == string.Empty ?
                                                       ps30_system_details [6].Trim () :
                                                       "[" + ps30_system_details [6].Trim () + "]";
                                _scannerScreen_Line4 = ps30_system_details [9].Trim () == string.Empty ?
                                                       ps30_system_details [8].Trim () :
                                                       "[" + ps30_system_details [8].Trim () + "]";
                                _scannerScreen_Line5 = string.Empty;
                            }
                            else {

                                //Console.WriteLine(BitConverter.ToString(System.Text.Encoding.ASCII.GetBytes( ps30_system_details [2])));

                                ps30_system_details_glg = ps30 [3].Split(',');
                                ps30_system_details_pwr = ps30 [6].Split(',');

                                _scannerScreen_Line1 = ps30_system_details [4].Trim ();

                                string line2 = ps30_system_details [6];
                                //0x3F a flusher
                                _scannerScreen_Line2 = line2.Replace((char)0x3f, ' ');

                                string glgType = ps30_system_details_glg[2].Trim();
                                string pwrFreq = ps30_system_details_pwr[2].Trim();

                                if (pwrFreq != string.Empty)
                                    pwrFreq = string.Format("{0}.{1}",
                                        pwrFreq.Substring(0,4).TrimStart('0'),
                                        pwrFreq.Substring(4,4));

                                _scannerScreen_Line3 = string.Format("{0} {1}",
                                    glgType,
                                    pwrFreq);

                                _scannerScreen_Line4 = ps30_system_details [10].Trim ();

                                _scannerScreen_Line5 = ps30_system_details [12].Trim ();
                            }
                            break;
                        }
                    } catch {
                    }
                }

                // Remove the up-most message from list
                // Thread safe
                _listDataBuffer_Screen.Take ();
            }
        }
Example #5
0
 public void PushReceDataQueue(messageStruct _pb)
 {
     recDataQueue.Enqueue(_pb);
 }