コード例 #1
0
ファイル: HttpServer.cs プロジェクト: daviddw/Kinsky
            public HttpServerSession(HttpServer aServer, Socket aSocket)
            {
                iServer     = aServer;
                iSession    = new TcpSessionStream();
                iReadBuffer = new Srb(kMaxReadBufferBytes, iSession);

                iSession.SetSocket(aSocket);

                iSocket = aSocket;

                iThread = new Thread(new ThreadStart(Run));
                iThread.IsBackground = true;
                iThread.Name         = "HttpServerSession";
            }
コード例 #2
0
ファイル: EventServer.cs プロジェクト: daviddw/oss-public
        private void RunNetwork()
        {
            Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() started");

            try
            {
                while (!iThreadNetworkAbort)
                {
                    try
                    {
                        TcpSessionStream sessionStream = new TcpSessionStream();

                        // listen for new incoming event
                        iServer.Accept(sessionStream);
                        lock (iActiveSessionStreams)
                        {
                            iActiveSessionStreams.Add(sessionStream);
                        }

                        iScheduler.Schedule(() =>
                        {
                            if (!iThreadNetworkAbort)
                            {
                                Srb readBuffer  = new Srb(kMaxReadBufferBytes, sessionStream);
                                Swb writeBuffer = new Swb(kMaxWriteBufferBytes, sessionStream);
                                try
                                {
                                    // read the event request
                                    EventRequest request = new EventRequest();
                                    request.Read(readBuffer);

                                    // get the session for this subscription ID
                                    EventHandlerEvent session = null;
                                    if (request.SubscriptionId != null)
                                    {
                                        session = GetSession(request.SubscriptionId);
                                        if (session == null)
                                        {
                                            // Wait 500mS and try again
                                            Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork(): Early Event!     " + request.SubscriptionId);
                                            Thread.Sleep(500);

                                            session = GetSession(request.SubscriptionId);
                                        }
                                    }

                                    // send the event response
                                    request.WriteResponse(writeBuffer, (session != null));

                                    // add event to be handled
                                    if (session != null)
                                    {
                                        Event ev = new Event(request, session);
                                        iEventFifo.Push(ev);
                                    }
                                }
                                catch (HttpError e)
                                {
                                    Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() HttpError: " + e.ToString());
                                    UserLog.WriteLine("EventServerUpnp.RunNetwork() HttpError: " + e.ToString());
                                }
                                catch (NetworkError e)
                                {
                                    Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() NetworkError: " + e.ToString());
                                    UserLog.WriteLine("EventServerUpnp.RunNetwork() NetworkError: " + e.ToString());
                                }
                                catch (ReaderError e)
                                {
                                    Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() ReaderError: " + e.ToString());
                                    UserLog.WriteLine("EventServerUpnp.RunNetwork() ReaderError: " + e.ToString());
                                }
                                catch (WriterError e)
                                {
                                    Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() WriterError: " + e.ToString());
                                    UserLog.WriteLine("EventServerUpnp.RunNetwork() WriterError: " + e.ToString());
                                }
                                finally
                                {
                                    lock (iActiveSessionStreams)
                                    {
                                        if (iActiveSessionStreams.Contains(sessionStream))
                                        {
                                            sessionStream.Close();
                                            iActiveSessionStreams.Remove(sessionStream);
                                        }
                                    }
                                }
                            }
                        });
                    }
                    catch (HttpError e)
                    {
                        Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() HttpError: " + e.ToString());
                        UserLog.WriteLine("EventServerUpnp.RunNetwork() HttpError: " + e.ToString());
                    }
                    catch (NetworkError e)
                    {
                        Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() NetworkError: " + e.ToString());
                        UserLog.WriteLine("EventServerUpnp.RunNetwork() NetworkError: " + e.ToString());
                    }
                    catch (ReaderError e)
                    {
                        Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() ReaderError: " + e.ToString());
                        UserLog.WriteLine("EventServerUpnp.RunNetwork() ReaderError: " + e.ToString());
                    }
                    catch (WriterError e)
                    {
                        Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() WriterError: " + e.ToString());
                        UserLog.WriteLine("EventServerUpnp.RunNetwork() WriterError: " + e.ToString());
                    }
                }
            }
            catch (Exception e)
            {
                Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() Exception: " + e.ToString());
                UserLog.WriteLine("EventServerUpnp.RunNetwork() Exception: " + e.ToString());
                throw e;
            }

            Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() finished");
        }
