A quick and dirty Windows Service to start and stop network services on-demand.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

67 lines
1.6 KiB

namespace KnockKnock.Service;
using System.Net;
using System.Management.Automation;
using System.Timers;
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
Lib.Manager manager;
Timer idleTimer;
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("Starting KnockKnock");
manager = new Lib.Manager();
_logger.LogInformation("Creating proxy for :1234 -> 10.200.0.10:3389");
Lib.Proxy p = new Lib.Proxy(new IPEndPoint(IPAddress.Any, 1234), new IPEndPoint(IPAddress.Parse("10.200.0.10"), 3389));
p.Active += Proxy_Active;
p.Idle += Proxy_Idle;
_logger.LogInformation("Instantiating Idle Timer");
idleTimer = new Timer(10000);
idleTimer.Elapsed += IdleTimer_Elapsed;
_logger.LogInformation("Starting");
manager.AddProxy(p);
while (!stoppingToken.IsCancellationRequested)
{
await Task.Delay(1000, stoppingToken);
}
manager.Close();
}
private void IdleTimer_Elapsed(object? sender, ElapsedEventArgs e)
{
idleTimer.Stop();
_logger.LogDebug("Suspending VM");
PowerShell ps = PowerShell.Create();
ps.AddScript("Suspend-VM Debian");
ps.Invoke();
}
private void Proxy_Idle(Lib.Proxy sender)
{
_logger.LogDebug("Idle -- starting idle timer");
idleTimer.Start();
}
private void Proxy_Active(Lib.Proxy sender)
{
idleTimer.Stop();
_logger.LogDebug("Resuming VM");
PowerShell ps = PowerShell.Create();
ps.AddScript("Resume-VM Debian");
ps.Invoke();
}
}