Archived
0
This repository has been archived on 2022-04-17. You can view files and clone it, but cannot push or open issues or pull requests.
Files
asys/mcserver-manager/src/main/java/asys/mcsmanager/websocket/FrameHandler.java
2017-06-11 22:52:35 +03:00

42 lines
1.7 KiB
Java

/*
* DmitriyMX <dimon550@gmail.com>
* 2017-05-09
*/
package asys.mcsmanager.websocket;
import asys.mcsmanager.Linker;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import io.netty.handler.codec.http.websocketx.WebSocketFrame;
import io.netty.util.AttributeKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class FrameHandler extends SimpleChannelInboundHandler<WebSocketFrame> {
private static final AttributeKey<String> WC_SERVERNAME = AttributeKey.valueOf("WC_SERVERNAME");
private final Logger logger = LoggerFactory.getLogger(FrameHandler.class);
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
Linker.getInstance().removeWebconsoleListener(ctx.channel().attr(WC_SERVERNAME).get(), ctx.channel());
}
@Override
protected void channelRead0(ChannelHandlerContext ctx, WebSocketFrame frame) throws Exception {
if (frame instanceof TextWebSocketFrame) {
String requestText = ((TextWebSocketFrame)frame).text();
if (requestText.startsWith("]")) {
String serverName = requestText.substring(1);
ctx.channel().attr(WC_SERVERNAME).set(serverName);
Linker.getInstance().addWebconsoleListener(serverName, ctx.channel());
} else if (requestText.startsWith(":")) {
String command = requestText.substring(1);
Linker.getInstance().sendCommand(ctx.channel().attr(WC_SERVERNAME).get(), command);
}
} else {
logger.warn("unsupport frame type: {}", frame.getClass().getName());
}
}
}