86 lines
2.7 KiB
C#
86 lines
2.7 KiB
C#
using OrbisSuiteService.Service;
|
|
using System.ServiceProcess;
|
|
using Microsoft.Extensions.Logging;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using NetFwTypeLib;
|
|
using OrbisLib2.Common;
|
|
|
|
#if DEBUG
|
|
var service = new Service();
|
|
service.OnStartPublic(new string[0]);
|
|
#else
|
|
ServiceBase.Run(new Service());
|
|
#endif
|
|
|
|
class Service : ServiceBase
|
|
{
|
|
private ServiceProvider _serviceProvider;
|
|
#if DEBUG
|
|
bool RunService = true;
|
|
#endif
|
|
|
|
public Service()
|
|
{
|
|
IServiceCollection services = new ServiceCollection();
|
|
|
|
services.AddLogging(builder =>
|
|
{
|
|
builder.AddSimpleConsole(options =>
|
|
{
|
|
options.IncludeScopes = false;
|
|
options.SingleLine = true;
|
|
options.TimestampFormat = "HH:mm:ss ";
|
|
});
|
|
});
|
|
|
|
_serviceProvider = services.BuildServiceProvider();
|
|
}
|
|
|
|
public void OnStartPublic(string[] args)
|
|
{
|
|
// setup up rule in firewall for event listener.
|
|
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
|
|
List<INetFwRule> firewallRules = firewallPolicy.Rules.OfType<INetFwRule>().Where(x => x.Name.Contains("OrbisSuiteEvents")).ToList();
|
|
|
|
// Only add the rule when it does not exist.
|
|
if(firewallRules.Count <= 0)
|
|
{
|
|
INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
|
|
firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
|
|
firewallRule.Description = "Allow for events to be sent from target PS4 to windows service.";
|
|
firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN;
|
|
firewallRule.Enabled = true;
|
|
firewallRule.InterfaceTypes = "All";
|
|
firewallRule.Name = "OrbisSuiteEvents";
|
|
firewallRule.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;
|
|
firewallRule.LocalPorts = Config.EventPort.ToString();
|
|
firewallPolicy.Rules.Add(firewallRule);
|
|
}
|
|
|
|
// Create logger instance.
|
|
var logger = _serviceProvider.GetService<ILoggerFactory>()
|
|
.AddFile(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\Orbis Suite\Logging\OrbisServiceLog.txt")
|
|
.CreateLogger<Program>();
|
|
|
|
var dp = new Dispatcher(logger);
|
|
#if DEBUG
|
|
while (RunService) { Thread.Sleep(10); }
|
|
#endif
|
|
}
|
|
|
|
protected override void OnStart(string[] args)
|
|
{
|
|
OnStartPublic(args);
|
|
}
|
|
protected override void OnStop()
|
|
{
|
|
Console.WriteLine("Stopping");
|
|
#if DEBUG
|
|
RunService = false;
|
|
#endif
|
|
}
|
|
protected override void OnPause()
|
|
{
|
|
Console.WriteLine("Pausing");
|
|
}
|
|
} |