dbus_echo_app.cc revision 0de6073388f4e2780db8536178b129cd8f6ab386
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
3// found in the LICENSE file.
4
5#include <stdio.h>
6#include <string>
7
8#include "base/bind.h"
9#include "base/logging.h"
10#include "mojo/public/cpp/bindings/allocation_scope.h"
11#include "mojo/public/cpp/environment/environment.h"
12#include "mojo/public/cpp/shell/application.h"
13#include "mojo/public/cpp/system/core.h"
14#include "mojo/public/cpp/system/macros.h"
15#include "mojo/public/cpp/utility/run_loop.h"
16#include "mojo/public/interfaces/shell/shell.mojom.h"
17#include "mojo/services/dbus_echo/echo.mojom.h"
18
19#if defined(WIN32)
20#if !defined(CDECL)
21#define CDECL __cdecl
22#endif
23#define DBUS_ECHO_APP_EXPORT __declspec(dllexport)
24#else
25#define CDECL
26#define DBUS_ECHO_APP_EXPORT __attribute__((visibility("default")))
27#endif
28
29namespace mojo {
30namespace examples {
31
32class DBusEchoApp : public Application {
33 public:
34  explicit DBusEchoApp(MojoHandle shell_handle) : Application(shell_handle) {
35    ConnectTo("dbus:org.chromium.EchoService/org/chromium/MojoImpl",
36              &echo_service_);
37
38    AllocationScope scope;
39    echo_service_->Echo("who", base::Bind(&DBusEchoApp::OnEcho,
40                                          base::Unretained(this)));
41  }
42
43  virtual ~DBusEchoApp() {
44  }
45
46 private:
47  void OnEcho(const String& echoed) {
48    LOG(INFO) << "echo'd " << echoed.To<std::string>();
49  }
50
51  EchoServicePtr echo_service_;
52};
53
54}  // namespace examples
55}  // namespace mojo
56
57extern "C" DBUS_ECHO_APP_EXPORT MojoResult CDECL MojoMain(
58    MojoHandle shell_handle) {
59  mojo::Environment env;
60  mojo::RunLoop loop;
61
62  mojo::examples::DBusEchoApp app(shell_handle);
63  loop.Run();
64  return MOJO_RESULT_OK;
65}
66