updated console project main method to use wait handles.

This commit is contained in:
Shreyas Zare
2020-06-06 18:13:01 +05:30
parent 679cb92077
commit 68d52e4f65
2 changed files with 43 additions and 59 deletions

View File

@@ -1,6 +1,6 @@
/* /*
Technitium DNS Server Technitium DNS Server
Copyright (C) 2019 Shreyas Zare (shreyas@technitium.com) Copyright (C) 2020 Shreyas Zare (shreyas@technitium.com)
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -32,6 +32,8 @@ namespace DnsServerApp
if (args.Length == 1) if (args.Length == 1)
configFolder = args[0]; configFolder = args[0];
EventWaitHandle waitHandle = new ManualResetEvent(false);
EventWaitHandle exitHandle = new ManualResetEvent(false);
WebService service = null; WebService service = null;
try try
@@ -39,6 +41,18 @@ namespace DnsServerApp
service = new WebService(configFolder, new Uri("https://go.technitium.com/?id=21")); service = new WebService(configFolder, new Uri("https://go.technitium.com/?id=21"));
service.Start(); service.Start();
Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e)
{
e.Cancel = true;
waitHandle.Set();
};
AppDomain.CurrentDomain.ProcessExit += delegate (object sender, EventArgs e)
{
waitHandle.Set();
exitHandle.WaitOne();
};
Console.WriteLine("Technitium DNS Server was started successfully."); Console.WriteLine("Technitium DNS Server was started successfully.");
Console.WriteLine("Using config folder: " + service.ConfigFolder); Console.WriteLine("Using config folder: " + service.ConfigFolder);
Console.WriteLine(""); Console.WriteLine("");
@@ -46,44 +60,22 @@ namespace DnsServerApp
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("Press [CTRL + C] to stop..."); Console.WriteLine("Press [CTRL + C] to stop...");
Thread main = Thread.CurrentThread; waitHandle.WaitOne();
Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e)
{
e.Cancel = true;
main.Interrupt();
};
AppDomain.CurrentDomain.ProcessExit += delegate (object sender, EventArgs e)
{
if (service != null)
{
Console.WriteLine("");
Console.WriteLine("Technitium DNS Server is stopping...");
service.Dispose();
service = null;
Console.WriteLine("Technitium DNS Server was stopped successfully.");
} }
};
Thread.Sleep(Timeout.Infinite);
}
catch (ThreadInterruptedException)
{ }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine(ex.ToString()); Console.WriteLine(ex.ToString());
} }
finally finally
{
if (service != null)
{ {
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("Technitium DNS Server is stopping..."); Console.WriteLine("Technitium DNS Server is stopping...");
if (service != null)
service.Dispose(); service.Dispose();
service = null;
Console.WriteLine("Technitium DNS Server was stopped successfully."); Console.WriteLine("Technitium DNS Server was stopped successfully.");
} exitHandle.Set();
} }
} }
} }

View File

@@ -67,6 +67,8 @@ namespace DnsServerApp
if (args.Length == 1) if (args.Length == 1)
configFolder = args[0]; configFolder = args[0];
EventWaitHandle waitHandle = new ManualResetEvent(false);
EventWaitHandle exitHandle = new ManualResetEvent(false);
WebService service = null; WebService service = null;
try try
@@ -74,6 +76,18 @@ namespace DnsServerApp
service = new WebService(configFolder, new Uri("https://go.technitium.com/?id=20")); service = new WebService(configFolder, new Uri("https://go.technitium.com/?id=20"));
service.Start(); service.Start();
Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e)
{
e.Cancel = true;
waitHandle.Set();
};
AppDomain.CurrentDomain.ProcessExit += delegate (object sender, EventArgs e)
{
waitHandle.Set();
exitHandle.WaitOne();
};
Console.WriteLine("Technitium DNS Server was started successfully."); Console.WriteLine("Technitium DNS Server was started successfully.");
Console.WriteLine("Using config folder: " + service.ConfigFolder); Console.WriteLine("Using config folder: " + service.ConfigFolder);
Console.WriteLine(""); Console.WriteLine("");
@@ -81,44 +95,22 @@ namespace DnsServerApp
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("Press [CTRL + C] to stop..."); Console.WriteLine("Press [CTRL + C] to stop...");
Thread main = Thread.CurrentThread; waitHandle.WaitOne();
Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e)
{
e.Cancel = true;
main.Interrupt();
};
AppDomain.CurrentDomain.ProcessExit += delegate (object sender, EventArgs e)
{
if (service != null)
{
Console.WriteLine("");
Console.WriteLine("Technitium DNS Server is stopping...");
service.Dispose();
service = null;
Console.WriteLine("Technitium DNS Server was stopped successfully.");
} }
};
Thread.Sleep(Timeout.Infinite);
}
catch (ThreadInterruptedException)
{ }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine(ex.ToString()); Console.WriteLine(ex.ToString());
} }
finally finally
{
if (service != null)
{ {
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("Technitium DNS Server is stopping..."); Console.WriteLine("Technitium DNS Server is stopping...");
if (service != null)
service.Dispose(); service.Dispose();
service = null;
Console.WriteLine("Technitium DNS Server was stopped successfully."); Console.WriteLine("Technitium DNS Server was stopped successfully.");
} exitHandle.Set();
} }
} }