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 io.netty.util.HashedWheelTimer;
11 import io.netty.util.Timeout;
12 import io.netty.util.Timer;
13 import io.netty.util.TimerTask;
14 import java.util.Optional;
15 import java.util.concurrent.TimeUnit;
16 import org.opendaylight.protocol.pcep.pcc.mock.protocol.PCCDispatcherImpl;
17 import org.opendaylight.yangtools.yang.common.Uint64;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
21 public class TimerHandler {
22 private static final Logger LOG = LoggerFactory.getLogger(TimerHandler.class);
24 private final Timer timer = new HashedWheelTimer();
25 private final int disconnectAfter;
26 private final int reconnectAfter;
27 private final Optional<Uint64> syncOptDBVersion;
28 private final PCCsBuilder pcCsBuilder;
30 private PCCDispatcherImpl pccDispatcher = null;
31 private boolean reconnectActive = false;
33 public TimerHandler(final PCCsBuilder pcCsBuilder, final Optional<Uint64> syncOptDBVersion,
34 final int disconnectAfter, final int reconnectAfter) {
35 this.pcCsBuilder = pcCsBuilder;
36 this.syncOptDBVersion = syncOptDBVersion;
37 this.disconnectAfter = disconnectAfter;
38 this.reconnectAfter = reconnectAfter;
41 final class DisconnectTask implements TimerTask {
43 public void run(final Timeout timeout) {
44 LOG.debug("Disconnects PCCs, reconnect after {} seconds", reconnectAfter);
45 pccDispatcher.close();
46 if (reconnectAfter > 0) {
47 timer.newTimeout(new ReconnectTask(), reconnectAfter, TimeUnit.SECONDS);
52 final class ReconnectTask implements TimerTask {
54 public void run(final Timeout timeout) {
55 LOG.debug("Reconnecting PCCs}");
56 pcCsBuilder.createPCCs(syncOptDBVersion.orElse(Uint64.ONE), Optional.empty());
60 protected void createDisconnectTask() {
61 if (disconnectAfter > 0 && !reconnectActive && syncOptDBVersion.isPresent()) {
62 timer.newTimeout(new DisconnectTask(), disconnectAfter, TimeUnit.SECONDS);
63 reconnectActive = true;
67 public void setPCCDispatcher(final PCCDispatcherImpl dispatcher) {
68 pccDispatcher = dispatcher;