Hi Christofer, I can't access this machine where I got this exception, that's the problem, I just got logs from the machine.
Kind regards, Vlad чт, 17 сент. 2020 г. в 13:38, Christofer Dutz <christofer.d...@c-ware.de>: > Hi Vlad, > > Your code says TCP ... so it should work, if you use WireShark on the > machine that is > trying to connect to the remote you won't even need the promiscuous mode. > > > Chris > > > Am 17.09.20, 12:26 schrieb "Vladyslav Milutin" <v.milu...@aegas.io>: > > Hi Christofer, > > Thanks for your advice, I'm not sure that I can use wireshark in my > case :( > Thanks for your answers, I'll try to create a watchdog for it and look > for > the connection statuses. > > Kind regards, > Vlad > > чт, 17 сент. 2020 г. в 13:02, Christofer Dutz < > christofer.d...@c-ware.de>: > > > Hi Vlad, > > > > I didn't miss the email, but for me it's almost impossible to give > you an > > advice to what might be going wrong. > > The error you are getting I usually got in the past as soon as I > send out > > something the PLC doesn't like. > > Just recently when we didn't reset the message-id counters and they > > overflowed, some PLCs just hung up. > > > > So what I would do, would be to use WireShark to check what's > actually > > going over the wire and to check if this is ok. > > If it's not, well you know what to fix. > > > > Chris > > > > > > Am 17.09.20, 11:56 schrieb "Vladyslav Milutin" <v.milu...@aegas.io>: > > > > 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 > > > > > > > > > > > > > > > > > > > > > > > > > > > >