Home / Class/ StompWebSocketClientPageHandler Class — netty Architecture

StompWebSocketClientPageHandler Class — netty Architecture

Architecture documentation for the StompWebSocketClientPageHandler class in StompWebSocketClientPageHandler.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  b42dfc71_9168_e756_15f4_7d0276b026db["StompWebSocketClientPageHandler"]
  fca07a25_c248_9594_694a_e7fea43727af["StompWebSocketClientPageHandler.java"]
  b42dfc71_9168_e756_15f4_7d0276b026db -->|defined in| fca07a25_c248_9594_694a_e7fea43727af
  e3cdedb3_c5ef_29b6_56ca_c5f8bef3c58b["StompWebSocketClientPageHandler()"]
  b42dfc71_9168_e756_15f4_7d0276b026db -->|method| e3cdedb3_c5ef_29b6_56ca_c5f8bef3c58b
  a2c90322_aea7_93db_a3b3_6c785b6a2668["channelRead0()"]
  b42dfc71_9168_e756_15f4_7d0276b026db -->|method| a2c90322_aea7_93db_a3b3_6c785b6a2668
  1347a6f5_daf3_a657_75a5_08dccb979171["sendResource()"]
  b42dfc71_9168_e756_15f4_7d0276b026db -->|method| 1347a6f5_daf3_a657_75a5_08dccb979171
  f59e6f53_60f4_c71f_4c56_9c745733d169["sendResponse()"]
  b42dfc71_9168_e756_15f4_7d0276b026db -->|method| f59e6f53_60f4_c71f_4c56_9c745733d169

Relationship Graph

Source Code

example/src/main/java/io/netty/example/stomp/websocket/StompWebSocketClientPageHandler.java lines 45–146

@Sharable
public final class StompWebSocketClientPageHandler extends SimpleChannelInboundHandler<FullHttpRequest> {

    static final StompWebSocketClientPageHandler INSTANCE = new StompWebSocketClientPageHandler();

    private StompWebSocketClientPageHandler() {
    }

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest request) {
        if (request.headers().contains(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET, true)) {
            ctx.fireChannelRead(request.retain());
            return;
        }

        if (request.decoderResult().isFailure()) {
            FullHttpResponse badRequest = new DefaultFullHttpResponse(request.protocolVersion(), BAD_REQUEST);
            sendResponse(badRequest, ctx, true);
            return;
        }

        if (!sendResource(request, ctx)) {
            FullHttpResponse notFound = new DefaultFullHttpResponse(request.protocolVersion(), NOT_FOUND);
            notFound.headers().set(CONTENT_TYPE, TEXT_PLAIN);
            String payload = "Requested resource " + request.uri() + " not found";
            notFound.content().writeCharSequence(payload, CharsetUtil.UTF_8);
            HttpUtil.setContentLength(notFound, notFound.content().readableBytes());
            sendResponse(notFound, ctx, true);
        }
    }

    private static boolean sendResource(FullHttpRequest request, ChannelHandlerContext ctx) {
        if (request.uri().isEmpty() || !request.uri().startsWith("/")) {
            return false;
        }

        String requestResource = request.uri().substring(1);
        if (requestResource.isEmpty()) {
            requestResource = "index.html";
        }

        URL resourceUrl = INSTANCE.getClass().getResource(requestResource);
        if (resourceUrl == null) {
            return false;
        }

        RandomAccessFile raf = null;
        long fileLength = -1L;
        try {
            raf = new RandomAccessFile(resourceUrl.getFile(), "r");
            fileLength = raf.length();
        } catch (FileNotFoundException fne) {
            System.out.println("File not found " + fne.getMessage());
            return false;
        } catch (IOException io) {
            System.out.println("Cannot read file length " + io.getMessage());
            return false;
        } finally {
            if (fileLength < 0 && raf != null) {
                try {
                    raf.close();
                } catch (IOException io) {
                    // Nothing to do
                }
            }
        }

        HttpResponse response = new DefaultHttpResponse(request.protocolVersion(), OK);
        HttpUtil.setContentLength(response, fileLength);

        String contentType = "application/octet-stream";
        if (requestResource.endsWith("html")) {
            contentType = "text/html; charset=UTF-8";
        } else if (requestResource.endsWith("css")) {
            contentType = "text/css; charset=UTF-8";
        } else if (requestResource.endsWith("js")) {
            contentType = "application/javascript";
        }

        response.headers().set(CONTENT_TYPE, contentType);
        sendResponse(response, ctx, false);

Frequently Asked Questions

What is the StompWebSocketClientPageHandler class?
StompWebSocketClientPageHandler is a class in the netty codebase, defined in example/src/main/java/io/netty/example/stomp/websocket/StompWebSocketClientPageHandler.java.
Where is StompWebSocketClientPageHandler defined?
StompWebSocketClientPageHandler is defined in example/src/main/java/io/netty/example/stomp/websocket/StompWebSocketClientPageHandler.java at line 45.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free