All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jasig.irclog.messages.support.MessageHandlerFlusher Maven / Gradle / Ivy

/* Copyright 2006 The JA-SIG Collaborative.  All rights reserved.
*  See license distributed with this file and
*  available online at http://www.uportal.org/license.html
*/

package org.jasig.irclog.messages.support;

import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jasig.irclog.messages.MessageHandler;

/**
 * Flushes a wrapped MessageHandler every specified seconds
 * 
 * @author Eric Dalquist [email protected]
 * @version $Revision$
 */
public class MessageHandlerFlusher {
    private static final Random RND = new Random();
    
    protected final Log logger = LogFactory.getLog(this.getClass());
    
    private final Timer timer = new Timer("MessageHandlerTimer[" + this.toString() + "]", true);
    private TimerTask flushTask;
    
    private MessageHandler messageHandler;
    private long period;

    /**
     * @return the period
     */
    public int getPeriod() {
        return (int)(this.period / 1000);
    }
    /**
     * @param period the period to set
     */
    public synchronized void setPeriod(int period) {
        this.period = period * 1000;
        
        if (this.flushTask != null) {
            this.flushTask.cancel();
        }
        
        this.flushTask = new FlushMessageHandlerTask();
        final int baseDelay = (int)(this.period * 0.1d);
        this.timer.schedule(this.flushTask, RND.nextInt((int)this.period) + baseDelay, this.period);
    }

    /**
     * @return the messageHandler
     */
    public MessageHandler getMessageHandler() {
        return this.messageHandler;
    }
    /**
     * @param messageHandler the messageHandler to set
     */
    public void setMessageHandler(MessageHandler messageHandler) {
        this.messageHandler = messageHandler;
    }
    
    
    private class FlushMessageHandlerTask extends TimerTask {
        @Override
        public void run() {
            MessageHandlerFlusher.this.logger.debug("Flushing MessageHandler[" + MessageHandlerFlusher.this.messageHandler + "'");
            MessageHandlerFlusher.this.messageHandler.flush();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy