/**
* Copyright (c) 2013 Cisco Systems, Inc. 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
*/
package org.opendaylight.openflowplugin.openflow.md.core;
import java.net.InetAddress;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter;
import org.opendaylight.openflowjava.protocol.api.connection.SwitchConnectionHandler;
import org.opendaylight.openflowplugin.api.openflow.md.core.ConnectionConductor;
import org.opendaylight.openflowplugin.api.openflow.md.core.ErrorHandler;
import org.opendaylight.openflowplugin.openflow.md.core.session.OFSessionUtil;
import org.opendaylight.openflowplugin.openflow.md.queue.QueueProcessorLightImpl;
import org.opendaylight.openflowplugin.api.openflow.statistics.MessageSpy;
import org.opendaylight.yangtools.yang.binding.DataContainer;
/**
* basic interconnecting piece between plugin and library
*/
public class SwitchConnectionHandlerImpl implements SwitchConnectionHandler {
private ScheduledThreadPoolExecutor spyPool;
private QueueProcessorLightImpl queueProcessor;
private ErrorHandler errorHandler;
private MessageSpy<DataContainer> messageSpy;
private int spyRate = 10;
/**
*
*/
public SwitchConnectionHandlerImpl() {
queueProcessor = new QueueProcessorLightImpl();
//TODO: implement shutdown invocation upon service stop event
spyPool = new ScheduledThreadPoolExecutor(1);
}
/**
* wire all up
*/
public void init() {
queueProcessor.setTranslatorMapping(OFSessionUtil.getTranslatorMap());
queueProcessor.setPopListenersMapping(OFSessionUtil.getPopListenerMapping());
queueProcessor.setMessageSpy(messageSpy);
queueProcessor.init();
spyPool.scheduleAtFixedRate(messageSpy, spyRate, spyRate, TimeUnit.SECONDS);
}
@Override
public boolean accept(InetAddress address) {
// TODO:: add policy derived rules
return true;
}
@Override
public void onSwitchConnected(ConnectionAdapter connectionAdapter) {
ConnectionConductor conductor = ConnectionConductorFactory.createConductor(
connectionAdapter, queueProcessor);
conductor.setErrorHandler(errorHandler);
}
/**
* @param messageSpy the messageSpy to set
*/
public void setMessageSpy(MessageSpy<DataContainer> messageSpy) {
this.messageSpy = messageSpy;
}
/**
* @param errorHandler the errorHandler to set
*/
public void setErrorHandler(ErrorHandler errorHandler) {
this.errorHandler = errorHandler;
}
}