From 6d50c5978b587de7f4c7f82a3d10a3113db42135 Mon Sep 17 00:00:00 2001 From: Alexander Koshevoy Date: Tue, 10 Jul 2018 20:28:07 +0300 Subject: [PATCH] PY-18029 Use DirectedMessageHandler both in TNettyClientTransport and TNettyServerTransport --- .../{client => }/DirectedMessageHandler.kt | 3 +-- .../jetbrains/python/console/thrift/README.md | 2 +- .../thrift/client/TNettyClientTransport.kt | 1 + .../thrift/server/TNettyServerTransport.kt | 21 +++++-------------- 4 files changed, 8 insertions(+), 19 deletions(-) rename python/python-console/src/com/jetbrains/python/console/thrift/{client => }/DirectedMessageHandler.kt (92%) diff --git a/python/python-console/src/com/jetbrains/python/console/thrift/client/DirectedMessageHandler.kt b/python/python-console/src/com/jetbrains/python/console/thrift/DirectedMessageHandler.kt similarity index 92% rename from python/python-console/src/com/jetbrains/python/console/thrift/client/DirectedMessageHandler.kt rename to python/python-console/src/com/jetbrains/python/console/thrift/DirectedMessageHandler.kt index b264715aee18..c6c25b326821 100644 --- a/python/python-console/src/com/jetbrains/python/console/thrift/client/DirectedMessageHandler.kt +++ b/python/python-console/src/com/jetbrains/python/console/thrift/DirectedMessageHandler.kt @@ -1,6 +1,5 @@ -package com.jetbrains.python.console.thrift.client +package com.jetbrains.python.console.thrift -import com.jetbrains.python.console.thrift.DirectedMessage import com.jetbrains.python.console.thrift.DirectedMessage.MessageDirection.REQUEST import com.jetbrains.python.console.thrift.DirectedMessage.MessageDirection.RESPONSE import io.netty.buffer.ByteBuf diff --git a/python/python-console/src/com/jetbrains/python/console/thrift/README.md b/python/python-console/src/com/jetbrains/python/console/thrift/README.md index cae82d18472a..5b058c4caaec 100644 --- a/python/python-console/src/com/jetbrains/python/console/thrift/README.md +++ b/python/python-console/src/com/jetbrains/python/console/thrift/README.md @@ -42,7 +42,7 @@ To implement this idea let each message be flagged whether the message is a requ On Java side the message with direction flag is `com.jetbrains.python.console.thrift.DirectedMessage`. The incoming message is parsed into `DirectedMessage` using `com.jetbrains.python.console.thrift.DirectedMessageCodec`. The message content is dispatched then via -`com.jetbrains.python.console.thrift.client.DirectedMessageHandler` either to request or response stream and will be handled accordingly by +`com.jetbrains.python.console.thrift.DirectedMessageHandler` either to request or response stream and will be handled accordingly by *server-side Thrift service* or *client-side Thrift service*. *Netty* handlers are asynchronous so that requests for *server-side service* and responses for *client-side service* are processed diff --git a/python/python-console/src/com/jetbrains/python/console/thrift/client/TNettyClientTransport.kt b/python/python-console/src/com/jetbrains/python/console/thrift/client/TNettyClientTransport.kt index 5dececdc7c88..fec5306bad4d 100644 --- a/python/python-console/src/com/jetbrains/python/console/thrift/client/TNettyClientTransport.kt +++ b/python/python-console/src/com/jetbrains/python/console/thrift/client/TNettyClientTransport.kt @@ -2,6 +2,7 @@ package com.jetbrains.python.console.thrift.client import com.jetbrains.python.console.thrift.DirectedMessage import com.jetbrains.python.console.thrift.DirectedMessageCodec +import com.jetbrains.python.console.thrift.DirectedMessageHandler import com.jetbrains.python.console.thrift.TCumulativeTransport import io.netty.bootstrap.Bootstrap import io.netty.buffer.ByteBuf diff --git a/python/python-console/src/com/jetbrains/python/console/thrift/server/TNettyServerTransport.kt b/python/python-console/src/com/jetbrains/python/console/thrift/server/TNettyServerTransport.kt index f8c71e59c93f..863f1ac95a19 100644 --- a/python/python-console/src/com/jetbrains/python/console/thrift/server/TNettyServerTransport.kt +++ b/python/python-console/src/com/jetbrains/python/console/thrift/server/TNettyServerTransport.kt @@ -4,12 +4,13 @@ import com.intellij.openapi.diagnostic.Logger import com.intellij.util.ConcurrencyUtil import com.jetbrains.python.console.thrift.DirectedMessage import com.jetbrains.python.console.thrift.DirectedMessageCodec +import com.jetbrains.python.console.thrift.DirectedMessageHandler import com.jetbrains.python.console.thrift.TCumulativeTransport import io.netty.bootstrap.ServerBootstrap import io.netty.channel.ChannelHandlerContext +import io.netty.channel.ChannelInboundHandlerAdapter import io.netty.channel.ChannelInitializer import io.netty.channel.ChannelOption -import io.netty.channel.SimpleChannelInboundHandler import io.netty.channel.nio.NioEventLoopGroup import io.netty.channel.socket.SocketChannel import io.netty.channel.socket.nio.NioServerSocketChannel @@ -109,26 +110,14 @@ class TNettyServerTransport(port: Int) : TServerTransport() { val thriftTransport = TNettyTransport(ch) val reverseTransport = TNettyClientTransport(ch) - ch.pipeline().addLast(object : SimpleChannelInboundHandler() { - override fun channelRead0(ctx: ChannelHandlerContext, msg: DirectedMessage) { - when (msg.direction) { - DirectedMessage.MessageDirection.REQUEST -> { - thriftTransport.outputStream - } - DirectedMessage.MessageDirection.RESPONSE -> { - reverseTransport.outputStream - } - }.let { - it.write(msg.content) - it.flush() - } - } + ch.pipeline().addLast(DirectedMessageHandler(reverseTransport.outputStream, thriftTransport.outputStream)) + ch.pipeline().addLast(object: ChannelInboundHandlerAdapter() { override fun channelInactive(ctx: ChannelHandlerContext) { thriftTransport.close() reverseTransport.close() - ctx.fireChannelInactive() + super.channelInactive(ctx) } })