package org.limewire.nio.statemachine; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.WritableByteChannel; /** * Process a write state. <code>SimpleWriteState</code> declares a write is * taking place. Additionally, <code>SimpleWriteState</code> returns how much * was written by the channel. */ public class SimpleWriteState extends WriteState { /** The outgoing buffer, if we've made it. (Null if we haven't.) */ private ByteBuffer outgoing; /** The amount total that was written. */ private long amountWritten; /** Creates a new <code>SimpleWriteState</code> that will write the given data. */ public SimpleWriteState(ByteBuffer outgoing) { this.outgoing = outgoing; } /** * Writes output to the channel. * <p> * This will return true if it needs to be called again to continue writing. * If it returns false, all data has been written and you can proceed to the next state. */ @Override protected boolean processWrite(WritableByteChannel channel, ByteBuffer buffer) throws IOException { int written = channel.write(outgoing); amountWritten += written; return outgoing.hasRemaining(); } public final long getAmountProcessed() { return amountWritten; } }