コード例 #3
0
        private void RunNetwork()
        {
            Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() started");

            try
            {
                while (!iThreadNetworkAbort)
                {
                    try
                    {
                        TcpSessionStream sessionStream = new TcpSessionStream();

                        // listen for new incoming event
                        iServer.Accept(sessionStream);
                        lock (iActiveSessionStreams)
                        {
                            iActiveSessionStreams.Add(sessionStream);
                        }

                        // set the timeout for the call to receive - this prevents event server
                        // threads from getting indefinitely blocked by remote clients
                        sessionStream.ReceiveTimeout = 30 * 1000;

                        iScheduler.Schedule((aObject) =>
                        {
                            TcpSessionStream aSessionStream = aObject[0] as TcpSessionStream;
                            if (!iThreadNetworkAbort)
                            {
                                Srb readBuffer  = new Srb(kMaxReadBufferBytes, aSessionStream);
                                Swb writeBuffer = new Swb(kMaxWriteBufferBytes, aSessionStream);
                                try
                                {
                                    // read the event request
                                    EventRequest request = new EventRequest();
                                    request.Read(readBuffer);

                                    // get the session for this subscription ID
                                    EventHandlerEvent session = null;
                                    if (request.SubscriptionId != null)
                                    {
                                        session = GetSession(request.SubscriptionId);
                                        if (session == null)
                                        {
                                            // Wait 500mS and try again
                                            Trace.WriteLine(Trace.kUpnp, "EventServerUpnpScheduler: Early Event!     " + request.SubscriptionId);
                                            Thread.Sleep(500);

                                            session = GetSession(request.SubscriptionId);
                                        }
                                    }

                                    // send the event response
                                    request.WriteResponse(writeBuffer, (session != null));

                                    // add event to be handled
                                    if (session != null)
                                    {
                                        Event ev = new Event(request, session);
                                        iEventFifo.Push(ev);
                                    }
                                }
                                catch (HttpError e)
                                {
                                    Trace.WriteLine(Trace.kUpnp, "EventServerUpnpScheduler HttpError: " + e.ToString());
                                    UserLog.WriteLine("EventServerUpnpScheduler HttpError: " + e.ToString());
                                }
                                catch (NetworkError e)
                                {
                                    Trace.WriteLine(Trace.kUpnp, "EventServerUpnpScheduler NetworkError: " + e.ToString());
                                    UserLog.WriteLine("EventServerUpnpScheduler NetworkError: " + e.ToString());
                                }
                                catch (ReaderError e)
                                {
                                    Trace.WriteLine(Trace.kUpnp, "EventServerUpnpScheduler ReaderError: " + e.ToString());
                                    UserLog.WriteLine("EventServerUpnpScheduler ReaderError: " + e.ToString());
                                }
                                catch (WriterError e)
                                {
                                    Trace.WriteLine(Trace.kUpnp, "EventServerUpnpScheduler WriterError: " + e.ToString());
                                    UserLog.WriteLine("EventServerUpnpScheduler WriterError: " + e.ToString());
                                }
                                catch (Exception e)
                                {
                                    Trace.WriteLine(Trace.kUpnp, "EventServerUpnpScheduler Exception: " + e.ToString());
                                    UserLog.WriteLine("EventServerUpnpScheduler Exception: " + e.ToString());
                                    throw;
                                }
                                finally
                                {
                                    lock (iActiveSessionStreams)
                                    {
                                        if (iActiveSessionStreams.Contains(aSessionStream))
                                        {
                                            aSessionStream.Close();
                                            iActiveSessionStreams.Remove(aSessionStream);
                                        }
                                    }
                                }
                            }
                        }, sessionStream);
                    }
                    catch (NetworkError e)
                    {
                        Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() NetworkError: " + e.ToString());
                        UserLog.WriteLine("EventServerUpnp.RunNetwork() NetworkError: " + e.ToString());
                    }
                }
            }
            catch (Exception e)
            {
                Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() Exception: " + e.ToString());
                UserLog.WriteLine("EventServerUpnp.RunNetwork() Exception: " + e.ToString());
                throw e;
            }

            Trace.WriteLine(Trace.kUpnp, "EventServerUpnp.RunNetwork() finished");
        }
