Java tutorial
/* * Copyright 2017-present Open Networking Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onosproject.ofagent.impl; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import io.netty.channel.nio.NioEventLoopGroup; import org.onosproject.ofagent.api.OFController; import org.onosproject.ofagent.api.OFSwitch; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.atomic.AtomicInteger; /** * Implementation of OpenFlow connection handler. * It retries a connection for a certain amount of time and then give up. */ public final class OFConnectionHandler implements ChannelFutureListener { private final Logger log = LoggerFactory.getLogger(getClass()); private static final int MAX_RETRY = 10; private final AtomicInteger retryCount = new AtomicInteger(); private final OFSwitch ofSwitch; private final OFController controller; private final NioEventLoopGroup workGroup; /** * Default constructor. * * @param ofSwitch openflow switch that initiates this connection * @param controller controller to connect * @param workGroup work group for connection */ public OFConnectionHandler(OFSwitch ofSwitch, OFController controller, NioEventLoopGroup workGroup) { this.ofSwitch = ofSwitch; this.controller = controller; this.workGroup = workGroup; } /** * Creates a connection to the supplied controller. */ public void connect() { // TODO initiates a connection to the controller } @Override public void operationComplete(ChannelFuture future) throws Exception { if (future.isSuccess()) { log.debug("{} is connected to controller {}", ofSwitch.device().id(), controller); // TODO do something for a new connection if there's any } else { log.debug("{} failed to connect {}, retry..", ofSwitch.device().id(), controller); // TODO retry connect if retry count is less than MAX } } }