2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.pcep.pcc.mock;
10 import com.google.common.base.Optional;
11 import io.netty.util.HashedWheelTimer;
12 import io.netty.util.Timeout;
13 import io.netty.util.Timer;
14 import io.netty.util.TimerTask;
15 import java.math.BigInteger;
16 import java.util.concurrent.TimeUnit;
17 import org.opendaylight.protocol.pcep.pcc.mock.protocol.PCCDispatcherImpl;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
21 public class TimerHandler {
22 private static final Logger LOG = LoggerFactory.getLogger(TimerHandler.class);
23 private final int disconnectAfter;
24 private final Timer timer = new HashedWheelTimer();
25 private PCCDispatcherImpl pccDispatcher;
26 private final int reconnectAfter;
27 private final Optional<BigInteger> syncOptDBVersion;
28 private final PCCsBuilder pcCsBuilder;
29 private boolean reconnectActive = false;
31 public TimerHandler(final PCCsBuilder pcCsBuilder, final Optional<BigInteger> syncOptDBVersion, final int disconnectAfter, final int reconnectAfter) {
32 this.pcCsBuilder = pcCsBuilder;
33 this.syncOptDBVersion = syncOptDBVersion;
34 this.disconnectAfter = disconnectAfter;
35 this.reconnectAfter = reconnectAfter;
38 final class DisconnectTask implements TimerTask {
40 public void run(final Timeout timeout) throws Exception {
41 LOG.debug("Disconnects PCCs, reconnect after {} seconds", reconnectAfter);
42 pccDispatcher.close();
43 if (reconnectAfter > 0) {
44 timer.newTimeout(new ReconnectTask(), reconnectAfter, TimeUnit.SECONDS);
49 final class ReconnectTask implements TimerTask {
51 public void run(final Timeout timeout) throws Exception {
52 LOG.debug("Reconnecting PCCs}");
53 pcCsBuilder.createPCCs(syncOptDBVersion.isPresent() ? syncOptDBVersion.get() : BigInteger.ONE, Optional.<TimerHandler>absent());
57 protected void createDisconnectTask() {
58 if (this.disconnectAfter > 0 && !reconnectActive && syncOptDBVersion.isPresent()) {
59 timer.newTimeout(new DisconnectTask(), this.disconnectAfter, TimeUnit.SECONDS);
60 reconnectActive = true;
64 public void setPCCDispatcher(final PCCDispatcherImpl pccDispatcher) {
65 this.pccDispatcher = pccDispatcher;