public static void Connect() { var commandLineArgs = Environment.GetCommandLineArgs(); _host = commandLineArgs.ElementAtOrDefault(2) ?? "."; (_tmCid, _userInfo, _serverFeatures, _stopEventHandle) = Tms.InitializeAsTaskWithoutSql( new TmOikTaskOptions { TraceName = TraceName, TraceComment = TraceComment, }, new TmInitializeOptions { ApplicationName = ApplicationName, Host = _host, TmServer = commandLineArgs.ElementAtOrDefault(1) ?? "TMS", User = commandLineArgs.ElementAtOrDefault(3) ?? "", Password = commandLineArgs.ElementAtOrDefault(4) ?? "", }); CfsConnect(); Tms.PrintMessage("Соединение с сервером установлено"); }
public Task StopAsync(CancellationToken cancellationToken) { _infr.TerminateTm(); Tms.Terminate(_tmCid, _rbCid); return(Task.CompletedTask); }
public override async Task StopAsync(CancellationToken cancellationToken) { _infr.TerminateTm(); Tms.TerminateWithoutSql(_tmCid); Tms.PrintMessage("Задача будет закрыта"); await base.StopAsync(cancellationToken); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { if (await Task.Run(() => Tms.StopEventSignalDuringWait(_stopEventHandle, 1000), stoppingToken)) { Tms.PrintMessage("Получено сообщение об остановке со стороны сервера"); _applicationLifetime.StopApplication(); break; } } }
public static void Connect() { var commandLineArgs = Environment.GetCommandLineArgs(); (_tmCid, _userInfo, _serverFeatures) = Tms.InitializeWithoutSql(new TmInitializeOptions { ApplicationName = ApplicationName, TmServer = commandLineArgs.ElementAtOrDefault(1) ?? "TMS", Host = commandLineArgs.ElementAtOrDefault(2) ?? ".", User = commandLineArgs.ElementAtOrDefault(3) ?? "", Password = commandLineArgs.ElementAtOrDefault(4) ?? "", }); }
public static void Main(string[] args) { // требуется для работы с кодировкой Win-1251 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // устанавливаем соединение с сервером ОИК try { TmStartup.Connect(); } catch (Exception ex) { Tms.PrintError(ex.Message); Environment.Exit(-1); } // .NET Generic Host CreateHostBuilder(args).Build().Run(); }
public async Task DoWork() { Tms.PrintDebug(_infr.TmUserInfo?.Name); Tms.PrintDebug(await _api.GetSystemTimeString()); var ts = new TmStatus(20, 1, 1); var ti = new TmAnalog(20, 1, 1); await _api.UpdateTagPropertiesAndClassData(ts); await _api.UpdateStatus(ts); await _api.UpdateTagPropertiesAndClassData(ti); await _api.UpdateAnalog(ti); Tms.PrintDebug(ts); Tms.PrintDebug(ti); }
private async Task Dispatch() // todo unit test { if (!await IsElixUpdated()) { return; } var(newEvents, newElix) = await _api.GetCurrentEvents(_currentElix); if (newEvents == null) { return; } Tms.PrintDebug($"Обнаружены новые события: {newEvents.Count}. Начинается обработка"); await Task.WhenAll(_workers.Select(h => h.FilterAndDoWork(newEvents))); _currentElix = newElix; }
public static bool AddWorkers(this IServiceCollection services) { if (!Directory.Exists(ConfigsPath)) { Tms.PrintError("Не найден каталог с файлами конфигурации"); return(false); } var allWorkers = FindAllWorkers(); var workersCount = 0; foreach (var file in Directory.GetFiles(ConfigsPath, "*.json")) { var name = Path.GetFileName(file); try { var worker = CreateWorker(allWorkers, name, File.ReadAllText(file)); services.AddSingleton <IHostedService>(provider => worker.Initialize(provider.GetService <IOikDataApi>(), provider.GetService <WorkerCache>())); workersCount++; } catch (JsonException ex) { Tms.PrintError($"Ошибка JSON при разборе файла {name}: {ex.Message}"); } catch (Exception ex) { Tms.PrintError($"Ошибка при разборе файла {name}: {ex.Message}"); } } if (workersCount == 0) { Tms.PrintError("Не найдено ни одного файла конфигурации"); return(false); } Tms.PrintMessage($"Всего файлов конфигурации: {workersCount}"); return(true); }
public async Task FilterAndDoWork(IReadOnlyCollection <TmEvent> tmEvents) // todo unit test { var suitableEvents = tmEvents.Where(ev => _filter.IsEventSuitable(ev)) .ToList(); if (suitableEvents.Count == 0) { Tms.PrintDebug($"Отсутствуют подходящие события для обработчика {_name}"); return; } try { await DoWork(suitableEvents); Tms.PrintDebug($"Обработаны события для обработчика {_name}"); } catch (Exception ex) { Tms.PrintError($"Ошибка при работе обработчика {_name}: {ex.Message}"); } }
private async Task <bool> LoadWorkers() { if (!Directory.Exists(ConfigsPath)) { Tms.PrintError("Не найден каталог с файлами обработчиков событий"); return(false); } var allWorkers = FindAllWorkers(); foreach (var file in Directory.GetFiles(ConfigsPath, "*.json")) { var name = Path.GetFileName(file); try { _workers.Add(await CreateWorker(allWorkers, name, File.ReadAllText(file))); } catch (JsonException ex) { Tms.PrintError($"Ошибка JSON при разборе файла {name}: {ex.Message}"); } catch (Exception ex) { Tms.PrintError($"Ошибка при разборе файла {name}: {ex.Message}"); } } if (_workers.Count == 0) { Tms.PrintError("Не найдено ни одного обработчика событий"); return(false); } Tms.PrintMessage($"Всего обработчиков событий: {_workers.Count}"); return(true); }
protected void LogError(string message) { Tms.PrintError($"{_name}: {message}"); }
protected void LogDebug(string message) { Tms.PrintDebug($"{_name}: {message}"); }