blob: 0d6474b657d37a4a796f73993f53c5edf6f62072 [file] [log] [blame]
Arman Ugurayfe65fb72015-07-24 19:14:42 -07001//
Jakub Pawlowski5b790fe2017-09-18 09:00:20 -07002// Copyright 2015 Google, Inc.
Arman Ugurayfe65fb72015-07-24 19:14:42 -07003//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at:
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17#pragma once
18
Arman Ugurayfe65fb72015-07-24 19:14:42 -070019#include <base/macros.h>
20#include <base/message_loop/message_loop.h>
21
22namespace ipc {
23class IPCManager;
24} // namespace ipc
25
26namespace bluetooth {
27
28class CoreStack;
29class Settings;
30
31// The Daemon class is a singleton that represents the root of the ownership
32// hierarchy. The single instance sets up and owns the main event loop, the IPC
33// handlers, global Settings, and the core Bluetooth stack.
34class Daemon {
35 public:
36 // Initializes the daemon. This must be called to at the start of the
37 // application to set up the global daemon instance and everything it manages.
38 // Returns false in case of a failure.
39 static bool Initialize();
40
41 // Cleans up all the resources associated with the global Daemon object.
42 static void ShutDown();
43
Arman Ugurayf8881fe2015-08-04 12:56:56 -070044 // Assigns the global Daemon instance for testing. Should only be called from
45 // test code.
46 static void InitializeForTesting(Daemon* test_daemon);
47
Arman Ugurayfe65fb72015-07-24 19:14:42 -070048 // Returns the singleton Daemon instance. All classes can interact with the
49 // Daemon, obtain its resources etc using this getter.
50 static Daemon* Get();
51
52 // The global Settings object. All classes have direct access to this through
53 // the Daemon object.
Myles Watson911d1ae2016-11-28 16:44:40 -080054 virtual Settings* GetSettings() const = 0;
Arman Ugurayfe65fb72015-07-24 19:14:42 -070055
56 // The main event loop. This should be used for any events and delayed tasks
57 // that should be executed on the daemon's main thread.
Arman Ugurayf8881fe2015-08-04 12:56:56 -070058 virtual base::MessageLoop* GetMessageLoop() const = 0;
Arman Ugurayfe65fb72015-07-24 19:14:42 -070059
60 // Starts the daemon's main loop.
Arman Ugurayf8881fe2015-08-04 12:56:56 -070061 virtual void StartMainLoop() = 0;
62
63 protected:
64 Daemon() = default;
65 virtual ~Daemon() = default;
Arman Ugurayfe65fb72015-07-24 19:14:42 -070066
67 private:
Arman Ugurayf8881fe2015-08-04 12:56:56 -070068 // Internal instance helper called by Initialize().
69 virtual bool Init() = 0;
Arman Ugurayfe65fb72015-07-24 19:14:42 -070070
71 DISALLOW_COPY_AND_ASSIGN(Daemon);
72};
73
74} // namespace bluetooth