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