1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "osp/public/network_service_manager.h"
6 
7 namespace {
8 
9 openscreen::osp::NetworkServiceManager* g_network_service_manager_instance =
10     nullptr;
11 
12 }  //  namespace
13 
14 namespace openscreen {
15 namespace osp {
16 
17 // static
Create(std::unique_ptr<ServiceListener> mdns_listener,std::unique_ptr<ServicePublisher> mdns_publisher,std::unique_ptr<ProtocolConnectionClient> connection_client,std::unique_ptr<ProtocolConnectionServer> connection_server)18 NetworkServiceManager* NetworkServiceManager::Create(
19     std::unique_ptr<ServiceListener> mdns_listener,
20     std::unique_ptr<ServicePublisher> mdns_publisher,
21     std::unique_ptr<ProtocolConnectionClient> connection_client,
22     std::unique_ptr<ProtocolConnectionServer> connection_server) {
23   // TODO(mfoltz): Convert to assertion failure
24   if (g_network_service_manager_instance)
25     return nullptr;
26   g_network_service_manager_instance = new NetworkServiceManager(
27       std::move(mdns_listener), std::move(mdns_publisher),
28       std::move(connection_client), std::move(connection_server));
29   return g_network_service_manager_instance;
30 }
31 
32 // static
Get()33 NetworkServiceManager* NetworkServiceManager::Get() {
34   // TODO(mfoltz): Convert to assertion failure
35   if (!g_network_service_manager_instance)
36     return nullptr;
37   return g_network_service_manager_instance;
38 }
39 
40 // static
Dispose()41 void NetworkServiceManager::Dispose() {
42   // TODO(mfoltz): Convert to assertion failure
43   if (!g_network_service_manager_instance)
44     return;
45   delete g_network_service_manager_instance;
46   g_network_service_manager_instance = nullptr;
47 }
48 
GetMdnsServiceListener()49 ServiceListener* NetworkServiceManager::GetMdnsServiceListener() {
50   return mdns_listener_.get();
51 }
52 
GetMdnsServicePublisher()53 ServicePublisher* NetworkServiceManager::GetMdnsServicePublisher() {
54   return mdns_publisher_.get();
55 }
56 
GetProtocolConnectionClient()57 ProtocolConnectionClient* NetworkServiceManager::GetProtocolConnectionClient() {
58   return connection_client_.get();
59 }
60 
GetProtocolConnectionServer()61 ProtocolConnectionServer* NetworkServiceManager::GetProtocolConnectionServer() {
62   return connection_server_.get();
63 }
64 
NetworkServiceManager(std::unique_ptr<ServiceListener> mdns_listener,std::unique_ptr<ServicePublisher> mdns_publisher,std::unique_ptr<ProtocolConnectionClient> connection_client,std::unique_ptr<ProtocolConnectionServer> connection_server)65 NetworkServiceManager::NetworkServiceManager(
66     std::unique_ptr<ServiceListener> mdns_listener,
67     std::unique_ptr<ServicePublisher> mdns_publisher,
68     std::unique_ptr<ProtocolConnectionClient> connection_client,
69     std::unique_ptr<ProtocolConnectionServer> connection_server)
70     : mdns_listener_(std::move(mdns_listener)),
71       mdns_publisher_(std::move(mdns_publisher)),
72       connection_client_(std::move(connection_client)),
73       connection_server_(std::move(connection_server)) {}
74 
75 NetworkServiceManager::~NetworkServiceManager() = default;
76 
77 }  // namespace osp
78 }  // namespace openscreen
79