Archived
0

MCSM: подготовка к WebSocket

This commit is contained in:
2017-05-08 23:57:40 +03:00
parent d6a9775103
commit 8fb8201e18
4 changed files with 108 additions and 3 deletions

View File

@@ -5,7 +5,6 @@
package asys.mcsmanager;
import asys.api.Config;
import asys.mcsmanager.server.Server;
import asys.webinterface.api.Webinterface;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
@@ -20,7 +19,8 @@ public class Activator implements BundleActivator, ServiceListener {
private ServiceTracker<?, Webinterface> serviceTracker;
private MCSM_WebModule module;
private Webinterface webinterface;
private Server serverManager;
private asys.mcsmanager.server.Server serverManager;
private asys.mcsmanager.websocket.Server webconsoleServer;
@Override
public void start(BundleContext context) throws Exception {
@@ -43,13 +43,21 @@ public class Activator implements BundleActivator, ServiceListener {
int port = config.getInt("asys.mcsmanager.port", 8779);
String passcode = config.getString("asys.mcsmanager.passcode", "testpasscode");
logger.debug("Start server manager: {}:{}", host, port);
serverManager = new Server();
serverManager = new asys.mcsmanager.server.Server();
serverManager.start(host, port, passcode, manager);
host = config.getString("asys.mcsmanager.webconsole.host", "127.0.0.1");
port = config.getInt("asys.mcsmanager.webconsole.port", 8770);
logger.debug("Start webconsole server: {}:{}", host, port);
webconsoleServer = new asys.mcsmanager.websocket.Server();
webconsoleServer.start(host, port);
serviceConfigTracker.close();
}
@Override
public void stop(BundleContext context) throws Exception {
webconsoleServer.shutdown();
serverManager.shutdown();
if (webinterface != null) {

View File

@@ -0,0 +1,43 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 2017-05-08
*/
package asys.mcsmanager.websocket;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.codec.http.*;
public class IndexPageHandler extends ChannelInboundHandlerAdapter {
private static final byte[] CONTENT = "Hello".getBytes();
@Override
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
ctx.flush();
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof HttpRequest) {
HttpRequest req = (HttpRequest)msg;
if (HttpHeaders.is100ContinueExpected(req)) {
ctx.write(new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.CONTINUE));
}
boolean keepAlive = HttpHeaders.isKeepAlive(req);
FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK,
Unpooled.wrappedBuffer(CONTENT));
response.headers().set(HttpHeaders.Names.CONTENT_TYPE, "text/plain");
response.headers().set(HttpHeaders.Names.CONTENT_LENGTH, response.content().readableBytes());
if (!keepAlive) {
ctx.write(response).addListener(ChannelFutureListener.CLOSE);
} else {
response.headers().set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
ctx.write(response);
}
}
}
}

View File

@@ -0,0 +1,52 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 2017-05-08
*/
package asys.mcsmanager.websocket;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.http.HttpServerCodec;
public class Server {
private EventLoopGroup bossGroup, workerGroup;
public void start(String host, int port) {
bossGroup = new NioEventLoopGroup(1);
workerGroup = new NioEventLoopGroup();
ServerBootstrap serverBootstrap = createServerBootstrap();
serverBootstrap.bind(host, port);
}
public void shutdown() {
workerGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
private ServerBootstrap createServerBootstrap() {
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(createChannelInitializer());
return bootstrap;
}
private ChannelInitializer createChannelInitializer() {
return new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
socketChannel.pipeline().addLast(
new HttpServerCodec(),
new IndexPageHandler()
);
}
};
}
}