package org.limewire.nio.statemachine;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.Channel;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* Wraps another <code>IOState</code>; <code>IOState</code>
* processes only if the <code>AtomicBoolean</code> allows.
*/
public class PossibleIOState implements IOState {
private final AtomicBoolean allower;
private final IOState delegate;
public PossibleIOState(AtomicBoolean allower, IOState delegate) {
this.allower = allower;
this.delegate = delegate;
}
public long getAmountProcessed() {
return delegate.getAmountProcessed();
}
public boolean isReading() {
return delegate.isReading();
}
public boolean isWriting() {
return delegate.isWriting();
}
public boolean process(Channel channel, ByteBuffer buffer) throws IOException {
if(allower.get())
return delegate.process(channel, buffer);
else
return false;
}
}