Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(122)

Side by Side Diff: mojo/dart/apptests/test_apps/pingpong/lib/main.dart

Issue 1998433002: Dart: Adds Interface and InterfaceRequest interfaces. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Merge Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 import 'dart:async'; 5 import 'dart:async';
6 6
7 import 'package:mojo/application.dart'; 7 import 'package:mojo/application.dart';
8 import 'package:mojo/bindings.dart'; 8 import 'package:mojo/bindings.dart';
9 import 'package:mojo/core.dart'; 9 import 'package:mojo/core.dart';
10 10
11 import 'package:_mojo_for_test_only/test/pingpong_service.mojom.dart'; 11 import 'package:_mojo_for_test_only/test/pingpong_service.mojom.dart';
12 12
13 class PingPongClientImpl implements PingPongClient { 13 class PingPongClientImpl implements PingPongClient {
14 final PingPongClientStub stub; 14 PingPongClientInterface client;
15 Completer _completer; 15 Completer _completer;
16 int _count; 16 int _count;
17 17
18 PingPongClientImpl.unbound(this._count, this._completer) 18 PingPongClientImpl(this._count, this._completer) {
19 : stub = new PingPongClientStub.unbound() { 19 client = new PingPongClientInterface(this);
20 stub.impl = this;
21 } 20 }
22 21
23 void pong(int pongValue) { 22 void pong(int pongValue) {
24 if (pongValue == _count) { 23 if (pongValue == _count) {
25 _completer.complete(null); 24 _completer.complete(null);
26 stub.close(); 25 client.close();
27 } 26 }
28 } 27 }
29 } 28 }
30 29
31 class PingPongServiceImpl implements PingPongService { 30 class PingPongServiceImpl implements PingPongService {
32 PingPongServiceStub _stub; 31 PingPongService _service;
33 Application _application; 32 Application _application;
34 PingPongClientProxy _pingPongClient; 33 PingPongClient _pingPongClient;
35 34
36 PingPongServiceImpl(this._application, MojoMessagePipeEndpoint endpoint) { 35 PingPongServiceImpl(this._application, MojoMessagePipeEndpoint endpoint) {
37 _stub = new PingPongServiceStub.fromEndpoint(endpoint, this); 36 _service = new PingPongServiceInterface.fromEndpoint(endpoint, this);
38 } 37 }
39 38
40 PingPongServiceImpl.fromStub(this._stub) { 39 void setClient(PingPongClientInterface client) {
41 _stub.impl = this;
42 }
43
44 void setClient(Proxy proxy) {
45 assert(_pingPongClient == null); 40 assert(_pingPongClient == null);
46 _pingPongClient = proxy; 41 _pingPongClient = client;
47 } 42 }
48 43
49 void ping(int pingValue) { 44 void ping(int pingValue) {
50 if (_pingPongClient != null) { 45 if (_pingPongClient != null) {
51 _pingPongClient.pong(pingValue + 1); 46 _pingPongClient.pong(pingValue + 1);
52 } 47 }
53 } 48 }
54 49
55 Future pingTargetUrl(String url, int count, 50 Future pingTargetUrl(String url, int count,
56 [Function responseFactory]) async { 51 [Function responseFactory]) async {
57 if (_application == null) { 52 if (_application == null) {
58 return responseFactory(false); 53 return responseFactory(false);
59 } 54 }
60 var completer = new Completer(); 55 var completer = new Completer();
61 var pingPongService = new PingPongServiceProxy.unbound(); 56 var pingPongService = new PingPongServiceInterfaceRequest();
62 _application.connectToService(url, pingPongService); 57 _application.connectToService(url, pingPongService);
63 58
64 var pingPongClient = new PingPongClientImpl.unbound(count, completer); 59 var pingPongClient = new PingPongClientImpl(count, completer);
65 pingPongService.setClient(pingPongClient.stub); 60 pingPongService.setClient(pingPongClient.client);
66 61
67 for (var i = 0; i < count; i++) { 62 for (var i = 0; i < count; i++) {
68 pingPongService.ping(i); 63 pingPongService.ping(i);
69 } 64 }
70 await completer.future; 65 await completer.future;
71 await pingPongService.close(); 66 await pingPongService.close();
72 67
73 return responseFactory(true); 68 return responseFactory(true);
74 } 69 }
75 70
76 Future pingTargetService(Proxy proxy, int count, 71 Future pingTargetService(PingPongServiceInterface service, int count,
77 [Function responseFactory]) async { 72 [Function responseFactory]) async {
78 var pingPongService = proxy; 73 var pingPongService = service;
79 var completer = new Completer(); 74 var completer = new Completer();
80 var client = new PingPongClientImpl.unbound(count, completer); 75 var client = new PingPongClientImpl(count, completer);
81 pingPongService.setClient(client.stub); 76 pingPongService.setClient(client.client);
82 77
83 for (var i = 0; i < count; i++) { 78 for (var i = 0; i < count; i++) {
84 pingPongService.ping(i); 79 pingPongService.ping(i);
85 } 80 }
86 await completer.future; 81 await completer.future;
87 await pingPongService.close(); 82 await pingPongService.close();
88 83
89 return responseFactory(true); 84 return responseFactory(true);
90 } 85 }
91 86
92 getPingPongService(PingPongServiceStub serviceStub) { 87 getPingPongService(PingPongServiceInterfaceRequest service) {
93 var targetServiceProxy = new PingPongServiceProxy.unbound(); 88 var targetService = new PingPongServiceInterfaceRequest();
94 _application.connectToService( 89 _application.connectToService("mojo:dart_pingpong_target", targetService);
95 "mojo:dart_pingpong_target", targetServiceProxy);
96 90
97 // Pass along the interface request to another implementation of the 91 // Pass along the interface request to another implementation of the
98 // service. 92 // service.
99 targetServiceProxy.getPingPongService(serviceStub); 93 targetService.getPingPongService(service);
100 targetServiceProxy.close(); 94 targetService.close();
101 } 95 }
102 96
103 getPingPongServiceDelayed(PingPongServiceStub serviceStub) { 97 getPingPongServiceDelayed(PingPongServiceInterfaceRequest service) {
104 Timer.run(() { 98 Timer.run(() {
105 var endpoint = serviceStub.ctrl.unbind(); 99 var endpoint = service.ctrl.unbind();
106 new Timer(const Duration(milliseconds: 10), () { 100 new Timer(const Duration(milliseconds: 10), () {
107 var targetServiceProxy = new PingPongServiceProxy.unbound(); 101 var targetService = new PingPongServiceInterfaceRequest();
108 _application.connectToService( 102 _application.connectToService(
109 "mojo:dart_pingpong_target", targetServiceProxy); 103 "mojo:dart_pingpong_target", targetService);
110 104
111 // Pass along the interface request to another implementation of the 105 // Pass along the interface request to another implementation of the
112 // service. 106 // service.
113 serviceStub.ctrl.bind(endpoint); 107 service.ctrl.bind(endpoint);
114 targetServiceProxy.getPingPongService(serviceStub); 108 targetService.getPingPongService(service);
115 targetServiceProxy.close(); 109 targetService.close();
116 }); 110 });
117 }); 111 });
118 } 112 }
119 113
120 void quit() {} 114 void quit() {}
121 } 115 }
122 116
123 class PingPongApplication extends Application { 117 class PingPongApplication extends Application {
124 PingPongApplication.fromHandle(MojoHandle handle) : super.fromHandle(handle); 118 PingPongApplication.fromHandle(MojoHandle handle) : super.fromHandle(handle);
125 119
126 @override 120 @override
127 void acceptConnection(String requestorUrl, String resolvedUrl, 121 void acceptConnection(String requestorUrl, String resolvedUrl,
128 ApplicationConnection connection) { 122 ApplicationConnection connection) {
129 connection.provideService(PingPongService.serviceName, 123 connection.provideService(PingPongService.serviceName,
130 (endpoint) => new PingPongServiceImpl(this, endpoint), 124 (endpoint) => new PingPongServiceImpl(this, endpoint),
131 description: PingPongServiceStub.serviceDescription); 125 description: PingPongService.serviceDescription);
132 } 126 }
133 } 127 }
134 128
135 main(List args, Object handleToken) { 129 main(List args, Object handleToken) {
136 MojoHandle appHandle = new MojoHandle(handleToken); 130 MojoHandle appHandle = new MojoHandle(handleToken);
137 new PingPongApplication.fromHandle(appHandle) 131 new PingPongApplication.fromHandle(appHandle)
138 ..onError = ((_) { 132 ..onError = ((_) {
139 MojoHandle.reportLeakedHandles(); 133 MojoHandle.reportLeakedHandles();
140 }); 134 });
141 } 135 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698