blob: e0eeaa6089c20df177f5288d515797834ba391d6 [file] [log] [blame]
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
/**
* Copyright (C) 2014 Regents of the University of California.
* See COPYING for copyright and distribution information.
*/
#ifndef FACE_MONITOR_HPP
#define FACE_MONITOR_HPP
#include "common.hpp"
#include <ndn-cpp-dev/management/nfd-face-event-notification.hpp>
#include <ndn-cpp-dev/management/nrd-controller.hpp>
namespace ndn {
class FaceMonitor
{
public:
typedef function<void(const nfd::FaceEventNotification&)> NotificationCallback;
typedef function<void()> TimeoutCallback;
typedef std::vector<NotificationCallback> NotificationCallbacks;
typedef std::vector<TimeoutCallback> TimeoutCallbacks;
explicit
FaceMonitor(Face& face);
~FaceMonitor();
/** \brief Stops all notifications. This method doesn't remove registered callbacks.
*/
void
stopNotifications();
/** \brief Resumes notifications for added subscribers.
*/
void
startNotifications();
/** \brief Removes all notification subscribers.
*/
void
removeAllSubscribers();
/** \brief Adds a notification subscriber. This method doesn't return on timeouts.
*/
void
addSubscriber(const NotificationCallback& notificationCallback);
/** \brief Adds a notification subscriber.
*/
void
addSubscriber(const NotificationCallback& notificationCallback,
const TimeoutCallback& timeoutCallback);
private:
void
onTimeout();
void
onNotification(const Data& data);
private:
Face& m_face;
uint64_t m_lastSequence;
bool m_isStopped;
NotificationCallbacks m_notificationCallbacks;
TimeoutCallbacks m_timeoutCallbacks;
const PendingInterestId* m_lastInterestId;
};
}//namespace ndn
#endif //FACE_MONITOR_HPP