Skip to content

Commit 31e59e1

Browse files
authored
Allow customization of ChannelFsmConfigBuilder (#116)
fixes #115
1 parent 82e9fad commit 31e59e1

File tree

3 files changed

+43
-29
lines changed

3 files changed

+43
-29
lines changed

modbus-tcp/src/main/java/com/digitalpetri/modbus/tcp/client/NettyClientTransportConfig.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.digitalpetri.modbus.Modbus;
44
import com.digitalpetri.modbus.tcp.Netty;
5+
import com.digitalpetri.netty.fsm.ChannelFsmConfigBuilder;
56
import io.netty.bootstrap.Bootstrap;
67
import io.netty.channel.ChannelPipeline;
78
import io.netty.channel.EventLoopGroup;
@@ -26,6 +27,8 @@
2627
* Bootstrap}.
2728
* @param pipelineCustomizer a {@link Consumer} that can be used to customize the Netty {@link
2829
* ChannelPipeline}.
30+
* @param channelFsmCustomizer a {@link Consumer} that can be used to customize the {@link
31+
* ChannelFsmConfigBuilder}.
2932
* @param tlsEnabled whether to enable TLS (Modbus/TCP Security).
3033
* @param keyManagerFactory the {@link KeyManagerFactory} to use if TLS is enabled.
3134
* @param trustManagerFactory the {@link TrustManagerFactory} to use if TLS is enabled.
@@ -40,6 +43,7 @@ public record NettyClientTransportConfig(
4043
ExecutorService executor,
4144
Consumer<Bootstrap> bootstrapCustomizer,
4245
Consumer<ChannelPipeline> pipelineCustomizer,
46+
Consumer<ChannelFsmConfigBuilder> channelFsmCustomizer,
4347
boolean tlsEnabled,
4448
Optional<KeyManagerFactory> keyManagerFactory,
4549
Optional<TrustManagerFactory> trustManagerFactory) {
@@ -94,6 +98,9 @@ public static class Builder {
9498
/** A {@link Consumer} that can be used to customize the Netty {@link ChannelPipeline}. */
9599
public Consumer<ChannelPipeline> pipelineCustomizer = p -> {};
96100

101+
/** A {@link Consumer} that can be used to customize the {@link ChannelFsmConfigBuilder}. */
102+
public Consumer<ChannelFsmConfigBuilder> channelFsmCustomizer = c -> {};
103+
97104
/** Whether to enable TLS (Modbus/TCP Security). */
98105
public boolean tlsEnabled = false;
99106

@@ -206,6 +213,18 @@ public Builder setPipelineCustomizer(Consumer<ChannelPipeline> pipelineCustomize
206213
return this;
207214
}
208215

216+
/**
217+
* Set the {@link Consumer} that can be used to customize the {@link ChannelFsmConfigBuilder}.
218+
*
219+
* @param channelFsmCustomizer the {@link Consumer} that can be used to customize the {@link
220+
* ChannelFsmConfigBuilder}.
221+
* @return this Builder.
222+
*/
223+
public Builder setChannelFsmCustomizer(Consumer<ChannelFsmConfigBuilder> channelFsmCustomizer) {
224+
this.channelFsmCustomizer = channelFsmCustomizer;
225+
return this;
226+
}
227+
209228
/**
210229
* Set whether to enable TLS (Modbus/TCP Security).
211230
*
@@ -271,6 +290,7 @@ public NettyClientTransportConfig build() {
271290
executor,
272291
bootstrapCustomizer,
273292
pipelineCustomizer,
293+
channelFsmCustomizer,
274294
tlsEnabled,
275295
Optional.ofNullable(keyManagerFactory),
276296
Optional.ofNullable(trustManagerFactory));

modbus-tcp/src/main/java/com/digitalpetri/modbus/tcp/client/NettyRtuClientTransport.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,8 @@
99
import com.digitalpetri.modbus.client.ModbusRtuClientTransport;
1010
import com.digitalpetri.modbus.internal.util.ExecutionQueue;
1111
import com.digitalpetri.modbus.tcp.client.NettyTcpClientTransport.ConnectionListener;
12-
import com.digitalpetri.netty.fsm.ChannelActions;
13-
import com.digitalpetri.netty.fsm.ChannelFsm;
12+
import com.digitalpetri.netty.fsm.*;
1413
import com.digitalpetri.netty.fsm.ChannelFsm.TransitionListener;
15-
import com.digitalpetri.netty.fsm.ChannelFsmConfig;
16-
import com.digitalpetri.netty.fsm.ChannelFsmFactory;
17-
import com.digitalpetri.netty.fsm.Event;
18-
import com.digitalpetri.netty.fsm.State;
1914
import io.netty.bootstrap.Bootstrap;
2015
import io.netty.buffer.ByteBuf;
2116
import io.netty.buffer.Unpooled;
@@ -61,14 +56,16 @@ public class NettyRtuClientTransport implements ModbusRtuClientTransport {
6156
public NettyRtuClientTransport(NettyClientTransportConfig config) {
6257
this.config = config;
6358

64-
channelFsm =
65-
ChannelFsmFactory.newChannelFsm(
66-
ChannelFsmConfig.newBuilder()
67-
.setExecutor(config.executor())
68-
.setLazy(config.reconnectLazy())
69-
.setPersistent(config.connectPersistent())
70-
.setChannelActions(new ModbusRtuChannelActions())
71-
.build());
59+
ChannelFsmConfigBuilder channelFsmConfigBuilder =
60+
ChannelFsmConfig.newBuilder()
61+
.setExecutor(config.executor())
62+
.setLazy(config.reconnectLazy())
63+
.setPersistent(config.connectPersistent())
64+
.setChannelActions(new ModbusRtuChannelActions());
65+
66+
config.channelFsmCustomizer().accept(channelFsmConfigBuilder);
67+
68+
channelFsm = ChannelFsmFactory.newChannelFsm(channelFsmConfigBuilder.build());
7269

7370
channelFsm.addTransitionListener(
7471
(from, to, via) -> {

modbus-tcp/src/main/java/com/digitalpetri/modbus/tcp/client/NettyTcpClientTransport.java

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,8 @@
55
import com.digitalpetri.modbus.client.ModbusTcpClientTransport;
66
import com.digitalpetri.modbus.internal.util.ExecutionQueue;
77
import com.digitalpetri.modbus.tcp.ModbusTcpCodec;
8-
import com.digitalpetri.netty.fsm.ChannelActions;
9-
import com.digitalpetri.netty.fsm.ChannelFsm;
8+
import com.digitalpetri.netty.fsm.*;
109
import com.digitalpetri.netty.fsm.ChannelFsm.TransitionListener;
11-
import com.digitalpetri.netty.fsm.ChannelFsmConfig;
12-
import com.digitalpetri.netty.fsm.ChannelFsmFactory;
13-
import com.digitalpetri.netty.fsm.Event;
14-
import com.digitalpetri.netty.fsm.State;
1510
import io.netty.bootstrap.Bootstrap;
1611
import io.netty.channel.Channel;
1712
import io.netty.channel.ChannelFutureListener;
@@ -55,15 +50,17 @@ public class NettyTcpClientTransport implements ModbusTcpClientTransport {
5550
public NettyTcpClientTransport(NettyClientTransportConfig config) {
5651
this.config = config;
5752

58-
channelFsm =
59-
ChannelFsmFactory.newChannelFsm(
60-
ChannelFsmConfig.newBuilder()
61-
.setExecutor(config.executor())
62-
.setLazy(config.reconnectLazy())
63-
.setPersistent(config.connectPersistent())
64-
.setChannelActions(new ModbusTcpChannelActions())
65-
.setLoggerName("com.digitalpetri.modbus.client.ChannelFsm")
66-
.build());
53+
ChannelFsmConfigBuilder channelFsmConfigBuilder =
54+
ChannelFsmConfig.newBuilder()
55+
.setExecutor(config.executor())
56+
.setLazy(config.reconnectLazy())
57+
.setPersistent(config.connectPersistent())
58+
.setChannelActions(new ModbusTcpChannelActions())
59+
.setLoggerName("com.digitalpetri.modbus.client.ChannelFsm");
60+
61+
config.channelFsmCustomizer().accept(channelFsmConfigBuilder);
62+
63+
channelFsm = ChannelFsmFactory.newChannelFsm(channelFsmConfigBuilder.build());
6764

6865
executionQueue = new ExecutionQueue(config.executor());
6966

0 commit comments

Comments
 (0)