// 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. #ifndef OSP_PUBLIC_NETWORK_SERVICE_MANAGER_H_ #define OSP_PUBLIC_NETWORK_SERVICE_MANAGER_H_ #include #include "osp/public/protocol_connection_client.h" #include "osp/public/protocol_connection_server.h" #include "osp/public/service_listener.h" #include "osp/public/service_publisher.h" namespace openscreen { namespace osp { // Manages services run as part of the Open Screen Protocol Library. Library // embedders should pass instances of required services to Create(), which will // instantiate the singleton instance of the NetworkServiceManager and take // ownership of the services. // // NOTES: If we add more injectable services, consider implementing a struct to // hold the config vs. passsing long argument lists. class NetworkServiceManager final { public: // Creates the singleton instance of the NetworkServiceManager. nullptr may // be passed for services not provided by the embedder. static NetworkServiceManager* Create( std::unique_ptr mdns_listener, std::unique_ptr mdns_publisher, std::unique_ptr connection_client, std::unique_ptr connection_server); // Returns the singleton instance of the NetworkServiceManager previously // created by Create(). static NetworkServiceManager* Get(); // Destroys the NetworkServiceManager singleton and its owned services. The // services must be shut down and no I/O or asynchronous work should be done // by the service instance destructors. static void Dispose(); // Returns an instance of the mDNS receiver listener, or nullptr if not // provided. ServiceListener* GetMdnsServiceListener(); // Returns an instance of the mDNS receiver publisher, or nullptr if not // provided. ServicePublisher* GetMdnsServicePublisher(); // Returns an instance of the protocol connection client, or nullptr if not // provided. ProtocolConnectionClient* GetProtocolConnectionClient(); // Returns an instance of the protocol connection server, or nullptr if not // provided. ProtocolConnectionServer* GetProtocolConnectionServer(); private: NetworkServiceManager( std::unique_ptr mdns_listener, std::unique_ptr mdns_publisher, std::unique_ptr connection_client, std::unique_ptr connection_server); ~NetworkServiceManager(); std::unique_ptr mdns_listener_; std::unique_ptr mdns_publisher_; std::unique_ptr connection_client_; std::unique_ptr connection_server_; }; } // namespace osp } // namespace openscreen #endif // OSP_PUBLIC_NETWORK_SERVICE_MANAGER_H_