The AddOn abstraction provides a simple and generic way how to extend existing HttpServer functionality. The interface looks very simple:
/** * The {@link HttpServer} addon interface, responsible for adding * features like WebSockets, Comet to HttpServer. */ public interface AddOn { /** * The method, which will be invoked by {@link HttpServer} in order to * initialize the AddOn on the passed {@link NetworkListener}. * Most of the time the AddOn implementation will update the passed * {@link NetworkListener}'s {@link FilterChainBuilder} by adding custom * {@link Filter}(s), which implement AddOn's logic. * * @param networkListener the {@link NetworkListener} the addon is being * initialized on. * @param builder the {@link FilterChainBuilder}, * representing the {@link NetworkListener} logic. */ public void setup(NetworkListener networkListener, FilterChainBuilder builder); }
So basically custom AddOn should implement only one method, and most of the time AddOn just inserts a custom logic Filter into the given FilterChainBuilder. Here is example of WebSocketAddOn:
/** * WebSockets {@link AddOn} for the {@link org.glassfish.grizzly.http.server.HttpServer}. */ public class WebSocketAddOn implements AddOn { @Override public void setup(final NetworkListener networkListener, final FilterChainBuilder builder) { // Get the index of HttpCodecFilter in the HttpServer filter chain final int httpCodecFilterIdx = builder.indexOfType(HttpCodecFilter.class); if (httpCodecFilterIdx >= 0) { // Insert the WebSocketFilter right after HttpCodecFilter builder.add(httpCodecFilterIdx + 1, new WebSocketFilter()); } } }