FactorialClientHandler Class — netty Architecture
Architecture documentation for the FactorialClientHandler class in FactorialClientHandler.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 6b74f961_c8cc_285b_9744_1b39fe5fb961["FactorialClientHandler"] c6f12a8e_5ce1_9888_919d_b05bbd65efda["FactorialClientHandler.java"] 6b74f961_c8cc_285b_9744_1b39fe5fb961 -->|defined in| c6f12a8e_5ce1_9888_919d_b05bbd65efda 811e1841_3d73_0136_ebd4_ad3e6c22770f["BigInteger()"] 6b74f961_c8cc_285b_9744_1b39fe5fb961 -->|method| 811e1841_3d73_0136_ebd4_ad3e6c22770f cedf20d4_6466_7326_2041_a4953a67c61a["channelActive()"] 6b74f961_c8cc_285b_9744_1b39fe5fb961 -->|method| cedf20d4_6466_7326_2041_a4953a67c61a 82fc1041_d720_4eef_1ffb_b02eeed4d41f["channelRead0()"] 6b74f961_c8cc_285b_9744_1b39fe5fb961 -->|method| 82fc1041_d720_4eef_1ffb_b02eeed4d41f 9271ce0e_decd_28b1_ce56_2b1b0f234964["exceptionCaught()"] 6b74f961_c8cc_285b_9744_1b39fe5fb961 -->|method| 9271ce0e_decd_28b1_ce56_2b1b0f234964 8fdff1c9_9d1f_006d_dcc4_a9201ec18abb["sendNumbers()"] 6b74f961_c8cc_285b_9744_1b39fe5fb961 -->|method| 8fdff1c9_9d1f_006d_dcc4_a9201ec18abb
Relationship Graph
Source Code
example/src/main/java/io/netty/example/factorial/FactorialClientHandler.java lines 34–104
public class FactorialClientHandler extends SimpleChannelInboundHandler<BigInteger> {
private ChannelHandlerContext ctx;
private int receivedMessages;
private int next = 1;
final BlockingQueue<BigInteger> answer = new LinkedBlockingQueue<BigInteger>();
public BigInteger getFactorial() {
boolean interrupted = false;
try {
for (;;) {
try {
return answer.take();
} catch (InterruptedException ignore) {
interrupted = true;
}
}
} finally {
if (interrupted) {
Thread.currentThread().interrupt();
}
}
}
@Override
public void channelActive(ChannelHandlerContext ctx) {
this.ctx = ctx;
sendNumbers();
}
@Override
public void channelRead0(ChannelHandlerContext ctx, final BigInteger msg) {
receivedMessages ++;
if (receivedMessages == FactorialClient.COUNT) {
// Offer the answer after closing the connection.
ctx.channel().close().addListener(future -> {
boolean offered = answer.offer(msg);
assert offered;
});
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
ctx.close();
}
private void sendNumbers() {
// Do not send more than 4096 numbers.
ChannelFuture future = null;
for (int i = 0; i < 4096 && next <= FactorialClient.COUNT; i++) {
future = ctx.write(Integer.valueOf(next));
next++;
}
if (next <= FactorialClient.COUNT) {
assert future != null;
future.addListener(numberSender);
}
ctx.flush();
}
private final ChannelFutureListener numberSender = future -> {
if (future.isSuccess()) {
sendNumbers();
} else {
future.cause().printStackTrace();
future.channel().close();
}
};
}
Source
Frequently Asked Questions
What is the FactorialClientHandler class?
FactorialClientHandler is a class in the netty codebase, defined in example/src/main/java/io/netty/example/factorial/FactorialClientHandler.java.
Where is FactorialClientHandler defined?
FactorialClientHandler is defined in example/src/main/java/io/netty/example/factorial/FactorialClientHandler.java at line 34.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free