//Обработчик отправления данных в ГИБДД private void IntuderQueueHandle() { while (true) { var allhandled = true; //Все ли потоки обработки данных завершены foreach (var key in _states.Keys) { allhandled &= _states[key] == false && _inhurtHandled <= 0; } if (_stoped && allhandled && _intuders.Count == 0) { AllDataHandled = true; break; } if (_intuders.Count > 0) { var intuder = new Intuder(); //Пытаемся получить данные о нарушителе while (!_intuders.TryDequeue(out intuder)) { ; } //Отправляем данные в ГИБДД if (!intuder.IsSended) { _intudersDb.Add(intuder); WriteToLog(this, "Сведения о нарушителе " + intuder.Name + "переданы в Гибдд"); Thread.Sleep(2000); } } } }
//Обработчик данных, пришедших с камеры private void StartDataHandle(int number, byte[] photo, int speed, int camera) { //Моделируем идентификацию гражданина по номеру авто var name = GetNameByAutoNumber(number); Thread.Sleep(3000); if (speed > 60) { WriteToLog(this, "Нарушитель идентифицирован. Номер: " + number + " Имя: " + name + "Скорость " + speed); //Моделируем обработку изображения Thread.Sleep(5000); WriteToLog(this, "Изображение, доказывающее нарушение гражданином " + name + " ПДД обработано."); //Добавляем сведения в очередь отправки в ГИБДД var intuder = new Intuder { Name = name, Photo = photo, Speed = speed, AutoNumber = number, IsSended = false }; _intuders.Enqueue(intuder); } lock (_inhurtLocker) { _inhurtHandled--; } }