@Override public void sendChunk(ByteBuffer chunk) throws IOException { chunkResponder.sendChunk(chunk); }
@Override public void close() throws IOException { chunkResponder.close(); runHook(status); } };
@Override public void sendChunk(ByteBuf chunk) throws IOException { chunkResponder.sendChunk(chunk); }
protected void encodeSend(CharBuffer inBuffer, boolean endOfInput) throws IOException { while (true) { CoderResult coderResult = charsetEncoder.encode(inBuffer, chunkBuffer, endOfInput); if (coderResult.isOverflow()) { // if reached buffer capacity then flush chunk chunkBuffer.flip(); chunkResponder.sendChunk(Unpooled.copiedBuffer(chunkBuffer)); chunkBuffer.clear(); } else if (coderResult.isError()) { // skip characters causing error, and retry inBuffer.position(inBuffer.position() + coderResult.length()); } else { // log line was completely written break; } } } }
protected void encodeSend(CharBuffer inBuffer, boolean endOfInput) throws IOException { while (true) { CoderResult coderResult = charsetEncoder.encode(inBuffer, chunkBuffer, endOfInput); if (coderResult.isOverflow()) { // if reached buffer capacity then flush chunk chunkBuffer.flip(); chunkResponder.sendChunk(Unpooled.copiedBuffer(chunkBuffer)); chunkBuffer.clear(); } else if (coderResult.isError()) { // skip characters causing error, and retry inBuffer.position(inBuffer.position() + coderResult.length()); } else { // log line was completely written break; } } } }
@Override public void close() { // If closed already, then return if (!closed.compareAndSet(false, true)) { return; } try { // Write the last chunk writeFinal(); // Flush the encoder CoderResult coderResult; do { coderResult = charsetEncoder.flush(chunkBuffer); chunkBuffer.flip(); chunkResponder.sendChunk(Unpooled.copiedBuffer(chunkBuffer)); chunkBuffer.clear(); } while (coderResult.isOverflow()); } catch (IOException e) { // If cannot send chunks, nothing can be done (since the client closed connection). // Just log the error as debug. LOG.debug("Failed to send chunk", e); } finally { Closeables.closeQuietly(chunkResponder); } }
@Override public void close() { // If closed already, then return if (!closed.compareAndSet(false, true)) { return; } try { // Write the last chunk writeFinal(); // Flush the encoder CoderResult coderResult; do { coderResult = charsetEncoder.flush(chunkBuffer); chunkBuffer.flip(); chunkResponder.sendChunk(Unpooled.copiedBuffer(chunkBuffer)); chunkBuffer.clear(); } while (coderResult.isOverflow()); } catch (IOException e) { // If cannot send chunks, nothing can be done (since the client closed connection). // Just log the error as debug. LOG.debug("Failed to send chunk", e); } finally { Closeables.closeQuietly(chunkResponder); } }