コード例 #4
0
            public HttpServerSession(HttpServer aServer, IList <ISource> aSourceList, Socket aSocket)
            {
                iServer     = aServer;
                iSourceList = aSourceList;
                iSocket     = aSocket;

                iSession = new TcpSessionStream();
                iSession.SetSocket(iSocket);

                iReadBuffer = new Srb(kMaxReadBufferBytes, iSession);

                iWavFileHeader = new byte[44];

                iWavFileHeader[0] = 0x52; // ChunkId
                iWavFileHeader[1] = 0x49; // "RIFF"
                iWavFileHeader[2] = 0x46;
                iWavFileHeader[3] = 0x46;

                iWavFileHeader[4] = 0x24; // ChunkSize
                iWavFileHeader[5] = 0x00; // 36 + data size
                iWavFileHeader[6] = 0x00;
                iWavFileHeader[7] = 0x00;

                iWavFileHeader[8]  = 0x57; // Format
                iWavFileHeader[9]  = 0x41; // "WAVE"
                iWavFileHeader[10] = 0x56;
                iWavFileHeader[11] = 0x45;

                iWavFileHeader[12] = 0x66; // SubChunk1Id
                iWavFileHeader[13] = 0x6d; // "fmt "
                iWavFileHeader[14] = 0x74;
                iWavFileHeader[15] = 0x20;

                iWavFileHeader[16] = 0x10; // SubChunk1Size
                iWavFileHeader[17] = 0x00; // 16

                iWavFileHeader[18] = 0x00;
                iWavFileHeader[19] = 0x00;

                iWavFileHeader[20] = 0x01; // AudioFormat
                iWavFileHeader[21] = 0x00; // 1

                iWavFileHeader[22] = 0x02; // NumChannels
                iWavFileHeader[23] = 0x00; // 2

                iWavFileHeader[24] = 0x44; // SampleRate
                iWavFileHeader[25] = 0xac; // 44100
                iWavFileHeader[26] = 0x00;
                iWavFileHeader[27] = 0x00;

                iWavFileHeader[28] = 0x10; // ByteRate
                iWavFileHeader[29] = 0xb1; // 44100 * 2 * 2
                iWavFileHeader[30] = 0x02;
                iWavFileHeader[31] = 0x00;

                iWavFileHeader[32] = 0x04; // BlockAlign
                iWavFileHeader[33] = 0x00; // 4

                iWavFileHeader[34] = 0x10; // BitsPerSample
                iWavFileHeader[35] = 0x00; // 16

                iWavFileHeader[36] = 0x64; // SubChunk2Id
                iWavFileHeader[37] = 0x61; // "data"
                iWavFileHeader[38] = 0x74;
                iWavFileHeader[39] = 0x61;

                iWavFileHeader[40] = 0x00; // SubChunk2Size
                iWavFileHeader[41] = 0x00; // 0
                iWavFileHeader[42] = 0x00;
                iWavFileHeader[43] = 0x00;
            }