1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
\r
3 package org.opendaylight.openflowjava.protocol.impl.clients;
\r
5 import io.netty.buffer.ByteBuf;
\r
6 import io.netty.channel.ChannelHandlerContext;
\r
7 import io.netty.channel.ChannelInboundHandlerAdapter;
\r
9 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
\r
10 import org.slf4j.Logger;
\r
11 import org.slf4j.LoggerFactory;
\r
13 import com.google.common.util.concurrent.SettableFuture;
\r
17 * @author michal.polkorab
\r
19 public class SimpleClientHandler extends ChannelInboundHandlerAdapter {
\r
21 protected static final Logger LOGGER = LoggerFactory.getLogger(SimpleClientHandler.class);
\r
22 private SettableFuture<Boolean> isOnlineFuture;
\r
23 protected ScenarioHandler scenarioHandler;
\r
26 * @param isOnlineFuture future notifier of connected channel
\r
28 public SimpleClientHandler(SettableFuture<Boolean> isOnlineFuture, ScenarioHandler scenarioHandler) {
\r
29 this.isOnlineFuture = isOnlineFuture;
\r
30 this.scenarioHandler = scenarioHandler;
\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
40 byte[] message = new byte[8];
\r
41 bb.readBytes(message);
\r
42 scenarioHandler.addOfMsg(message);
\r
44 LOGGER.info("end of read");
\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
54 scenarioHandler.setCtx(ctx);
\r
55 scenarioHandler.start();
\r
59 private static void skipMsg(ByteBuf bb) {
\r
60 if (bb.readableBytes() > 0) {
\r
61 bb.skipBytes(bb.getShort(2));
\r
65 public void setScenario(ScenarioHandler scenarioHandler) {
\r
66 this.scenarioHandler = scenarioHandler;
\r