public static void Handler() { KernelConnectors.Logger.WriteLine("[FileQueue] [Thr.Monitor] Запуск, ожидание мьютекса... "); KernelConnectors.Filter_Input_Sync.WaitOne(); { if (KernelConnectors.Filter_Input.IsConnected) { KernelConnectors.Logger.WriteLine("[FileQueue] [Thr.Monitor] Подключен "); } } KernelConnectors.Filter_Input_Sync.ReleaseMutex(); while (true) { string commandBuffer = string.Empty; try { commandBuffer = KernelConnectors.Filter_Reader.ReadString(); } catch { KernelConnectors.Logger.WriteLine("[FileQueue] [Thr.Monitor] Отключаю поток ", LoggerLib.LogLevel.WARN); break; } if (FoundVirusesManager.Exists(commandBuffer.Substring(1))) { //Если файл уже числится у нас как вирус continue; } switch (commandBuffer[0]) { case '1': { KernelConnectors.Logger.WriteLine("[FileQueue] [Thr.Monitor] Создание файла -> " + commandBuffer); ScanTasks.Add(commandBuffer.Substring(1)); break; } case '4': { KernelConnectors.Logger.WriteLine("[FileQueue] [Thr.Monitor] Изменение файла -> " + commandBuffer); ScanTasks.Add(commandBuffer.Substring(1)); break; } } } }
private static void InputHandler() { KernelConnectors.Logger.WriteLine("[ScannerResponseHandler.InputHandler] Started"); while (true) { KernelConnectors.ScannerService_Input_Sync.WaitOne(); { int id = KernelConnectors.ScannerService_Reader.ReadInt32(); byte result = KernelConnectors.ScannerService_Reader.ReadByte(); int virusId = KernelConnectors.ScannerService_Reader.ReadInt32(); var task = ScanTasks.getTaskById(id); if (task is null) { KernelConnectors.Logger.WriteLine($"[ScannerResponseHandler.InputHandler] Задача сканирования {id} не найдена", LoggerLib.LogLevel.ERROR); continue; } if (result == 2) { KernelConnectors.Logger.WriteLine($"[ScannerResponseHandler.InputHandler] Задача сканирования {id} не была выполнена, новая попытка {task.ProbesCount}", LoggerLib.LogLevel.ERROR); if (task.ProbesCount == MAX_PROBES) { KernelConnectors.Logger.WriteLine($"[ScannerResponseHandler.InputHandler] Задача сканирования {id} не была выполнена спустя несколько попыток", LoggerLib.LogLevel.ERROR); ErrorScanTasksManager.Add(1, "Message", task); onScanCompleted.Invoke(id, false, 0, task.File); } else { task.ProbesCount++; new Task(() => { Thread.Sleep(ErrorScanProbeSleep); ScanTasks.RestartScan(id); }).Start(); } continue; } onScanCompleted.Invoke(id, result == 1, virusId, task.File); } KernelConnectors.ScannerService_Input_Sync.ReleaseMutex(); } }