From d428c58e15c0b2aa76dc2ea4288faa5e31c36c3b Mon Sep 17 00:00:00 2001 From: redkale Date: Mon, 30 Jan 2023 10:49:55 +0800 Subject: [PATCH] =?UTF-8?q?ProtocolCodec=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/redkale/net/ProtocolCodec.java | 65 ++++++++++++------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/redkale/net/ProtocolCodec.java b/src/main/java/org/redkale/net/ProtocolCodec.java index d35e1e335..2e64c265d 100644 --- a/src/main/java/org/redkale/net/ProtocolCodec.java +++ b/src/main/java/org/redkale/net/ProtocolCodec.java @@ -24,6 +24,8 @@ class ProtocolCodec implements CompletionHandler { private final Consumer responseConsumer; + private final ReadCompletionHandler readHandler = new ReadCompletionHandler(); + private AsyncConnection channel; private Response resp; @@ -186,30 +188,47 @@ class ProtocolCodec implements CompletionHandler { } } else { channel.setReadBuffer(buffer); - channel.read(new CompletionHandler() { - - @Override - public void completed(Integer count, ByteBuffer attachment) { - if (count < 1) { - channel.offerReadBuffer(attachment); - channel.dispose(); - return; - } - attachment.flip(); - decode(attachment, response, pipelineIndex, lastReq); - } - - @Override - public void failed(Throwable exc, ByteBuffer attachment) { - context.prepare.incrIllegalRequestCounter(); - channel.offerReadBuffer(attachment); - response.error(exc); - if (exc != null) { - request.context.logger.log(Level.FINER, "Servlet read channel erroneous, force to close channel ", exc); - } - } - }); + channel.read(readHandler.prepare(request, response, pipelineIndex, lastReq)); } } + private class ReadCompletionHandler implements CompletionHandler { + + private Request request; + + private Response response; + + private int pipelineIndex; + + private Request lastReq; + + public ReadCompletionHandler prepare(Request request, Response response, int pipelineIndex, Request lastReq) { + this.request = request; + this.response = response; + this.pipelineIndex = pipelineIndex; + this.lastReq = lastReq; + return this; + } + + @Override + public void completed(Integer count, ByteBuffer attachment) { + if (count < 1) { + channel.offerReadBuffer(attachment); + channel.dispose(); + return; + } + attachment.flip(); + decode(attachment, response, pipelineIndex, lastReq); + } + + @Override + public void failed(Throwable exc, ByteBuffer attachment) { + context.prepare.incrIllegalRequestCounter(); + channel.offerReadBuffer(attachment); + response.error(exc); + if (exc != null) { + request.context.logger.log(Level.FINER, "Servlet read channel erroneous, force to close channel ", exc); + } + } + } }