wasSharpNET – Diff between revs 20 and 22

Subversion Repositories:
Rev:
Show entire fileIgnore whitespace
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