StompClientHandler Class — netty Architecture
Architecture documentation for the StompClientHandler class in StompClientHandler.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 40e1f477_092f_cde8_6cf8_35436390681e["StompClientHandler"] 9fce7ff3_d70f_5c41_2c00_ff150a8215c1["StompClientHandler.java"] 40e1f477_092f_cde8_6cf8_35436390681e -->|defined in| 9fce7ff3_d70f_5c41_2c00_ff150a8215c1 c1797c6b_4ea8_35bb_7afa_6a53ca48c9e7["channelActive()"] 40e1f477_092f_cde8_6cf8_35436390681e -->|method| c1797c6b_4ea8_35bb_7afa_6a53ca48c9e7 ea7ab5f8_fa3f_52b3_711e_c46be8b4dd17["channelRead0()"] 40e1f477_092f_cde8_6cf8_35436390681e -->|method| ea7ab5f8_fa3f_52b3_711e_c46be8b4dd17 c24a7ae1_0fcb_21c6_cb2e_da916cb71925["exceptionCaught()"] 40e1f477_092f_cde8_6cf8_35436390681e -->|method| c24a7ae1_0fcb_21c6_cb2e_da916cb71925
Relationship Graph
Source Code
example/src/main/java/io/netty/example/stomp/StompClientHandler.java lines 28–100
public class StompClientHandler extends SimpleChannelInboundHandler<StompFrame> {
private enum ClientState {
AUTHENTICATING,
AUTHENTICATED,
SUBSCRIBED,
DISCONNECTING
}
private ClientState state;
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
state = ClientState.AUTHENTICATING;
StompFrame connFrame = new DefaultStompFrame(StompCommand.CONNECT);
connFrame.headers().set(StompHeaders.ACCEPT_VERSION, "1.2");
connFrame.headers().set(StompHeaders.HOST, StompClient.HOST);
connFrame.headers().set(StompHeaders.LOGIN, StompClient.LOGIN);
connFrame.headers().set(StompHeaders.PASSCODE, StompClient.PASSCODE);
ctx.writeAndFlush(connFrame);
}
@Override
protected void channelRead0(ChannelHandlerContext ctx, StompFrame frame) throws Exception {
String subscrReceiptId = "001";
String disconReceiptId = "002";
switch (frame.command()) {
case CONNECTED:
StompFrame subscribeFrame = new DefaultStompFrame(StompCommand.SUBSCRIBE);
subscribeFrame.headers().set(StompHeaders.DESTINATION, StompClient.TOPIC);
subscribeFrame.headers().set(StompHeaders.RECEIPT, subscrReceiptId);
subscribeFrame.headers().set(StompHeaders.ID, "1");
System.out.println("connected, sending subscribe frame: " + subscribeFrame);
state = ClientState.AUTHENTICATED;
ctx.writeAndFlush(subscribeFrame);
break;
case RECEIPT:
String receiptHeader = frame.headers().getAsString(StompHeaders.RECEIPT_ID);
if (state == ClientState.AUTHENTICATED && receiptHeader.equals(subscrReceiptId)) {
StompFrame msgFrame = new DefaultStompFrame(StompCommand.SEND);
msgFrame.headers().set(StompHeaders.DESTINATION, StompClient.TOPIC);
msgFrame.content().writeBytes("some payload".getBytes());
System.out.println("subscribed, sending message frame: " + msgFrame);
state = ClientState.SUBSCRIBED;
ctx.writeAndFlush(msgFrame);
} else if (state == ClientState.DISCONNECTING && receiptHeader.equals(disconReceiptId)) {
System.out.println("disconnected");
ctx.close();
} else {
throw new IllegalStateException("received: " + frame + ", while internal state is " + state);
}
break;
case MESSAGE:
if (state == ClientState.SUBSCRIBED) {
System.out.println("received frame: " + frame);
StompFrame disconnFrame = new DefaultStompFrame(StompCommand.DISCONNECT);
disconnFrame.headers().set(StompHeaders.RECEIPT, disconReceiptId);
System.out.println("sending disconnect frame: " + disconnFrame);
state = ClientState.DISCONNECTING;
ctx.writeAndFlush(disconnFrame);
}
break;
default:
break;
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
cause.printStackTrace();
ctx.close();
}
}
Source
Frequently Asked Questions
What is the StompClientHandler class?
StompClientHandler is a class in the netty codebase, defined in example/src/main/java/io/netty/example/stomp/StompClientHandler.java.
Where is StompClientHandler defined?
StompClientHandler is defined in example/src/main/java/io/netty/example/stomp/StompClientHandler.java at line 28.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free