OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef MOJO_PUBLIC_SHELL_APPLICATION_H_ | 5 #ifndef MOJO_PUBLIC_SHELL_APPLICATION_H_ |
6 #define MOJO_PUBLIC_SHELL_APPLICATION_H_ | 6 #define MOJO_PUBLIC_SHELL_APPLICATION_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "mojo/public/cpp/shell/connect.h" | 10 #include "mojo/public/cpp/shell/service.h" |
11 #include "mojo/public/cpp/shell/lib/service_connector.h" | |
12 #include "mojo/public/cpp/system/core.h" | 11 #include "mojo/public/cpp/system/core.h" |
13 #include "mojo/public/interfaces/shell/shell.mojom.h" | 12 #include "mojo/public/interfaces/shell/shell.mojom.h" |
14 | 13 |
15 namespace mojo { | 14 namespace mojo { |
16 | 15 |
17 // Utility class for creating ShellClients that vend service instances. | |
18 // To use define a class that implements your specific server api, e.g. FooImpl | |
19 // to implement a service named Foo. | |
20 // That class must subclass an InterfaceImpl specialization. | |
21 // | |
22 // If there is context that is to be shared amongst all instances, define a | |
23 // constructor with that class as its only argument, otherwise define an empty | |
24 // constructor. | |
25 // | |
26 // class FooImpl : public InterfaceImpl<Foo> { | |
27 // public: | |
28 // FooImpl() {} | |
29 // }; | |
30 // | |
31 // or | |
32 // | |
33 // class BarImpl : public InterfaceImpl<Bar> { | |
34 // public: | |
35 // // context will remain valid for the lifetime of BarImpl. | |
36 // BarImpl(BarContext* context) : context_(context) {} | |
37 // private: | |
38 // BarContext* context; | |
39 // }; | |
40 // | |
41 // Create an Application instance that collects any service implementations. | |
42 // | |
43 // Application app(shell_handle); | |
44 // app.AddService<FooImpl>(); | |
45 // | |
46 // BarContext context; | |
47 // app.AddService<BarImpl>(&context); | |
48 // | |
49 // | |
50 class Application : public internal::ServiceConnectorBase::Owner { | 16 class Application : public internal::ServiceConnectorBase::Owner { |
51 public: | 17 public: |
52 explicit Application(ScopedMessagePipeHandle shell_handle); | 18 explicit Application(ScopedMessagePipeHandle shell_handle); |
53 explicit Application(MojoHandle shell_handle); | 19 explicit Application(MojoHandle shell_handle); |
54 virtual ~Application(); | 20 virtual ~Application(); |
55 | 21 |
56 template <typename Impl, typename Context> | 22 // internal::ServiceConnectorBase::Owner methods. |
57 void AddService(Context* context) { | 23 // Takes ownership of |service_connector|. |
58 AddServiceConnector(new internal::ServiceConnector<Impl, Context>(context)); | 24 virtual void AddServiceConnector( |
59 } | 25 internal::ServiceConnectorBase* service_connector) MOJO_OVERRIDE; |
60 | 26 virtual void RemoveServiceConnector( |
61 template <typename Impl> | 27 internal::ServiceConnectorBase* service_connector) MOJO_OVERRIDE; |
62 void AddService() { | |
63 AddServiceConnector(new internal::ServiceConnector<Impl, void>(NULL)); | |
64 } | |
65 | 28 |
66 template <typename Interface> | 29 template <typename Interface> |
67 void ConnectTo(const std::string& url, InterfacePtr<Interface>* ptr) { | 30 void ConnectTo(const std::string& url, InterfacePtr<Interface>* ptr) { |
68 mojo::ConnectTo(shell(), url, ptr); | 31 mojo::ConnectTo(shell(), url, ptr); |
69 } | 32 } |
70 | 33 |
71 protected: | 34 protected: |
72 // ShellClient methods. | 35 // ShellClient methods. |
73 // Override this to dispatch to correct service when there's more than one. | |
74 // TODO(davemoore): Augment this with name registration. | |
75 virtual void AcceptConnection(const mojo::String& url, | 36 virtual void AcceptConnection(const mojo::String& url, |
76 ScopedMessagePipeHandle client_handle) | 37 ScopedMessagePipeHandle client_handle) |
77 MOJO_OVERRIDE; | 38 MOJO_OVERRIDE; |
78 | 39 |
79 private: | 40 private: |
80 // internal::ServiceConnectorBase::Owner methods. | |
81 // Takes ownership of |service_connector|. | |
82 virtual void AddServiceConnector( | |
83 internal::ServiceConnectorBase* service_connector) MOJO_OVERRIDE; | |
84 virtual void RemoveServiceConnector( | |
85 internal::ServiceConnectorBase* service_connector) MOJO_OVERRIDE; | |
86 | |
87 typedef std::vector<internal::ServiceConnectorBase*> ServiceConnectorList; | 41 typedef std::vector<internal::ServiceConnectorBase*> ServiceConnectorList; |
88 ServiceConnectorList service_connectors_; | 42 ServiceConnectorList service_connectors_; |
89 }; | 43 }; |
90 | 44 |
91 } // namespace mojo | 45 } // namespace mojo |
92 | 46 |
93 #endif // MOJO_PUBLIC_SHELL_APPLICATION_H_ | 47 #endif // MOJO_PUBLIC_SHELL_APPLICATION_H_ |
OLD | NEW |