NioPipeStreamConnection(final WorkerThread workerThread, final SelectionKey sourceKey, final SelectionKey sinkKey) { super(workerThread); if (sourceKey != null) { setSourceConduit(sourceConduit = new NioPipeSourceConduit(workerThread, sourceKey, this)); sourceKey.attach(sourceConduit); sourceChannel = (Pipe.SourceChannel) sourceKey.channel(); } else { sourceConduit = null; sourceChannel = null; } if (sinkKey != null) { setSinkConduit(sinkConduit = new NioPipeSinkConduit(workerThread, sinkKey, this)); sinkKey.attach(sinkConduit); sinkChannel = (Pipe.SinkChannel) sinkKey.channel(); } else { sinkConduit = null; sinkChannel = null; } }
public long write(final ByteBuffer[] srcs, final int offset, final int length) throws IOException { if (length == 1) { return write(srcs[offset]); } long res = sinkChannel.write(srcs, offset, length); checkWriteTimeout(res > 0L); return res; }
public <T> T setOption(final Option<T> option, final T value) throws IllegalArgumentException, IOException { T result; if (option == Options.READ_TIMEOUT) { final NioPipeSourceConduit conduit = sourceConduit; result = conduit == null ? null : option.cast(Integer.valueOf(conduit.getAndSetReadTimeout(value == null ? 0 : Options.READ_TIMEOUT.cast(value).intValue()))); } else if (option == Options.WRITE_TIMEOUT) { final NioPipeSinkConduit conduit = sinkConduit; result = conduit == null ? null : option.cast(Integer.valueOf(conduit.getAndSetWriteTimeout(value == null ? 0 : Options.WRITE_TIMEOUT.cast(value).intValue()))); } else { return null; } return result; }
public final long transferFrom(final FileChannel src, final long position, final long count) throws IOException { long res = src.transferTo(position, count, sinkChannel); checkWriteTimeout(res > 0L); return res; }
public void awaitWritable(final long time, final TimeUnit timeUnit) throws IOException { Xnio.checkBlockingAllowed(); SelectorUtils.await((NioXnio)getWorker().getXnio(), sinkChannel, SelectionKey.OP_WRITE, time, timeUnit); }
public XnioIoThread getWriteThread() { return getWorkerThread(); }
public <T> T getOption(final Option<T> option) throws IOException { if (option == Options.READ_TIMEOUT) { final NioPipeSourceConduit conduit = sourceConduit; return conduit == null ? null : option.cast(Integer.valueOf(conduit.getReadTimeout())); } else if (option == Options.WRITE_TIMEOUT) { final NioPipeSinkConduit conduit = sinkConduit; return conduit == null ? null : option.cast(Integer.valueOf(conduit.getWriteTimeout())); } else { return null; } }
public boolean isWriteResumed() { return isResumed(SelectionKey.OP_WRITE); }
public void suspendWrites() { suspend(SelectionKey.OP_WRITE); }
public void resumeWrites() { resume(SelectionKey.OP_WRITE); }
public void truncateWrites() throws IOException { terminateWrites(); }
public int write(final ByteBuffer src) throws IOException { int res = sinkChannel.write(src); checkWriteTimeout(res > 0); return res; }
public void awaitWritable() throws IOException { Xnio.checkBlockingAllowed(); SelectorUtils.await((NioXnio)getWorker().getXnio(), sinkChannel, SelectionKey.OP_WRITE); }
public XnioWorker getWorker() { return getWorkerThread().getWorker(); }
public <T> T getOption(final Option<T> option) throws IOException { if (option == Options.READ_TIMEOUT) { final NioPipeSourceConduit conduit = sourceConduit; return conduit == null ? null : option.cast(Integer.valueOf(conduit.getReadTimeout())); } else if (option == Options.WRITE_TIMEOUT) { final NioPipeSinkConduit conduit = sinkConduit; return conduit == null ? null : option.cast(Integer.valueOf(conduit.getWriteTimeout())); } else { return null; } }
public boolean isWriteResumed() { return isResumed(SelectionKey.OP_WRITE); }
public void suspendWrites() { suspend(SelectionKey.OP_WRITE); }
public void resumeWrites() { resume(SelectionKey.OP_WRITE); }
public void truncateWrites() throws IOException { terminateWrites(); }
public long write(final ByteBuffer[] srcs, final int offset, final int length) throws IOException { if (length == 1) { return write(srcs[offset]); } long res = sinkChannel.write(srcs, offset, length); checkWriteTimeout(res > 0L); return res; }