io.higgs.ws.protocol.WebSocketDetector Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of websocket Show documentation
Show all versions of websocket Show documentation
Higgs' WebSocket server and client implementation
package io.higgs.ws.protocol;
import io.higgs.http.server.HttpRequestDecoder;
import io.higgs.http.server.HttpResponseEncoder;
import io.higgs.http.server.protocol.HttpDetector;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPipeline;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.stream.ChunkedWriteHandler;
/**
* An HTTP detector which only handles GET requests
*
* @author Courtney Robinson
*/
public class WebSocketDetector extends HttpDetector {
protected final WebSocketConfiguration config;
public WebSocketDetector(WebSocketConfiguration config) {
super(config);
this.config = config;
}
@Override
public boolean detected(ChannelHandlerContext ctx, ByteBuf in) {
final int magic1 = in.getUnsignedByte(in.readerIndex());
final int magic2 = in.getUnsignedByte(in.readerIndex() + 1);
return magic1 == 'G' && magic2 == 'E'; //GET request
}
@Override
public WebSocketHandler setupPipeline(ChannelPipeline p, ChannelHandlerContext ctx) {
//WebSocketHandler is stateful so must do an instance per request/channel
WebSocketHandler h = new WebSocketHandler(config);
p.addLast("ws-decoder", new HttpRequestDecoder());
p.addLast("ws-aggregator", new HttpObjectAggregator(65536));
p.addLast("ws-encoder", new HttpResponseEncoder());
p.addLast("ws-chunkedWriter", new ChunkedWriteHandler());
p.addLast("ws-handler", h);
return h;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy