blob: c05d66bd4c5a6297f3c89e712ecb0d22c35d3757 [file] [log] [blame]
// Copyright 2020 The Chromium 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 CAST_SENDER_PUBLIC_CAST_APP_DISCOVERY_SERVICE_H_
#define CAST_SENDER_PUBLIC_CAST_APP_DISCOVERY_SERVICE_H_
#include <vector>
#include "cast/common/public/service_info.h"
namespace openscreen {
namespace cast {
class CastMediaSource;
// Interface for app discovery for Cast devices.
class CastAppDiscoveryService {
public:
using AvailabilityCallback =
std::function<void(const CastMediaSource& source,
const std::vector<ServiceInfo>& devices)>;
class Subscription {
public:
Subscription(CastAppDiscoveryService* discovery_service, uint32_t id);
Subscription(Subscription&&) noexcept;
Subscription(Subscription&) = delete;
Subscription& operator=(Subscription&&);
Subscription& operator=(const Subscription&) = delete;
~Subscription();
void Reset();
private:
friend class CastAppDiscoveryService;
void Swap(Subscription& other);
CastAppDiscoveryService* discovery_service_;
uint32_t id_;
};
virtual ~CastAppDiscoveryService() = default;
// Adds an availability query for |source|. Results will be continuously
// returned via |callback| until the returned Subscription is destroyed by the
// caller. If there are cached results available, |callback| will be invoked
// before this method returns. |callback| may be invoked with an empty list
// if all devices respond to the respective queries with "unavailable" or
// don't respond before a timeout. |callback| may be invoked successively
// with the same list.
virtual Subscription StartObservingAvailability(
const CastMediaSource& source,
AvailabilityCallback callback) = 0;
// Refreshes the state of app discovery in the service. It is suitable to call
// this method when the user initiates a user gesture.
virtual void Refresh() = 0;
private:
virtual void RemoveAvailabilityCallback(uint32_t id) = 0;
};
} // namespace cast
} // namespace openscreen
#endif // CAST_SENDER_PUBLIC_CAST_APP_DISCOVERY_SERVICE_H_