// Copyright 2015 The Weave 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 LIBWEAVE_SRC_PRIVET_PUBLISHER_H_
#define LIBWEAVE_SRC_PRIVET_PUBLISHER_H_
#include <memory>
#include <string>
#include <vector>
#include <base/macros.h>
namespace weave {
namespace provider {
class DnsServiceDiscovery;
}
namespace privet {
class CloudDelegate;
class DeviceDelegate;
class WifiDelegate;
// Publishes privet service on DNS-SD.
class Publisher {
public:
Publisher(const DeviceDelegate* device,
const CloudDelegate* cloud,
const WifiDelegate* wifi,
provider::DnsServiceDiscovery* dns_sd);
~Publisher();
// Updates published information. Removes service if HTTP is not alive.
void Update();
private:
void ExposeService();
void RemoveService();
provider::DnsServiceDiscovery* dns_sd_{nullptr};
const DeviceDelegate* device_{nullptr};
const CloudDelegate* cloud_{nullptr};
const WifiDelegate* wifi_{nullptr};
std::pair<uint16_t, std::vector<std::string>> published_;
DISALLOW_COPY_AND_ASSIGN(Publisher);
};
} // namespace privet
} // namespace weave
#endif // LIBWEAVE_SRC_PRIVET_PUBLISHER_H_