Improved Facade & integration test
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / core / DelegatingInboundHandler.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 package org.opendaylight.openflowjava.protocol.impl.core;\r
3 \r
4 import io.netty.channel.ChannelHandlerContext;\r
5 import io.netty.channel.ChannelInboundHandlerAdapter;\r
6 \r
7 import org.opendaylight.openflowjava.protocol.impl.connection.MessageConsumer;\r
8 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.system.rev130927.DisconnectEventBuilder;\r
9 import org.opendaylight.yangtools.yang.binding.DataObject;\r
10 import org.slf4j.Logger;\r
11 import org.slf4j.LoggerFactory;\r
12 \r
13 /**\r
14  * @author michal.polkorab\r
15  *\r
16  */\r
17 public class DelegatingInboundHandler extends ChannelInboundHandlerAdapter {\r
18 \r
19     private static final Logger LOGGER = LoggerFactory.getLogger(DelegatingInboundHandler.class);\r
20     \r
21     private MessageConsumer consumer;\r
22     private boolean inactiveMessageSent = false;\r
23     \r
24     /** \r
25      * Constructs class + creates and sets MessageConsumer\r
26      * @param connectionAdapter reference for adapter communicating with upper layers outside library\r
27      */\r
28     public DelegatingInboundHandler(MessageConsumer connectionAdapter) {\r
29         LOGGER.info("Creating DelegatingInboundHandler");\r
30         consumer = connectionAdapter;\r
31     }\r
32     \r
33     @Override\r
34     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {\r
35         consumer.consume((DataObject) msg);\r
36     }\r
37     \r
38     @Override\r
39     public void channelInactive(ChannelHandlerContext ctx) throws Exception {\r
40         LOGGER.info("Channel inactive");\r
41         if (!inactiveMessageSent) {\r
42             DisconnectEventBuilder builder = new DisconnectEventBuilder();\r
43             builder.setInfo("Channel inactive");\r
44             consumer.consume(builder.build());\r
45             inactiveMessageSent = true;\r
46         }\r
47     }\r
48 \r
49     @Override\r
50     public void channelUnregistered(ChannelHandlerContext ctx) throws Exception {\r
51         LOGGER.info("Channel unregistered");\r
52         if (!inactiveMessageSent) {\r
53             DisconnectEventBuilder builder = new DisconnectEventBuilder();\r
54             builder.setInfo("Channel unregistered");\r
55             consumer.consume(builder.build());\r
56             inactiveMessageSent = true;\r
57         }\r
58     }\r
59     \r
60 }\r