blob: c53e388396f0821b3b4871a9c55ab7ccc6fd583f [file] [log] [blame]
// Copyright 2014 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef PEERD_PEER_MANAGER_INTERFACE_H_
#define PEERD_PEER_MANAGER_INTERFACE_H_
#include <string>
#include <base/time/time.h>
#include "peerd/service.h"
#include "peerd/technologies.h"
namespace peerd {
class PeerManagerInterface {
public:
virtual ~PeerManagerInterface() = default;
// Add or update a peer with the given information. If the same peer
// is discovered on multiple technologies, the most recent information
// (according to |last_seen|) is maintained. We continue exposing
// a peer until all technologies remove it.
virtual void OnPeerDiscovered(const std::string& peer_id,
const base::Time& last_seen,
technologies::Technology technology) = 0;
// Adds or updates service for peer with |peer_id|. Corresponding
// peer's last time seen is set to max(|last_seen|, |peer.last_seen|).
// If the same service is seen on multiple technologies, the most recent
// update (according to |last_seen|) is maintained.
virtual void OnServiceDiscovered(const std::string& peer_id,
const std::string& service_id,
const Service::ServiceInfo& info,
const Service::IpAddresses& addresses,
const base::Time& last_seen,
technologies::Technology technology) = 0;
// Signals that the peer corresponding to |peer_id| is gone.
// Removes knowledge of the peer and knowledge of services exposed by the peer
// discovered via this technology. Note that we continue to believe peers
// and their services exist until all technologies agree that a peer is gone.
virtual void OnPeerRemoved(const std::string& peer_id,
technologies::Technology technology) = 0;
// Signals that the service corresponding to |service_id| has been removed
// from the peer corresponding to |peer_id| according to |technology|.
// Note that we continue exposing a service until all technologies remove it.
virtual void OnServiceRemoved(const std::string& peer_id,
const std::string& service_id,
technologies::Technology technology) = 0;
// Remove all services and peers discovered by this technology. Equivalent
// to calling OnPeerRemoved() for all peers discovered via |technology|.
virtual void OnTechnologyShutdown(technologies::Technology technology) = 0;
};
} // namespace peerd
#endif // PEERD_PEER_MANAGER_INTERFACE_H_