blob: b312d7dc795844a0d19b0e7b77859b08084b4ff5 [file] [log] [blame]
Gautham Thambidorai658bb422015-08-19 12:40:00 -07001// Copyright 2015 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
7#include "examples/bank_app/bank.mojom.h"
8#include "mojo/public/c/system/main.h"
9#include "mojo/public/cpp/application/application_impl.h"
10#include "mojo/public/cpp/application/application_runner.h"
11#include "mojo/public/cpp/utility/run_loop.h"
Viet-Trung Luu15a59a82015-10-10 01:11:00 -070012#include "mojo/services/vanadium/security/interfaces/principal.mojom.h"
Gautham Thambidorai658bb422015-08-19 12:40:00 -070013
14namespace examples {
15
16class LoginHandler {
17 public:
Ankur9c1db642015-11-04 17:15:15 -080018 void Run(const vanadium::UserPtr& user) const {
19 if (user) {
20 MOJO_LOG(INFO) << "User logged-in as " << user->email;
Gautham Thambidorai658bb422015-08-19 12:40:00 -070021 }
22 }
23};
24
25class BankCustomer : public mojo::ApplicationDelegate {
26 public:
27 void Initialize(mojo::ApplicationImpl* app) override {
Gautham Thambidorai658bb422015-08-19 12:40:00 -070028 app->ConnectToService("mojo:principal_service", &login_service_);
Ankur9c1db642015-11-04 17:15:15 -080029
30 // Login to the principal service to get a user identity.
Gautham Thambidorai658bb422015-08-19 12:40:00 -070031 login_service_->Login(LoginHandler());
Ankur9c1db642015-11-04 17:15:15 -080032 // Check and see whether we got a valid user id.
Gautham Thambidorai658bb422015-08-19 12:40:00 -070033 if (!login_service_.WaitForIncomingResponse()) {
Ankur9c1db642015-11-04 17:15:15 -080034 MOJO_LOG(INFO) << "Login() to the principal service failed";
Gautham Thambidorai658bb422015-08-19 12:40:00 -070035 }
Ankur9c1db642015-11-04 17:15:15 -080036
Gautham Thambidorai658bb422015-08-19 12:40:00 -070037 BankPtr bank;
38 app->ConnectToService("mojo:bank", &bank);
39 bank->Deposit(500/*usd*/);
40 bank->Withdraw(100/*usd*/);
41 auto gb_callback = [](const int32_t& balance) {
42 MOJO_LOG(INFO) << "Bank balance: " << balance;
43 };
44 bank->GetBalance(mojo::Callback<void(const int32_t&)>(gb_callback));
45 bank.WaitForIncomingResponse();
46 }
47 void Quit() override {
48 login_service_->Logout();
49 }
50 private:
51 vanadium::PrincipalServicePtr login_service_;
52};
53
54} // namespace examples
55
56MojoResult MojoMain(MojoHandle application_request) {
57 mojo::ApplicationRunner runner(new examples::BankCustomer);
58 return runner.Run(application_request);
59}