Instruction experimenterId fix
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / core / IdleHandler.java
index 8d5ca853c8f992d6ac632f62d1dfc89d9c2887d5..9b6e863def3c8d52d59c6fbf0f1b92daee8bcdba 100644 (file)
@@ -1,12 +1,17 @@
-/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
-package org.opendaylight.openflowjava.protocol.impl.core;
+/*
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
 
-import java.util.concurrent.TimeUnit;
+package org.opendaylight.openflowjava.protocol.impl.core;
 
 import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.timeout.IdleState;
-import io.netty.handler.timeout.IdleStateEvent;
-import io.netty.handler.timeout.IdleStateHandler;
+import io.netty.handler.timeout.ReadTimeoutHandler;
+
+import java.util.concurrent.TimeUnit;
 
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.system.rev130927.SwitchIdleEventBuilder;
 import org.slf4j.Logger;
@@ -16,30 +21,33 @@ import org.slf4j.LoggerFactory;
  * Detects idle state of switch and informs upper layers
  * @author michal.polkorab
  */
-public class IdleHandler extends IdleStateHandler{
+public class IdleHandler extends ReadTimeoutHandler {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(IdleHandler.class);
+    private boolean first = true;
 
     /**
      * @param readerIdleTime
-     * @param writerIdleTime
-     * @param allIdleTime
      * @param unit
      */
-    public IdleHandler(long readerIdleTime, long writerIdleTime,
-            long allIdleTime, TimeUnit unit) {
-        super(readerIdleTime, writerIdleTime, allIdleTime, unit);
+    public IdleHandler(final long readerIdleTime, final TimeUnit unit) {
+        super(readerIdleTime, unit);
     }
 
     @Override
-    protected void channelIdle(ChannelHandlerContext ctx, IdleStateEvent evt)
-            throws Exception {
-        if ((evt.state() == IdleState.READER_IDLE) && (evt.isFirst())) {
-            LOGGER.info("Switch idle");
+    public void channelRead(final ChannelHandlerContext ctx, final Object msg) throws Exception {
+        super.channelRead(ctx, msg);
+        first = true;
+    }
+
+    @Override
+    protected void readTimedOut(final ChannelHandlerContext ctx) throws Exception {
+        if (first) {
+            LOGGER.debug("Switch idle");
             SwitchIdleEventBuilder builder = new SwitchIdleEventBuilder();
             builder.setInfo("Switch idle");
             ctx.fireChannelRead(builder.build());
+            first = false;
         }
     }
-
 }