1 package org.jetbrains.io.webSocket;
3 import io.netty.channel.Channel;
4 import io.netty.channel.ChannelHandler;
5 import io.netty.channel.ChannelHandlerContext;
6 import io.netty.handler.codec.http.websocketx.CloseWebSocketFrame;
7 import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
8 import org.jetbrains.annotations.NotNull;
9 import org.jetbrains.io.ChannelBufferToString;
10 import org.jetbrains.io.jsonRpc.Client;
11 import org.jetbrains.io.jsonRpc.ClientManager;
12 import org.jetbrains.io.jsonRpc.ClientManagerKt;
13 import org.jetbrains.io.jsonRpc.MessageServer;
15 @ChannelHandler.Sharable
16 final class MessageChannelHandler extends WebSocketProtocolHandler {
17 private final ClientManager clientManager;
18 private final MessageServer messageServer;
20 MessageChannelHandler(@NotNull ClientManager clientManager, @NotNull MessageServer messageServer) {
21 this.clientManager = clientManager;
22 this.messageServer = messageServer;
26 protected void closeFrameReceived(@NotNull Channel channel, @NotNull CloseWebSocketFrame message) {
27 WebSocketClient client = (WebSocketClient)channel.attr(ClientManagerKt.getCLIENT()).get();
29 super.closeFrameReceived(channel, message);
33 clientManager.disconnectClient(channel, client, false);
36 client.disconnect(message);
42 protected void textFrameReceived(@NotNull Channel channel, @NotNull TextWebSocketFrame message) {
43 WebSocketClient client = (WebSocketClient)channel.attr(ClientManagerKt.getCLIENT()).get();
46 chars = ChannelBufferToString.readChars(message.content());
53 clientManager.getExceptionHandler().exceptionCaught(e);
59 messageServer.messageReceived(client, chars);
62 clientManager.getExceptionHandler().exceptionCaught(e);
67 public void channelInactive(ChannelHandlerContext context) throws Exception {
68 Client client = context.channel().attr(ClientManagerKt.getCLIENT()).get();
69 // if null, so, has already been explicitly removed
71 clientManager.disconnectClient(context.channel(), client, false);
76 public void exceptionCaught(@NotNull ChannelHandlerContext context, @NotNull Throwable cause) {
78 clientManager.getExceptionHandler().exceptionCaught(cause);
81 super.exceptionCaught(context, cause);