private void recordTag(Split tag) { if (_readerProfile.ReadingMode == ReadingMode.Desktop) { onAssignTag(tag); return; } if (_readerProfile.GatingEnabled) { TagsInView.AddOrUpdate(tag.Epc, new List <Split> { tag }, (key, tagsInView) => { if (tagsInView.Count > 100) { tagsInView.Clear(); } tagsInView.Add(tag); return(tagsInView); } ); RecentTags.AddOrUpdate(tag.Epc, tag, (key, oldTag) => tag); } else { onRecordTag(tag); } }
private void ReportTags() { if (_readerProfile.ReadingMode == ReadingMode.Desktop) { return; } onReportTags(new TagsReports($"{RecentTags.Count} recent tags and {TagsInView.Count} tags in view")); DateTime currentTime = DateTime.Now.ToLocalTime(); logger.Log(LogLevel.Trace, "RecentTags count: " + RecentTags.Count); logger.Log(LogLevel.Trace, $"TagsInView count: {TagsInView.Count}"); foreach (KeyValuePair <string, Split> recentTag in RecentTags) { TimeSpan difference = currentTime - recentTag.Value.DateTimeOfDay; if (difference.TotalSeconds > _readerProfile.GatingTime) { Split removedTag; if (RecentTags.TryRemove(recentTag.Key, out removedTag)) { logger.Log(LogLevel.Trace, "removed " + recentTag.Key); if (removedTag != null) { List <Split> tags; if (TagsInView.TryRemove(removedTag.Epc, out tags)) { logger.Log(LogLevel.Trace, $"TagsInView for {removedTag.Epc} count: {tags.Count}"); Split nearestTag = tags.OrderByDescending(x => x.Rssi).FirstOrDefault(); onRecordTag(nearestTag); } else { onRecordTag(removedTag); } } } else { logger.Log(LogLevel.Trace, "failed to remove recent tag: " + recentTag.Key); } } } }
public bool BeginReading() { RecentTags.Clear(); TagsInView.Clear(); if (_readerProfile.InventoryMode == InventoryMode.Buffer) { StartBufferRead(); } // Create a timer with a two second interval. _aTimer = new System.Timers.Timer(100); // Hook up the Elapsed event for the timer. _aTimer.Elapsed += TimerTick; _aTimer.AutoReset = true; _aTimer.Enabled = false; // _aTimer.Enabled = true; StartReadDelay(); return(true); }
public bool StopReading() { RecentTags.Clear(); TagsInView.Clear(); switch (_readerProfile.InventoryMode) { case InventoryMode.Answer: _aTimer.Enabled = false; break; case InventoryMode.RealTime: _aTimer.Enabled = false; break; case InventoryMode.Buffer: stopBufferRead(); break; } return(true); }