42 lines
1.7 KiB
Java
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());
|
|
}
|
|
}
|
|
}
|