aboutsummaryrefslogtreecommitdiff
path: root/cast/sender/public/cast_app_discovery_service.cc
blob: c561b3865b7bb68530dbd9a75feba227b6aafffc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 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.

#include "cast/sender/public/cast_app_discovery_service.h"

namespace openscreen {
namespace cast {

CastAppDiscoveryService::Subscription::Subscription(
    CastAppDiscoveryService* discovery_service,
    uint32_t id)
    : discovery_service_(discovery_service), id_(id) {}

CastAppDiscoveryService::Subscription::Subscription(Subscription&& other)
    : discovery_service_(other.discovery_service_), id_(other.id_) {
  other.discovery_service_ = nullptr;
}

CastAppDiscoveryService::Subscription::~Subscription() {
  Reset();
}

CastAppDiscoveryService::Subscription& CastAppDiscoveryService::Subscription::
operator=(Subscription other) {
  Swap(other);
  return *this;
}

void CastAppDiscoveryService::Subscription::Reset() {
  if (discovery_service_) {
    discovery_service_->RemoveAvailabilityCallback(id_);
  }
  discovery_service_ = nullptr;
}

void CastAppDiscoveryService::Subscription::Swap(Subscription& other) {
  CastAppDiscoveryService* service = other.discovery_service_;
  other.discovery_service_ = discovery_service_;
  discovery_service_ = service;

  uint32_t id = other.id_;
  other.id_ = id_;
  id_ = id;
}

}  // namespace cast
}  // namespace openscreen