play nice to allow for embedding into other host processes e.g. tests
This commit is contained in:
parent
e6b974f651
commit
19d4876834
@ -8,6 +8,8 @@ namespace MBS.Web;
|
||||
public abstract class WebApplication : Application
|
||||
{
|
||||
protected abstract int DefaultPort { get; }
|
||||
public int Port { get { return WebServer.EndPoint.Port; } }
|
||||
public WebServer WebServer { get; private set; }
|
||||
|
||||
public string VirtualBasePath { get; set; } = "/";
|
||||
|
||||
@ -40,20 +42,39 @@ public abstract class WebApplication : Application
|
||||
return new WebServer(new IPEndPoint(IPAddress.Any, DefaultPort));
|
||||
}
|
||||
|
||||
private bool shuttingDown = false;
|
||||
protected override void StopInternal(int exitCode = 0)
|
||||
{
|
||||
shuttingDown = true;
|
||||
if (!SupportEmbeddedHosting)
|
||||
{
|
||||
// we do not want to System.Environment.Exit() here
|
||||
// if we are hosted in another process (e.g. for tests)
|
||||
base.StopInternal(exitCode);
|
||||
}
|
||||
}
|
||||
|
||||
public bool SupportEmbeddedHosting { get; set; } = false;
|
||||
|
||||
protected override void OnStartup(EventArgs e)
|
||||
{
|
||||
base.OnStartup(e);
|
||||
|
||||
WebServer server = CreateWebServer();
|
||||
WebServer = CreateWebServer();
|
||||
Console.WriteLine("attempting to start server listening on port {0}", DefaultPort);
|
||||
|
||||
OnServerCreated(new WebServerCreatedEventArgs(server));
|
||||
server.ProcessRequest += server_OnProcessRequest;
|
||||
server.Start();
|
||||
OnServerCreated(new WebServerCreatedEventArgs(WebServer));
|
||||
WebServer.ProcessRequest += server_OnProcessRequest;
|
||||
WebServer.Start();
|
||||
|
||||
while (true)
|
||||
if (!SupportEmbeddedHosting)
|
||||
{
|
||||
Thread.Sleep(50);
|
||||
while (!shuttingDown)
|
||||
{
|
||||
Thread.Sleep(50);
|
||||
}
|
||||
|
||||
WebServer.Stop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user