You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.1 KiB
69 lines
2.1 KiB
// 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_
|