package org.greencheek.elasticacheconfig.handler;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.concurrent.EventExecutor;
import java.util.concurrent.TimeUnit;
/**
* Created by dominictootell on 20/07/2014.
*/
public class AsciiRequestConfigInfoScheduler implements RequestConfigInfoScheduler {
public static final TimeUnit GET_CONFIG_POLLING_TIME_UNIT = TimeUnit.SECONDS;
public static final long GET_CONFIG_POLLING_TIME = 60;
public static final long GET_CONIFG_INITIAL_POLLING_DELAY = 0;
private static final ByteBuf GET_CONFIG_COMMAND = Unpooled.wrappedBuffer("config get cluster\r\n".getBytes());
private final TimeUnit pollingTimeUnit;
private final long initialRequestDelay;
private final long pollingFrequency;
public AsciiRequestConfigInfoScheduler() {
this(GET_CONFIG_POLLING_TIME_UNIT,
GET_CONIFG_INITIAL_POLLING_DELAY,
GET_CONFIG_POLLING_TIME);
}
public AsciiRequestConfigInfoScheduler(TimeUnit pollingTimeUnit, long initalDelay, long pollingFrequency) {
this.pollingTimeUnit = pollingTimeUnit;
this.initialRequestDelay = initalDelay;
this.pollingFrequency = pollingFrequency;
}
@Override
public void schedule(EventExecutor executor,ChannelHandlerContext ctx) {
executor.scheduleAtFixedRate(new RepeatTask(ctx),initialRequestDelay, pollingFrequency, pollingTimeUnit);
}
private final class RepeatTask implements Runnable {
private final ChannelHandlerContext ctx;
public RepeatTask(ChannelHandlerContext ctx){
this.ctx = ctx;
}
public void run() {
if(ctx.channel().isActive()){
ctx.writeAndFlush(GET_CONFIG_COMMAND.copy());
}
}
}
}