123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
-
- using AipGateway.API.Application.Configurations;
- using Microsoft.AspNetCore.Connections;
- using Serilog;
- using System.Diagnostics;
- using System.Threading.Channels;
- namespace AipGateway.AIP.Service.WindowsService
- {
- public class AipServiceMain : BackgroundService
- {
- private readonly ILogger<AipServiceMain> _log;
- private readonly AipSettings _aipSettings;
- private static List<AipProcessInfomation> _AipProcessList = new List<AipProcessInfomation>();
- private static WebApplicationBuilder? _builder;
- public AipServiceMain(ILogger<AipServiceMain> log, AipSettings aipSettings)
- {
- _log = log;
- _aipSettings = aipSettings;
- InitializeSubProcess();
- }
- private void InitializeSubProcess()
- {
- var currentProcessPath = Process.GetCurrentProcess().MainModule!.FileName;
- int defPort = _aipSettings.Port;
- int bindings = _aipSettings.Bindings;
- for (int ii = 0; ii < bindings; ii++)
- {
- int Port = defPort + (ii+1);
- var startInfo = new ProcessStartInfo
- {
- FileName = currentProcessPath,
- Arguments = $"{Port} {_aipSettings.ProcessId}",
- CreateNoWindow = true,
- UseShellExecute = false
- };
- AipProcessInfomation aipProcessInfo = new AipProcessInfomation {
- ProcessName = currentProcessPath,
- CreateAt = DateTime.Now,
- Port = Port,
- process = Process.Start(startInfo)
- };
- if (aipProcessInfo.process == null)
- {
- _log.LogError("Aip Process Start Failed: {0} ==> Port: {1}.", currentProcessPath, Port);
- }
- else
- {
- _log.LogInformation("Aip Process Start {0} ==> Port: {1}, PID: {2}.", currentProcessPath, Port, aipProcessInfo.process.Id);
- }
- _AipProcessList.Add(aipProcessInfo);
- }
- }
- private Process? StartSubProcess(int port)
- {
- var currentProcessPath = Process.GetCurrentProcess().MainModule!.FileName;
- var startInfo = new ProcessStartInfo
- {
- FileName = currentProcessPath,
- Arguments = $"{port}",
- CreateNoWindow = true,
- UseShellExecute = false
- };
- return Process.Start(startInfo);
- }
- protected override async Task ExecuteAsync(CancellationToken stoppingToken)
- {
- stoppingToken.Register(() => _log.LogInformation("ServiceA is stopping."));
- while (!stoppingToken.IsCancellationRequested)
- {
- foreach (AipProcessInfomation aipProcess in _AipProcessList)
- {
- Process? runProcess = aipProcess.process;
- if (runProcess == null)
- {
- _log.LogError("Aip Process Start Failed: {0} ==> Port: {1}.", aipProcess.ProcessName, aipProcess.Port);
- aipProcess.process = StartSubProcess(aipProcess.Port);
- }
- else
- {
- var process = Process.GetProcessById(runProcess.Id);
- if (process == null)
- {
- _log.LogError("Aip Process Terminated: {0} ==> Port: {1}.", aipProcess.ProcessName, aipProcess.Port);
- aipProcess.process = StartSubProcess(aipProcess.Port);
- }
- }
- }
- await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
- }
- }
- public override void Dispose()
- {
- _log.LogError("Aip Service Main terminated.");
- foreach (AipProcessInfomation aipProcess in _AipProcessList)
- {
- Process? runProcess = aipProcess.process;
- if (runProcess != null)
- {
- var process = Process.GetProcessById(runProcess.Id);
- if (process != null)
- {
- _log.LogInformation("Aip Process Kill: {0}, {1}", runProcess.Id, aipProcess.Port);
- process.Kill();
- }
- }
- }
-
- base.Dispose();
- }
- public static void Start(AipSettings aipSettings)
- {
- //_builder =
- }
- }
- }
|