wasSharpNET
/Network/HTTP/HTTPServer.cs |
@@ -22,6 +22,9 @@ |
|
private int processedRequests; |
|
private AutoResetEvent StopServerEvent = new AutoResetEvent(false); |
private AutoResetEvent ServerStoppedEvent = new AutoResetEvent(false); |
|
public AuthenticationSchemes AuthenticationSchemes |
{ |
get |
@@ -43,7 +46,6 @@ |
return false; |
|
// Add all prefixes. |
HTTPListener.Prefixes.Clear(); |
foreach (var prefix in prefixes) |
{ |
HTTPListener.Prefixes.Add(prefix); |
@@ -58,7 +60,9 @@ |
|
public bool Stop() |
{ |
HTTPListener.Stop(); |
StopServerEvent.Set(); |
ServerStoppedEvent.WaitOne(); |
HTTPListener.Prefixes.Clear(); |
return true; |
} |
|
@@ -69,8 +73,16 @@ |
while (callbackState.Listener.IsListening) |
{ |
callbackState.Listener.BeginGetContext(ContextCallback, callbackState); |
callbackState.ContextRetrieved.WaitOne(); |
var n = WaitHandle.WaitAny(new WaitHandle[] { callbackState.ContextRetrieved, StopServerEvent }); |
|
if (n.Equals(1)) |
{ |
callbackState.Listener.Stop(); |
break; |
} |
} |
|
ServerStoppedEvent.Set(); |
} |
|
public abstract void ProcessHTTPContext(HttpListenerContext context); |
@@ -113,7 +125,13 @@ |
public void Dispose() |
{ |
Stop(); |
|
HTTPListener = null; |
StopServerEvent?.Dispose(); |
ServerStoppedEvent?.Dispose(); |
|
StopServerEvent = null; |
ServerStoppedEvent = null; |
} |
|
private class HTTPServerCallbackState |