1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
2 package org.opendaylight.openflowjava.protocol.impl.clients;
4 import io.netty.channel.ChannelHandlerContext;
6 import java.util.Stack;
7 import java.util.concurrent.BlockingQueue;
8 import java.util.concurrent.LinkedBlockingQueue;
9 import java.util.concurrent.TimeUnit;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
15 public class ScenarioHandler extends Thread {
17 private static final Logger LOGGER = LoggerFactory.getLogger(ScenarioHandler.class);
18 private Stack<ClientEvent> scenario;
19 private BlockingQueue<byte[]> ofMsg;
20 private ChannelHandlerContext ctx;
26 public ScenarioHandler(Stack<ClientEvent> scenario) {
27 this.scenario = scenario;
28 ofMsg = new LinkedBlockingQueue<>();
33 int freezeCounter = 0;
34 while (!scenario.isEmpty()) {
35 ClientEvent peek = scenario.peek();
36 if (peek instanceof WaitForMessageEvent) {
37 LOGGER.debug("WaitForMessageEvent");
39 WaitForMessageEvent event = (WaitForMessageEvent) peek;
40 event.setHeaderReceived(ofMsg.poll(2000, TimeUnit.MILLISECONDS));
41 } catch (InterruptedException e) {
42 LOGGER.error(e.getMessage(), e);
45 } else if (peek instanceof SendEvent) {
46 LOGGER.debug("Proceed - sendevent");
47 SendEvent event = (SendEvent) peek;
50 if (peek.eventExecuted()) {
56 if (freezeCounter > 2) {
57 LOGGER.warn("Scenario freezed: " + freezeCounter);
62 } catch (InterruptedException e) {
63 LOGGER.error(e.getMessage(), e);
66 LOGGER.info("Scenario finished");
72 public boolean isEmpty() {
73 return scenario.isEmpty();
76 public Stack<ClientEvent> getScenario() {
80 public void setScenario(Stack<ClientEvent> scenario) {
81 this.scenario = scenario;
84 public void setCtx(ChannelHandlerContext ctx) {
88 public void addOfMsg(byte[] message) {