Hi guys, I just will resend this message in case you missed it.
Hi guys, I can send you this code, which doesn't have much business logic, and all params are renamed. public abstract class LalelDriver<T extends Message> extends GeneratedDriverBase<T> { private final ChannelHandler handler; @Override public String getProtocolName() { return "Lalel"; } @Override protected Class<? extends Configuration> getConfigurationType() { return LalelConfiguration.class; } @Override protected String getDefaultTransport() { return "tcp"; } @Override protected boolean canSubscribe() { return true; } @Override protected LalelFieldHandler getFieldHandler() { return new LalelFieldHandler(); } @Override protected void initializePipeline(ChannelFactory channelFactory) { try { final Channel channel = channelFactory.createChannel(this.handler); channelFactory.initializePipeline(channel.pipeline()); } catch (PlcConnectionException e) { log.error("Failed to create channel"); } } } public classLalelDriverTcp extends LalelDriver<EthernetMessage> { public LalelDriverTcp(final ChannelHandler handler){ super(handler); } @Override public String getProtocolCode() { return "lalel-tcp"; } @Override protected ProtocolStackConfigurer<EthernetMessage> getStackConfigurer() { return DriverUtils.buildStackConfigurer( EthernetMessage.class, EthernetMessageIO.class, LalelProtocolLogicTcp.class, ByteLengthEstimator.class ); } /** * Estimate the Length of a Packet */ public static class ByteLengthEstimator implements ToIntFunction<ByteBuf> { @Override public int applyAsInt(ByteBuf byteBuf) { if (byteBuf.readableBytes() >= 2) { return byteBuf.getUnsignedShortLE(byteBuf.readerIndex()); } return -1; } } } And connection code: this.connection = driver.getConnection(connectionString); this.connection.connect(); Kind regards, Vlad Kind regards, Vlad чт, 17 сент. 2020 г. в 12:09, Christofer Dutz <christofer.d...@c-ware.de>: > Hi Vlad, > > 0.8.0-SNAPSHOT is the current development version ... > we'll be releasing that as soon as we tied up some things we're currently > working on. > > Chris > > > > Am 17.09.20, 11:02 schrieb "Vladyslav Milutin" <v.milu...@aegas.io>: > > Hi Stefano, > > I'm curious about the 0.8.0 version, where I can find it? Since maven > repo > contains the latest version 0.7.0. > > Kind regards, > Vlad > > ср, 16 сент. 2020 г. в 17:30, Stefano Bossi <stefano.bo...@gmail.com>: > > > Hi Vlad, > > > > this seems similar to a bug fixed some time ago, I am not really > sure but > > it worth to try to use the 0.8.0 version where this fix is present. > > > > You should try to build the version and here you could fine some > help: > > https://plc4x.apache.org/developers/index.html > > > > Regards, > > Stefano > > > > On 16/09/2020 14:32, Vladyslav Milutin wrote: > > > > Hello guys, > > > > I'm writing to you with a hope that you can help me with exception > > handling. > > Currently after a long time connection can be reset by peer. See > stacktrace > > below. > > > > I've tried to add a custom ChannelHandler which Overrides > exceptionCaught() > > and add it in Driver#initializePipeline() see code below. Also has > tried to > > add a channel that can be obtained from DefaultNettyPlcConnection. > And none > > of them actualy was added to the pipeline where this exception was > thrown. > > > > plc4x version: 0.7.0 > > > > StatckTrace: > > 2020-09-16 13:50:03.340 WARN [nioEventLoopGroup-58-1] > > [io.netty.channel.DefaultChannelPipeline] > onUnhandledInboundException - An > > exceptionCaught() event was fired, and it reached at the tail of the > > pipeline. It usually means the last handler in the pipeline did not > handle > > the exception. > > java.io.IOException: Connection reset by peer > > at java.base/sun.nio.ch.FileDispatcherImpl.read0(Native Method) > > at java.base/sun.nio.ch > .SocketDispatcher.read(SocketDispatcher.java:39) > > at > java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:276) > > at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:233) > > at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:223) > > at java.base/sun.nio.ch > .SocketChannelImpl.read(SocketChannelImpl.java:358) > > at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:253) > > at > io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1133) > > at > > > io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350) > > at > > > io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148) > > at > > > io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) > > at > > > io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) > > at > > > io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) > > at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) > > at > > > io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) > > at > > > io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) > > at > > > io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) > > at java.base/java.lang.Thread.run(Thread.java:834) > > > > Driver#initializePipeline: > > try { > > final Channel channel = > > channelFactory.createChannel(this.handler); > > channelFactory.initializePipeline(channel.pipeline()); > > > > } catch (PlcConnectionException e) { > > log.error("Failed to create channel"); > > } > > > > ChannelHandler: > > @Override > > public void exceptionCaught(ChannelHandlerContext ctx, Throwable > cause) > > { > > log.warn("ExceptionCaught in worker: ctx = [{}], cause = > [{}, {}], > > workerName = [{}]", > > ctx, cause.getClass(), cause.getMessage(), > workerName); > > if (cause instanceof ConnectTimeoutException) { > > log.warn("ConnectionTimeout caught: workerName = [{}]", > > workerName); > > } > > if ((cause instanceof IOException) && > > cause.getMessage().contains("Connection reset by peer")) { > > log.warn("Connection reset by peer caught: workerName = > [{}]", > > workerName); > > } else { > > log.info("Unexpected exception caught: workerName = > [{}]", > > workerName); > > } > > > > this.callback.accept(cause); > > } > > > > DefaultNettyPlcConnection#channel:log.info("Trying to get > connection channel: worker name = [{}]", > > this.workerName); > > final Channel channel = ((DefaultNettyPlcConnection) > > this.connection).getChannel(); > > log.info("Channel obtained successfully. Adding custom > > channelHandler to it: channel = [{}], workerName = [{}]", channel, > > this.workerName); > > channel.pipeline().addLast(this.channelHandler); > > log.info("ChannelHandler added: channel = [{}], > channelHandler = > > [{}], workerName = [{}]", channel, this.channelHandler, > this.workerName); > > > > Kind regards, > > Vlad > > > > > > > > > >