package com.github.shansun.sparrow.actor.util; import java.util.concurrent.RejectedExecutionException; import com.github.shansun.sparrow.actor.api.MessageRedcapCallback; import com.github.shansun.sparrow.actor.internal.MessageWrapper; import com.github.shansun.sparrow.actor.internal.ThreadWrapper; import com.github.shansun.sparrow.actor.api.RejectedMessageHandler; import com.github.shansun.sparrow.actor.internal.MessageRedcapRunnable; /** * @author: lanbo <br> * @version: 1.0 <br> * @date: 2012-7-24 */ public final class RejectedMessageHandlers { public static RejectedMessageHandler abortPolicy() { return new RejectedMessageHandler() { @Override public void reject(MessageWrapper message, ThreadWrapper thread) { throw new RejectedExecutionException(); } }; } public static RejectedMessageHandler discardPolicy() { return new RejectedMessageHandler() { @Override public void reject(MessageWrapper message, ThreadWrapper thread) { } }; } public static RejectedMessageHandler callerProcessPolicy() { return new RejectedMessageHandler() { @Override public void reject(MessageWrapper message,ThreadWrapper thread) { Runnable runnable = thread.getRunnable(); if(runnable instanceof MessageRedcapRunnable) { ((MessageRedcapRunnable) runnable).getCallback().execute(message); } } }; } public static RejectedMessageHandler callerProcessPolicy(final MessageRedcapCallback callback) { return new RejectedMessageHandler() { @Override public void reject(MessageWrapper message, ThreadWrapper thread) { callback.execute(message); } }; } }