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.
68 lines
1.6 KiB
68 lines
1.6 KiB
3 years ago
|
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();
|
||
|
}
|
||
|
}
|