コード例 #1
0
ファイル: HttpConnection.cpp プロジェクト: crnt/x0
void HttpConnection::io(Socket *, int revents)
{
	TRACE("io(revents=%04x) isHandlingRequest:%d", revents, flags_ & IsHandlingRequest);

	ref();

	if (revents & ev::ERROR) {
		log(Severity::error, "Potential bug in connection I/O watching. Closing.");
		abort();
		goto done;
	}

	if ((revents & Socket::Read) && !readSome())
		goto done;

	if ((revents & Socket::Write) && !writeSome())
		goto done;

	if (!process())
		goto done;

	switch (status()) {
	case ReadingRequest:
		watchInput(worker_->server_.maxReadIdle());
		break;
	case KeepAliveRead:
		watchInput(worker_->server_.maxKeepAlive());
	default:
		break;
	}

done:
	unref();
}
コード例 #2
0
void HttpConnection::io(Socket *, int revents)
{
	TRACE(1, "io(revents=%04x) isHandlingRequest:%d", revents, isHandlingRequest());

	ref();

	if (revents & ev::ERROR) {
		log(Severity::error, "Potential bug in connection I/O watching. Closing.");
		abort();
		goto done;
	}

	// socket is ready for read?
	if ((revents & Socket::Read) && !readSome())
		goto done;

	// socket is ready for write?
	if ((revents & Socket::Write) && !writeSome())
		goto done;

	switch (status()) {
	case ReadingRequest:
		TRACE(1, "io(): status=%s. Watch for read.", status_str());
		watchInput(worker_->server_.maxReadIdle());
		break;
	case KeepAliveRead:
		if (isInputPending()) {
			do {
				// we're in keep-alive state but have (partial) request in buffer pending
				// so do process it right away
				TRACE(1, "io(): status=%s. Pipelined input pending.", status_str());
				process();
			} while (isInputPending() && status() == KeepAliveRead);

			if (status() == KeepAliveRead) {
				// we're still in keep-alive state but no (partial) request in buffer pending
				// so watch for socket input event.
				TRACE(1, "io(): status=%s. Watch for read (keep-alive).", status_str());
				watchInput(worker_->server_.maxKeepAlive());
			}
		} else {
			// we are in keep-alive state and have no (partial) request in buffer pending
			// so watch for socket input event.
			TRACE(1, "io(): status=%s. Watch for read (keep-alive).", status_str());
			watchInput(worker_->server_.maxKeepAlive());
		}
		break;
	case ProcessingRequest:
	case SendingReplyDone:
	case SendingReply:
	case Undefined: // should never be reached
		TRACE(1, "io(): status=%s. Do not touch I/O watcher.", status_str());
		break;
	}

done:
	unref();
}
コード例 #3
0
ファイル: HttpProxy.cpp プロジェクト: neeravkumar/x0
void HttpProxy::ProxyConnection::io(Socket* s, int revents)
{
	TRACE("io(0x%04x)", revents);

	if (revents & Socket::Read)
		readSome();

	if (revents & Socket::Write)
		writeSome();
}
コード例 #4
0
ファイル: llerror_tut.cpp プロジェクト: Nora28/imprudence
	void ErrorTestObject::test<3>()
		// error type string in output
	{
		writeSome();
		ensure_message_contains(0, "DEBUG: ");
		ensure_message_contains(1, "INFO: ");
		ensure_message_contains(2, "WARNING: ");
		ensure_message_does_not_contain(3, "ERROR");
		ensure_message_contains(4, "ERROR: ");
		ensure_message_count(5);
	}
