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 (); } }
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 (); } }
public void PushReceDataQueue(messageStruct _pb) { recDataQueue.Enqueue(_pb); }