示例#1
0
        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();
        }
示例#2
0
        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");
        }
示例#3
0
        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");
        }
示例#4
0
        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");
            }
        }