コード例 #5
0
void HttpConnection::flush()
{
	if (!isOutputPending())
		return;

#if defined(ENABLE_OPPORTUNISTIC_WRITE)
	writeSome();
#else
	watchOutput();
#endif
}
コード例 #6
0
ファイル: llerror_tut.cpp プロジェクト: Nora28/imprudence
	void ErrorTestObject::test<2>()
		// messages are filtered based on default level
	{
		LLError::setDefaultLevel(LLError::LEVEL_DEBUG);
		writeSome();
		ensure_message_contains(0, "one");
		ensure_message_contains(1, "two");
		ensure_message_contains(2, "three");
		ensure_message_contains(3, "error");
		ensure_message_contains(4, "four");
		ensure_message_count(5);
	
		LLError::setDefaultLevel(LLError::LEVEL_INFO);
		writeSome();
		ensure_message_contains(5, "two");
		ensure_message_contains(6, "three");
		ensure_message_contains(7, "error");
		ensure_message_contains(8, "four");
		ensure_message_count(9);
		
		LLError::setDefaultLevel(LLError::LEVEL_WARN);
		writeSome();
		ensure_message_contains(9, "three");
		ensure_message_contains(10, "error");
		ensure_message_contains(11, "four");
		ensure_message_count(12);
		
		LLError::setDefaultLevel(LLError::LEVEL_ERROR);
		writeSome();
		ensure_message_contains(12, "error");
		ensure_message_contains(13, "four");
		ensure_message_count(14);
		
		LLError::setDefaultLevel(LLError::LEVEL_NONE);
		writeSome();
		ensure_message_count(14);
	}
コード例 #7
0
ファイル: TrigSpike.cpp プロジェクト: coocoky/SpikeGLX
// Spike logic is driven by TrgSpikeParams:
// {periEvtSecs, refractSecs, inarow, nS, T}.
// Corresponding states defined above.
//
void TrigSpike::run()
{
    Debug() << "Trigger thread started.";

    setYieldPeriod_ms( 100 );

    initState();

    while( !isStopped() ) {

        double  loopT = getTime();
        bool    inactive;

        // -------
        // Active?
        // -------

        inactive = ISSTATE_Done || !isGateHi();

        if( inactive )
            goto next_loop;

        // -------------
        // If gate start
        // -------------

        // Set gateHiT as place from which to start
        // searching for edge in getEdge().

        if( !imCnt.edgeCt || !niCnt.edgeCt ) {

            usrFlt->reset();

            double  gateT = getGateHiT();

            if( imQ && !imQ->mapTime2Ct( imCnt.edgeCt, gateT ) )
                goto next_loop;

            if( niQ && !niQ->mapTime2Ct( niCnt.edgeCt, gateT ) )
                goto next_loop;
        }

        // --------------
        // Seek next edge
        // --------------

        if( ISSTATE_GetEdge ) {

            if( p.trgSpike.stream == "imec" ) {

                if( !getEdge( imCnt, imQ, niCnt, niQ ) )
                    goto next_loop;
            }
            else {

                if( !getEdge( niCnt, niQ, imCnt, imQ ) )
                    goto next_loop;
            }

            QMetaObject::invokeMethod(
                gw, "blinkTrigger",
                Qt::QueuedConnection );

            // ---------------
            // Start new files
            // ---------------

            imCnt.remCt = -1;
            niCnt.remCt = -1;

            {
                int ig, it;

                if( !newTrig( ig, it, false ) )
                    break;

                setSyncWriteMode();
            }

            SETSTATE_Write();
        }

        // ----------------
        // Handle this edge
        // ----------------

        if( ISSTATE_Write ) {

            if( !writeSome( DstImec, imQ, imCnt )
                || !writeSome( DstNidq, niQ, niCnt ) ) {

                break;
            }

            // -----
            // Done?
            // -----

            if( imCnt.remCt <= 0 && niCnt.remCt <= 0 ) {

                endTrig();

                usrFlt->reset();
                imCnt.edgeCt += imCnt.refracCt;
                niCnt.edgeCt += niCnt.refracCt;

                if( ++nS >= nCycMax )
                    SETSTATE_Done;
                else
                    SETSTATE_GetEdge;
            }
        }

        // ------
        // Status
        // ------

next_loop:
       if( loopT - statusT > 0.25 ) {

            QString sOn, sWr;
            int     ig, it;

            getGT( ig, it );
            statusOnSince( sOn, loopT, ig, it );
            statusWrPerf( sWr );

            Status() << sOn << sWr;

            statusT = loopT;
        }

        // -------------------
        // Moderate fetch rate
        // -------------------

        yield( loopT );
    }

    endRun();

    Debug() << "Trigger thread stopped.";

    emit finished();
}