blob: bbf9f4bf90a267ea53fca751a7f3f2d6259f7a6c [file] [log] [blame]
// Copyright 2018 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 "api/public/network_service_manager.h"
#include "api/impl/internal_services.h"
namespace {
openscreen::NetworkServiceManager* g_network_service_manager_instance = nullptr;
} // namespace
namespace openscreen {
// static
NetworkServiceManager* NetworkServiceManager::Create(
std::unique_ptr<ScreenListener> mdns_listener,
std::unique_ptr<ScreenPublisher> mdns_publisher,
std::unique_ptr<ProtocolConnectionClient> connection_client,
std::unique_ptr<ProtocolConnectionServer> connection_server) {
// TODO(mfoltz): Convert to assertion failure
if (g_network_service_manager_instance)
return nullptr;
g_network_service_manager_instance = new NetworkServiceManager(
std::move(mdns_listener), std::move(mdns_publisher),
std::move(connection_client), std::move(connection_server));
return g_network_service_manager_instance;
}
// static
NetworkServiceManager* NetworkServiceManager::Get() {
// TODO(mfoltz): Convert to assertion failure
if (!g_network_service_manager_instance)
return nullptr;
return g_network_service_manager_instance;
}
// static
void NetworkServiceManager::Dispose() {
// TODO(mfoltz): Convert to assertion failure
if (!g_network_service_manager_instance)
return;
delete g_network_service_manager_instance;
g_network_service_manager_instance = nullptr;
}
void NetworkServiceManager::RunEventLoopOnce() {
InternalServices::RunEventLoopOnce();
if (connection_client_)
connection_client_->RunTasks();
if (connection_server_)
connection_server_->RunTasks();
}
ScreenListener* NetworkServiceManager::GetMdnsScreenListener() {
return mdns_listener_.get();
}
ScreenPublisher* NetworkServiceManager::GetMdnsScreenPublisher() {
return mdns_publisher_.get();
}
ProtocolConnectionClient* NetworkServiceManager::GetProtocolConnectionClient() {
return connection_client_.get();
}
ProtocolConnectionServer* NetworkServiceManager::GetProtocolConnectionServer() {
return connection_server_.get();
}
NetworkServiceManager::NetworkServiceManager(
std::unique_ptr<ScreenListener> mdns_listener,
std::unique_ptr<ScreenPublisher> mdns_publisher,
std::unique_ptr<ProtocolConnectionClient> connection_client,
std::unique_ptr<ProtocolConnectionServer> connection_server)
: mdns_listener_(std::move(mdns_listener)),
mdns_publisher_(std::move(mdns_publisher)),
connection_client_(std::move(connection_client)),
connection_server_(std::move(connection_server)) {}
NetworkServiceManager::~NetworkServiceManager() = default;
} // namespace openscreen