private void EventSessionFinished(object sender, EventArgs e) { HttpServerSession session = sender as HttpServerSession; session.EventSessionFinished -= EventSessionFinished; iMutex.WaitOne(); iSessions.Remove(session); Trace.WriteLine(Trace.kKinsky, "HttpServer.EventSessionFinished: " + iSessions.Count + " active sessions"); iMutex.ReleaseMutex(); }
private void SessionClosed(HttpServerSession aSession) { iMutex.WaitOne(); iSessions.Remove(aSession); int count = iSessions.Count; iMutex.ReleaseMutex(); Trace.WriteLine(Trace.kKinsky, "HttpServer.EventSessionFinished: " + iSessions.Count + " active sessions"); }
private void Run() { UserLog.WriteLine("Starting HTTP Server at " + iBaseUri + "...Success"); try { while (true) { Socket socket = iListener.AcceptSocket(); HttpServerSession session = new HttpServerSession(this, iSourceList, socket); iMutex.WaitOne(); iSessions.Add(session); int count = iSessions.Count; Trace.WriteLine(Trace.kKinsky, "SoundcardServer.Run: Socket accepted from " + socket.RemoteEndPoint); Trace.WriteLine(Trace.kKinsky, "SoundcardServer.Run: " + iSessions.Count + " active sessions"); session.Start(); iMutex.ReleaseMutex(); } } catch (ThreadAbortException) { } catch (SocketException) { } iMutex.WaitOne(); foreach (HttpServerSession session in iSessions) { session.Stop(); } iMutex.ReleaseMutex(); UserLog.WriteLine("HTTP server stopped"); }
private void Run() { while (!iStarted && !iCancelStart) { iEvent.WaitOne(); iListener = new TcpListener(iInterface, iPort); iListener.Server.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true); try { iListener.Start(kListenSlots); UserLog.WriteLine("Starting HTTP Server at " + iBaseUri + "...Success"); iStarted = true; } catch (SocketException) { UserLog.WriteLine(String.Format("Unable to start HTTP Server at " + iBaseUri + " on port {0}.", iPort)); Timer t = new Timer(5000); EventHandler handler = null; handler = (d, e) => { UserLog.WriteLine(String.Format("Retry HTTP Server at " + iBaseUri + " on port {0}.", iPort)); iEvent.Set(); t.Elapsed -= handler; t.Stop(); t.Dispose(); }; t.Elapsed += handler; t.Start(); } } if (iStarted) { try { while (!iExit) { Socket socket = iListener.AcceptSocket(); iMutex.WaitOne(); Trace.WriteLine(Trace.kKinsky, "HttpServer.Run: Socket accepted from " + socket.RemoteEndPoint); UserLog.WriteLine("HttpServer.Run: Socket accepted from " + socket.RemoteEndPoint); HttpServerSession session = new HttpServerSession(this, socket); iSessions.Add(session); Trace.WriteLine(Trace.kKinsky, "HttpServer.Run: " + iSessions.Count + " active sessions"); iMutex.ReleaseMutex(); session.EventSessionFinished += EventSessionFinished; session.Start(); } } catch (SocketException) { } iExit = false; UserLog.WriteLine("HTTP server stopped"); } }