wasSharpNET – Diff between revs 20 and 22
?pathlinks?
Rev 20 | Rev 22 | |||
---|---|---|---|---|
Line 23... | Line 23... | |||
23 | AuthenticationSchemes.None; |
23 | AuthenticationSchemes.None; |
|
Line 24... | Line 24... | |||
24 | |
24 | |
|
Line 25... | Line 25... | |||
25 | public bool IsRunning => HTTPListener != null && HTTPListener.IsListening; |
25 | public bool IsRunning => HTTPListener != null && HTTPListener.IsListening; |
|
- | 26 | |
||
Line 26... | Line 27... | |||
26 | |
27 | private readonly ManualResetEventSlim stopListen = new ManualResetEventSlim(false); |
|
27 | private readonly ManualResetEventSlim stopListen = new ManualResetEventSlim(false); |
28 | private readonly ManualResetEventSlim listenStop = new ManualResetEventSlim(false); |
|
28 | |
29 | |
|
29 | public bool Start(List<string> prefixes) |
30 | public bool Start(List<string> prefixes) |
|
Line 44... | Line 45... | |||
44 | HTTPListener.IgnoreWriteExceptions = true; |
45 | HTTPListener.IgnoreWriteExceptions = true; |
|
45 | HTTPListener.Start(); |
46 | HTTPListener.Start(); |
|
46 | return ThreadPool.QueueUserWorkItem(Listen, new HTTPServerCallbackState(HTTPListener)); |
47 | return ThreadPool.QueueUserWorkItem(Listen, new HTTPServerCallbackState(HTTPListener)); |
|
47 | } |
48 | } |
|
Line 48... | Line 49... | |||
48 | |
49 | |
|
49 | public void Stop() |
50 | public bool Stop(int timeout) |
|
50 | { |
51 | { |
|
- | 52 | stopListen.Set(); |
||
51 | stopListen.Set(); |
53 | return listenStop.Wait(timeout); |
|
Line 52... | Line 54... | |||
52 | } |
54 | } |
|
53 | |
55 | |
|
54 | private void Listen(object state) |
56 | private void Listen(object state) |
|
Line 55... | Line 57... | |||
55 | { |
57 | { |
|
56 | HTTPServerCallbackState callbackState = (HTTPServerCallbackState)state; |
58 | HTTPServerCallbackState callbackState = (HTTPServerCallbackState)state; |
|
57 | |
59 | |
|
Line 58... | Line 60... | |||
58 | while (callbackState.Listener.IsListening) |
60 | while (callbackState.Listener.IsListening) |
|
59 | { |
61 | { |
|
Line -... | Line 62... | |||
- | 62 | callbackState.Listener?.BeginGetContext(ContextCallback, callbackState); |
||
- | 63 | |
||
60 | callbackState.Listener.BeginGetContext(ContextCallback, callbackState); |
64 | if (WaitHandle.WaitAny(new[] { callbackState.ContextRetrieved, stopListen.WaitHandle }) != 1) |
|
- | 65 | continue; |
||
- | 66 | |
||
- | 67 | try |
||
- | 68 | { |
||
- | 69 | callbackState.Listener.Stop(); |
||
- | 70 | callbackState.Listener.Close(); |
||
61 | |
71 | } |
|
62 | if (WaitHandle.WaitAny(new[] { callbackState.ContextRetrieved, stopListen.WaitHandle }) != 1) |
72 | finally |
|
63 | continue; |
73 | { |
|
Line 64... | Line 74... | |||
64 | |
74 | listenStop.Set(); |
|
Line 101... | Line 111... | |||
101 | } |
111 | } |
|
102 | } |
112 | } |
|
Line 103... | Line 113... | |||
103 | |
113 | |
|
104 | public void Dispose() |
114 | public void Dispose() |
|
105 | { |
115 | { |
|
106 | Stop(); |
116 | stopListen.Set(); |
|
Line 107... | Line 117... | |||
107 | } |
117 | } |
|
108 | |
118 | |
|
109 | private class HTTPServerCallbackState |
119 | private class HTTPServerCallbackState |