Ein einfacher Timer



Ein einfacher Timer

In diesem Beispiel starten wir einen Endlos-Timer. Dieser sorgt dafür, dass wir alle 10 Sekunden eine Timer-Message bekommen. Das Starten eines Timers ist ein Einzeiler:

final class CTarget011 extends CTarget
{
    private static final IId TIMER_ID = CIdFactory.create(EIdType.UUID);
    private static final long TIMEOUT = 10000L;

    CTarget011()
    {
        addMessageHandler(CRecordStartTarget.ID, new IMessageHandler()
        {
            @Override
            public boolean handleMessage(final CEnvelope aEnvelope,
                                         final CRecord aRecord) throws Exception
            {
                // we start a timer and will get a timer message every 10 seconds
                // The timer will not stop until shutdown
                getTimerManager().startTimer(TIMER_ID, getAddress(), TIMEOUT, true, null);

                aEnvelope.setResult(null);
                return true;
            }

        });

        //
        // catch our timer message
        //
        addMessageHandler(TIMER_ID, new IMessageHandler()
        {
            @Override
            public boolean handleMessage(final CEnvelope aEnvelope,
                                         final CRecord aRecord) throws Exception
            {
                CConstants.LOG.trace("Timer of Node001 Example002 {}. Hi!", getClass().getSimpleName());

                aEnvelope.setResult(null);
                return true;
            }

        });
    }
}

Die Timer ID erstellen wir mit der ID-Factory. Sie basiert auf einer zufälligen UUID. Als vierten Parameter geben wir ein true für die Repeat Einstellung mit. Das sorgt dafür, dass der Timer immer wieder generiert wird, bis wir ihn abschalten (was hier nicht passiert).

Diese Beispiele findest du im Projekt D1ExamplesNode001 im package de.softdevel.d1.examples.node001.example002.