f0990dae1869399f0d7c546b363030a5f33816a2
[openflowjava.git] / simple-client / src / main / java / org / opendaylight / openflowjava / protocol / impl / clients / SimpleClientHandler.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 \r
3 package org.opendaylight.openflowjava.protocol.impl.clients;\r
4 \r
5 import io.netty.buffer.ByteBuf;\r
6 import io.netty.channel.ChannelHandlerContext;\r
7 import io.netty.channel.ChannelInboundHandlerAdapter;\r
8 \r
9 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
10 import org.slf4j.Logger;\r
11 import org.slf4j.LoggerFactory;\r
12 \r
13 import com.google.common.util.concurrent.SettableFuture;\r
14 \r
15 /**\r
16  *\r
17  * @author michal.polkorab\r
18  */\r
19 public class SimpleClientHandler extends ChannelInboundHandlerAdapter {\r
20 \r
21     protected static final Logger LOGGER = LoggerFactory.getLogger(SimpleClientHandler.class);\r
22     private SettableFuture<Boolean> isOnlineFuture;\r
23     protected ScenarioHandler scenarioHandler;\r
24 \r
25     /**\r
26      * @param isOnlineFuture future notifier of connected channel\r
27      */\r
28     public SimpleClientHandler(SettableFuture<Boolean> isOnlineFuture, ScenarioHandler scenarioHandler) {\r
29         this.isOnlineFuture = isOnlineFuture;\r
30         this.scenarioHandler = scenarioHandler;\r
31     }\r
32 \r
33     @Override\r
34     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {\r
35         LOGGER.info("SimpleClientHandler - start of read");\r
36         ByteBuf bb = (ByteBuf) msg;\r
37         if (LOGGER.isDebugEnabled()) {\r
38             LOGGER.debug("<< " + ByteBufUtils.byteBufToHexString(bb));\r
39         }\r
40         byte[] message = new byte[8];\r
41         bb.readBytes(message);\r
42         scenarioHandler.addOfMsg(message);\r
43         skipMsg(bb);\r
44         LOGGER.info("end of read");\r
45     }\r
46 \r
47     @Override\r
48     public void channelActive(ChannelHandlerContext ctx) throws Exception {\r
49         LOGGER.info("Client is active");\r
50         if (isOnlineFuture != null) {\r
51             isOnlineFuture.set(true);\r
52             isOnlineFuture = null;\r
53         }\r
54         scenarioHandler.setCtx(ctx);\r
55         scenarioHandler.start();\r
56         \r
57     }\r
58 \r
59     private static void skipMsg(ByteBuf bb) {\r
60         if (bb.readableBytes() > 0) {\r
61             bb.skipBytes(bb.getShort(2));\r
62         }\r
63     }\r
64 \r
65     public void setScenario(ScenarioHandler scenarioHandler) {\r
66         this.scenarioHandler = scenarioHandler;\r
67     }\r
68 \r
69 }\r