本文整理汇总了Java中org.xnio.channels.StreamSinkChannel类的典型用法代码示例。如果您正苦于以下问题:Java StreamSinkChannel类的具体用法?Java StreamSinkChannel怎么用?Java StreamSinkChannel使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
StreamSinkChannel类属于org.xnio.channels包,在下文中一共展示了StreamSinkChannel类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。
示例1: send
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
/**
* response
*
* @param exchange
* @param statusCode
* @param output
* auto release
*/
protected final void send(HttpServerExchange exchange, int statusCode, PooledByteBufferOutputStream output) {
try {
output.flip();
StreamSinkChannel channel = getResponseChannel(exchange);
Sender sender = exchange.getResponseSender();
setStatusCode(exchange, statusCode);
setResponseChannel(sender, channel);
setPooledBuffers(sender, output.getPooledByteBuffers());
sender.send(output.getByteBuffers());
} catch (Throwable t) {
UndertowLogger.REQUEST_IO_LOGGER.handleUnexpectedFailure(t);
}
}
开发者ID:hank-whu,项目名称:undertow-async,代码行数:25,代码来源:AsyncHttpHandler.java
示例2: sendBadRequestAndClose
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
private void sendBadRequestAndClose(final StreamConnection connection, final Exception exception) {
UndertowLogger.REQUEST_IO_LOGGER.failedToParseRequest(exception);
connection.getSourceChannel().suspendReads();
new StringWriteChannelListener(BAD_REQUEST) {
@Override
protected void writeDone(final StreamSinkChannel c) {
super.writeDone(c);
c.suspendWrites();
IoUtils.safeClose(connection);
}
@Override
protected void handleError(StreamSinkChannel channel, IOException e) {
IoUtils.safeClose(connection);
}
}.setup(connection.getSinkChannel());
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:18,代码来源:HttpReadListener.java
示例3: transferTo
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
@Override
public long transferTo(final long count, final ByteBuffer throughBuffer, final StreamSinkChannel target) throws IOException {
if (exchange.getResponseCode() == StatusCodes.EXPECTATION_FAILED) {
//rejected
return -1;
}
if (!sent) {
sent = true;
response = HttpContinue.createResponseSender(exchange);
}
if (response != null) {
if (!response.send()) {
return 0;
}
response = null;
}
return super.transferTo(count, throughBuffer, target);
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:19,代码来源:HttpContinueReadHandler.java
示例4: getResponseChannel
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
/**
* Get the response channel. The channel must be closed and fully flushed before the next response can be started.
* In order to close the channel you must first call {@link org.xnio.channels.StreamSinkChannel#shutdownWrites()},
* and then call {@link org.xnio.channels.StreamSinkChannel#flush()} until it returns true. Alternatively you can
* call {@link #endExchange()}, which will close the channel as part of its cleanup.
* <p/>
* Closing a fixed-length response before the corresponding number of bytes has been written will cause the connection
* to be reset and subsequent requests to fail; thus it is important to ensure that the proper content length is
* delivered when one is specified. The response channel may not be writable until after the response headers have
* been sent.
* <p/>
* If this method is not called then an empty or default response body will be used, depending on the response code set.
* <p/>
* The returned channel will begin to write out headers when the first write request is initiated, or when
* {@link org.xnio.channels.StreamSinkChannel#shutdownWrites()} is called on the channel with no content being written.
* Once the channel is acquired, however, the response code and headers may not be modified.
* <p/>
*
* @return the response channel, or {@code null} if another party already acquired the channel
*/
public StreamSinkChannel getResponseChannel() {
if (responseChannel != null) {
return null;
}
final ConduitWrapper<StreamSinkConduit>[] wrappers = responseWrappers;
this.responseWrappers = null;
final ConduitStreamSinkChannel sinkChannel = connection.getSinkChannel();
if (sinkChannel == null) {
return null;
}
if(wrappers != null) {
final WrapperStreamSinkConduitFactory factory = new WrapperStreamSinkConduitFactory(wrappers, responseWrapperCount, this, sinkChannel.getConduit());
sinkChannel.setConduit(factory.create());
} else {
sinkChannel.setConduit(connection.getSinkConduit(this, sinkChannel.getConduit()));
}
this.responseChannel = new WriteDispatchChannel(sinkChannel);
this.startResponse();
return responseChannel;
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:41,代码来源:HttpServerExchange.java
示例5: transferTo
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
public long transferTo(final long count, final ByteBuffer throughBuffer, final StreamSinkChannel target) throws IOException {
if (count == 0L) {
return 0L;
}
long val = state;
checkMaxSize(val);
if (anyAreSet(val, FLAG_CLOSED | FLAG_FINISHED) || allAreClear(val, MASK_COUNT)) {
if (allAreClear(val, FLAG_FINISHED)) {
invokeFinishListener();
}
return -1;
}
long res = 0L;
try {
return res = next.transferTo(min(count, val & MASK_COUNT), throughBuffer, target);
} catch (IOException | RuntimeException e) {
IoUtils.safeClose(exchange.getConnection());
throw e;
} finally {
exitRead(res == -1L ? val & MASK_COUNT : res + throughBuffer.remaining());
}
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:23,代码来源:FixedLengthStreamSourceConduit.java
示例6: sendClose
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
/**
* Send a Close frame without a payload
*/
public void sendClose() throws IOException {
closeReason = "";
closeCode = CloseMessage.NORMAL_CLOSURE;
StreamSinkFrameChannel closeChannel = send(WebSocketFrameType.CLOSE, 0);
closeChannel.shutdownWrites();
if (!closeChannel.flush()) {
closeChannel.getWriteSetter().set(ChannelListeners.flushingChannelListener(
null, new ChannelExceptionHandler<StreamSinkChannel>() {
@Override
public void handleException(final StreamSinkChannel channel, final IOException exception) {
IoUtils.safeClose(WebSocketChannel.this);
}
}
));
closeChannel.resumeWrites();
}
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:21,代码来源:WebSocketChannel.java
示例7: setup
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
public void setup(final StreamSinkChannel channel) {
try {
int c;
do {
c = channel.write(buffer);
} while (buffer.hasRemaining() && c > 0);
if (buffer.hasRemaining()) {
channel.getWriteSetter().set(this);
channel.resumeWrites();
} else {
writeDone(channel);
}
} catch (IOException e) {
handleError(channel, e);
}
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:17,代码来源:StringWriteChannelListener.java
示例8: handleEvent
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
@Override
public void handleEvent(final StreamSinkChannel channel) {
try {
int c;
do {
c = channel.write(buffer);
} while (buffer.hasRemaining() && c > 0);
if (buffer.hasRemaining()) {
channel.resumeWrites();
return;
} else {
writeDone(channel);
}
} catch (IOException e) {
handleError(channel, e);
}
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:18,代码来源:StringWriteChannelListener.java
示例9: writeDone
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
protected void writeDone(final StreamSinkChannel channel) {
try {
channel.shutdownWrites();
if (!channel.flush()) {
channel.getWriteSetter().set(ChannelListeners.flushingChannelListener(new ChannelListener<StreamSinkChannel>() {
@Override
public void handleEvent(StreamSinkChannel o) {
IoUtils.safeClose(channel);
}
}, ChannelListeners.closingChannelExceptionHandler()));
channel.resumeWrites();
}
} catch (IOException e) {
handleError(channel, e);
}
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:19,代码来源:StringWriteChannelListener.java
示例10: initWriteListener
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
private void initWriteListener() {
writeListener = new ChannelListener<StreamSinkChannel>() {
@Override
public void handleEvent(final StreamSinkChannel streamSinkChannel) {
try {
long toWrite = Buffers.remaining(buffer);
long written = 0;
while (written < toWrite) {
long res = streamSinkChannel.write(buffer, 0, buffer.length);
written += res;
if (res == 0) {
return;
}
}
streamSinkChannel.suspendWrites();
invokeOnComplete();
} catch (IOException e) {
streamSinkChannel.suspendWrites();
invokeOnException(callback, e);
}
}
};
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:24,代码来源:AsyncSenderImpl.java
示例11: send
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
public void send(Object obj) {
if (httpServerExchange.getRequestMethod()
.equals(HEAD)) {
httpServerExchange.endExchange();
return;
}
httpServerExchange.getResponseHeaders()
.put(Headers.CONTENT_TYPE, JSON_CONTENT_TYPE);
ObjectMapper objectMapper = LOCAL_MAPPER.get();
if (objectMapper == null) {
LOGGER.info("Creating new parser.........");
objectMapper = JsonFactory.createUseJSONDates();
LOCAL_MAPPER.set(objectMapper);
}
String jsonStr = objectMapper
.toJson(obj);
ByteBuffer byteBuffer = ByteBuffer.wrap(jsonStr.getBytes(StandardCharsets.UTF_8));
StreamSinkChannel responseChannel = httpServerExchange.getResponseChannel();
int written;
try {
do {
written = responseChannel.write(byteBuffer);
} while (byteBuffer.hasRemaining() && written > 0);
} catch (IOException e) {
LOGGER.error("Can not write response: " + e.getMessage(), e);
}
}
开发者ID:icha024,项目名称:spur,代码行数:30,代码来源:Res.java
示例12: sendResponse
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
private void sendResponse(final HttpServerExchange exchange, final AbstractResponse res, final long beginningTime)
throws IOException {
res.setDuration((int) (System.currentTimeMillis() - beginningTime));
final String response = gson.toJson(res);
if (res instanceof ErrorResponse) {
exchange.setStatusCode(400); // bad request
} else if (res instanceof AccessLimitedResponse) {
exchange.setStatusCode(401); // api method not allowed
} else if (res instanceof ExceptionResponse) {
exchange.setStatusCode(500); // internal error
}
setupResponseHeaders(exchange);
ByteBuffer responseBuf = ByteBuffer.wrap(response.getBytes(StandardCharsets.UTF_8));
exchange.setResponseContentLength(responseBuf.array().length);
StreamSinkChannel sinkChannel = exchange.getResponseChannel();
sinkChannel.getWriteSetter().set(channel -> {
if (responseBuf.remaining() > 0)
try {
sinkChannel.write(responseBuf);
if (responseBuf.remaining() == 0) {
exchange.endExchange();
}
} catch (IOException e) {
log.error("Error writing response", e);
exchange.endExchange();
sinkChannel.getWriteSetter().set(null);
}
else {
exchange.endExchange();
}
});
sinkChannel.resumeWrites();
}
开发者ID:AidosKuneen,项目名称:aidos-node,代码行数:37,代码来源:API.java
示例13: handleError
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
private void handleError(final StreamSinkChannel channel, final IOException e) {
try {
listener.onError(e);
} finally {
IoUtils.safeClose(channel);
}
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:8,代码来源:UpgradeServletOutputStream.java
示例14: transferTo
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
@Override
public long transferTo(long count, ByteBuffer throughBuffer, StreamSinkChannel streamSinkChannel) throws IOException {
handleNewHeaders();
long read = super.transferTo(count, throughBuffer, streamSinkChannel);
updateFlowControlWindow((int) read + throughBuffer.remaining());
return read;
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:8,代码来源:SpdyStreamStreamSourceChannel.java
示例15: handleFailedFlush
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
private void handleFailedFlush(AjpClientRequestClientStreamSinkChannel sinkChannel) {
sinkChannel.getWriteSetter().set(ChannelListeners.flushingChannelListener(null, new ChannelExceptionHandler<StreamSinkChannel>() {
@Override
public void handleException(StreamSinkChannel channel, IOException exception) {
handleError(exception);
}
}));
sinkChannel.resumeWrites();
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:10,代码来源:AjpClientConnection.java
示例16: getRequestChannel
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
@Override
public StreamSinkChannel getRequestChannel() {
return new DetachableStreamSinkChannel(requestChannel) {
@Override
protected boolean isFinished() {
return anyAreSet(state, REQUEST_TERMINATED);
}
};
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:10,代码来源:AjpClientExchange.java
示例17: getRequestChannel
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
@Override
public StreamSinkChannel getRequestChannel() {
return new DetachableStreamSinkChannel(clientConnection.getConnection().getSinkChannel()) {
@Override
protected boolean isFinished() {
return anyAreSet(state, REQUEST_TERMINATED);
}
};
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:10,代码来源:HttpClientExchange.java
示例18: transferTo
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
@Override
public long transferTo(long count, ByteBuffer throughBuffer, StreamSinkChannel target) throws IOException {
try {
return IoUtils.transfer(new ConduitReadableByteChannel(this), count, throughBuffer, target);
} catch (IOException | RuntimeException e) {
IoUtils.safeClose(exchange.getConnection());
throw e;
}
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:10,代码来源:AjpServerRequestConduit.java
示例19: transferTo
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
@Override
public long transferTo(long count, ByteBuffer throughBuffer, StreamSinkChannel target) throws IOException {
Pooled<ByteBuffer>[] buffered = getAttachment(BUFFERED_REQUEST_DATA);
if (buffered == null) {
return super.transferTo(count, throughBuffer, target);
}
//make sure there is no garbage in throughBuffer
throughBuffer.position(0);
throughBuffer.limit(0);
long copied = 0;
for (int i = 0; i < buffered.length; ++i) {
Pooled<ByteBuffer> pooled = buffered[i];
if (pooled != null) {
final ByteBuffer buf = pooled.getResource();
if (buf.hasRemaining()) {
int res = target.write(buf);
if (!buf.hasRemaining()) {
pooled.free();
buffered[i] = null;
}
if (res == 0) {
return copied;
} else {
copied += res;
}
} else {
pooled.free();
buffered[i] = null;
}
}
}
removeAttachment(BUFFERED_REQUEST_DATA);
if (copied == 0) {
return super.transferTo(count, throughBuffer, target);
} else {
return copied;
}
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:40,代码来源:HttpServerExchange.java
示例20: transferTo
import org.xnio.channels.StreamSinkChannel; //导入依赖的package包/类
public long transferTo(final long count, final ByteBuffer throughBuffer, final StreamSinkChannel target) throws IOException {
long res = 0;
try {
return res = next.transferTo(count, throughBuffer, target);
} finally {
exitRead(res);
}
}
开发者ID:lamsfoundation,项目名称:lams,代码行数:9,代码来源:FinishableStreamSourceConduit.java
注:本文中的org.xnio.channels.StreamSinkChannel类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论