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

Side by Side Diff: mojo/public/tools/bindings/generators/dart_templates/interface_definition.tmpl

Issue 2006093002: Dart: Futures -> Callbacks. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Move code from mojo_patch to proxy.dart Created 4 years, 6 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 {%- for method in interface.methods %} 1 {%- for method in interface.methods %}
2 const int _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name = {{method.ordinal}}; 2 const int _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name = {{method.ordinal}};
3 {%- endfor %} 3 {%- endfor %}
4 4
5 {#--- Interface Enums #} 5 {#--- Interface Enums #}
6 {%- from "enum_definition.tmpl" import enum_def -%} 6 {%- from "enum_definition.tmpl" import enum_def -%}
7 {%- for enum in interface.enums %} 7 {%- for enum in interface.enums %}
8 {{ enum_def(enum, typepkg, package) }} 8 {{ enum_def(enum, typepkg, package) }}
9 {%- endfor %} 9 {%- endfor %}
10 10
11 class _{{interface|name}}ServiceDescription implements {{descpkg}}ServiceDescrip tion { 11 class _{{interface|name}}ServiceDescription implements {{descpkg}}ServiceDescrip tion {
12 {%- if should_gen_mojom_types and interface.service_name %} 12 {%- if should_gen_mojom_types and interface.service_name %}
13 dynamic getTopLevelInterface([Function responseFactory]){ 13 void getTopLevelInterface(Function responder){
14 var interfaceTypeKey = getRuntimeTypeInfo().services["{{interface.service_na me}}"]; 14 var interfaceTypeKey = getRuntimeTypeInfo().services["{{interface.service_na me}}"];
15 var userDefinedType = getAllMojomTypeDefinitions()[interfaceTypeKey]; 15 var userDefinedType = getAllMojomTypeDefinitions()[interfaceTypeKey];
16 return responseFactory(userDefinedType.interfaceType); 16 responder(userDefinedType.interfaceType);
17 } 17 }
18 18
19 dynamic getTypeDefinition(String typeKey, [Function responseFactory]) => 19 void getTypeDefinition(String typeKey, Function responder) {
20 responseFactory(getAllMojomTypeDefinitions()[typeKey]); 20 responder(getAllMojomTypeDefinitions()[typeKey]);
21 }
21 22
22 dynamic getAllTypeDefinitions([Function responseFactory]) => 23 void getAllTypeDefinitions(Function responder) {
23 responseFactory(getAllMojomTypeDefinitions()); 24 responder(getAllMojomTypeDefinitions());
25 }
24 {%- else %} 26 {%- else %}
25 dynamic getTopLevelInterface([Function responseFactory]) => 27 void getTopLevelInterface(Function responder) {
26 responseFactory(null); 28 responder(null);
29 }
27 30
28 dynamic getTypeDefinition(String typeKey, [Function responseFactory]) => 31 void getTypeDefinition(String typeKey, Function responder) {
29 responseFactory(null); 32 responder(null);
33 }
30 34
31 dynamic getAllTypeDefinitions([Function responseFactory]) => 35 void getAllTypeDefinitions(Function responder) {
32 responseFactory(null); 36 responder(null);
37 }
33 {%- endif %} 38 {%- endif %}
34 } 39 }
35 40
36 abstract class {{interface|name}} { 41 abstract class {{interface|name}} {
37 {%- if interface.service_name %} 42 {%- if interface.service_name %}
38 static const String serviceName = "{{interface.service_name}}"; 43 static const String serviceName = "{{interface.service_name}}";
39 {%- else %} 44 {%- else %}
40 static const String serviceName = null; 45 static const String serviceName = null;
41 {%- endif %} 46 {%- endif %}
42 47
(...skipping 18 matching lines...) Expand all
61 } 66 }
62 67
63 {%- for method in interface.methods %} 68 {%- for method in interface.methods %}
64 {%- if method.response_parameters == None %} 69 {%- if method.response_parameters == None %}
65 void {{method|name}}( 70 void {{method|name}}(
66 {%- for parameter in method.parameters -%} 71 {%- for parameter in method.parameters -%}
67 {{parameter.kind|dart_type}} {{parameter|name}}{% if not loop.last %}, {% endif %} 72 {{parameter.kind|dart_type}} {{parameter|name}}{% if not loop.last %}, {% endif %}
68 {%- endfor -%} 73 {%- endfor -%}
69 ); 74 );
70 {%- else %} 75 {%- else %}
71 dynamic {{method|name}}( 76 void {{method|name}}(
72 {%- for parameter in method.parameters -%} 77 {%- for parameter in method.parameters -%}
73 {{parameter.kind|dart_type}} {{parameter|name}}, 78 {{parameter.kind|dart_type}} {{parameter|name}},
74 {%- endfor -%} 79 {%- endfor -%}
75 [Function responseFactory = null]); 80 void callback(
81 {%- for param in method.response_parameters -%}
82 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif %}
83 {%- endfor -%}
84 ));
76 {%- endif %} 85 {%- endif %}
77 {%- endfor %} 86 {%- endfor %}
78 87
79 {#--- Interface Constants #} 88 {#--- Interface Constants #}
80 {%- for constant in interface.constants %} 89 {%- for constant in interface.constants %}
81 static const {{constant.kind|dart_type}} {{constant|name}} = {{constant.resolv ed_value}}; 90 static const {{constant.kind|dart_type}} {{constant|name}} = {{constant.resolv ed_value}};
82 {%- endfor %} 91 {%- endfor %}
83 } 92 }
84 93
85 abstract class {{interface|name}}Interface 94 abstract class {{interface|name}}Interface
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 {%- for method in interface.methods %} 127 {%- for method in interface.methods %}
119 {%- if method.response_parameters != None %} 128 {%- if method.response_parameters != None %}
120 {%- set response_struct = method.response_param_struct %} 129 {%- set response_struct = method.response_param_struct %}
121 case _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name: 130 case _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name:
122 var r = {{response_struct|name}}.deserialize( 131 var r = {{response_struct|name}}.deserialize(
123 message.payload); 132 message.payload);
124 if (!message.header.hasRequestId) { 133 if (!message.header.hasRequestId) {
125 proxyError("Expected a message with a valid request Id."); 134 proxyError("Expected a message with a valid request Id.");
126 return; 135 return;
127 } 136 }
128 Completer c = completerMap[message.header.requestId]; 137 Function callback = callbackMap[message.header.requestId];
129 if (c == null) { 138 if (callback == null) {
130 proxyError( 139 proxyError(
131 "Message had unknown request Id: ${message.header.requestId}"); 140 "Message had unknown request Id: ${message.header.requestId}");
132 return; 141 return;
133 } 142 }
134 completerMap.remove(message.header.requestId); 143 callbackMap.remove(message.header.requestId);
135 if (c.isCompleted) { 144 callback(
136 proxyError("Response completer already completed"); 145 {%- for param in method.response_parameters -%}
137 return; 146 r.{{param|name}} {% if not loop.last %}, {% endif %}
138 } 147 {%- endfor -%}
139 c.complete(r); 148 );
140 break; 149 break;
141 {%- endif %} 150 {%- endif %}
142 {%- endfor %} 151 {%- endfor %}
143 default: 152 default:
144 proxyError("Unexpected message type: ${message.header.type}"); 153 proxyError("Unexpected message type: ${message.header.type}");
145 close(immediate: true); 154 close(immediate: true);
146 break; 155 break;
147 } 156 }
148 } 157 }
149 158
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 } 203 }
195 var params = new {{request_struct|name}}(); 204 var params = new {{request_struct|name}}();
196 {%- for parameter in method.parameters %} 205 {%- for parameter in method.parameters %}
197 params.{{parameter|name}} = {{parameter|name}}; 206 params.{{parameter|name}} = {{parameter|name}};
198 {%- endfor %} 207 {%- endfor %}
199 ctrl.sendMessage(params, 208 ctrl.sendMessage(params,
200 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name); 209 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name);
201 } 210 }
202 {%- else %} 211 {%- else %}
203 {%- set request_struct = method.param_struct %} 212 {%- set request_struct = method.param_struct %}
204 dynamic {{method|name}}( 213 void {{method|name}}(
205 {%- for parameter in method.parameters -%} 214 {%- for parameter in method.parameters -%}
206 {{parameter.kind|dart_type}} {{parameter|name}}, 215 {{parameter.kind|dart_type}} {{parameter|name}},
207 {%- endfor -%} 216 {%- endfor -%}
208 [Function responseFactory = null]) { 217 void callback(
218 {%- for param in method.response_parameters -%}
219 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif %}
220 {%- endfor -%}
221 )) {
209 var params = new {{request_struct|name}}(); 222 var params = new {{request_struct|name}}();
210 {%- for parameter in method.parameters %} 223 {%- for parameter in method.parameters %}
211 params.{{parameter|name}} = {{parameter|name}}; 224 params.{{parameter|name}} = {{parameter|name}};
212 {%- endfor %} 225 {%- endfor %}
213 return ctrl.sendMessageWithRequestId( 226 ctrl.sendMessageWithRequestId(
214 params, 227 params,
215 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name, 228 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name,
216 -1, 229 -1,
217 bindings.MessageHeader.kMessageExpectsResponse); 230 bindings.MessageHeader.kMessageExpectsResponse,
231 callback);
218 } 232 }
219 {%- endif %} 233 {%- endif %}
220 {%- endfor %} 234 {%- endfor %}
221 } 235 }
222 236
223 class _{{interface|name}}StubControl 237 class _{{interface|name}}StubControl
224 extends bindings.StubMessageHandler 238 extends bindings.StubMessageHandler
225 implements bindings.StubControl<{{interface|name}}> { 239 implements bindings.StubControl<{{interface|name}}> {
226 {{interface|name}} _impl; 240 {{interface|name}} _impl;
227 241
228 _{{interface|name}}StubControl.fromEndpoint( 242 _{{interface|name}}StubControl.fromEndpoint(
229 core.MojoMessagePipeEndpoint endpoint, [{{interface|name}} impl]) 243 core.MojoMessagePipeEndpoint endpoint, [{{interface|name}} impl])
230 : super.fromEndpoint(endpoint, autoBegin: impl != null) { 244 : super.fromEndpoint(endpoint, autoBegin: impl != null) {
231 _impl = impl; 245 _impl = impl;
232 } 246 }
233 247
234 _{{interface|name}}StubControl.fromHandle( 248 _{{interface|name}}StubControl.fromHandle(
235 core.MojoHandle handle, [{{interface|name}} impl]) 249 core.MojoHandle handle, [{{interface|name}} impl])
236 : super.fromHandle(handle, autoBegin: impl != null) { 250 : super.fromHandle(handle, autoBegin: impl != null) {
237 _impl = impl; 251 _impl = impl;
238 } 252 }
239 253
240 _{{interface|name}}StubControl.unbound([this._impl]) : super.unbound(); 254 _{{interface|name}}StubControl.unbound([this._impl]) : super.unbound();
241 255
242 String get serviceName => {{interface|name}}.serviceName; 256 String get serviceName => {{interface|name}}.serviceName;
243 257
244 {% for method in interface.methods %} 258 {% for method in interface.methods %}
245 {%- if method.response_parameters != None %} 259 {%- if method.response_parameters != None %}
246 {%- set response_struct = method.response_param_struct %} 260 {%- set response_struct = method.response_param_struct %}
247 {{response_struct|name}} _{{response_struct|name|lower_camel}}Factory( 261 Function _{{response_struct|name|lower_camel}}Responder(
248 {%- for param in method.response_parameters -%} 262 int requestId) {
249 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif %} 263 return (
250 {%- endfor -%} 264 {%- for param in method.response_parameters -%}
251 ) { 265 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif %}
252 var result = new {{response_struct|name}}(); 266 {%- endfor -%}
253 {%- for param in method.response_parameters %} 267 ) {
254 result.{{param|name}} = {{param|name}}; 268 var result = new {{response_struct|name}}();
255 {%- endfor %} 269 {%- for param in method.response_parameters %}
256 return result; 270 result.{{param|name}} = {{param|name}};
271 {%- endfor %}
272 sendResponse(buildResponseWithId(
273 result,
274 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name,
275 requestId,
276 bindings.MessageHeader.kMessageIsResponse));
277 };
257 } 278 }
258 {%- endif %} 279 {%- endif %}
259 {%- endfor %} 280 {%- endfor %}
260 281
261 dynamic handleMessage(bindings.ServiceMessage message) { 282 void handleMessage(bindings.ServiceMessage message) {
262 if (bindings.ControlMessageHandler.isControlMessage(message)) { 283 if (bindings.ControlMessageHandler.isControlMessage(message)) {
263 return bindings.ControlMessageHandler.handleMessage(this, 284 bindings.ControlMessageHandler.handleMessage(
264 {{interface.version}}, 285 this, {{interface.version}}, message);
265 message); 286 return;
266 } 287 }
267 if (_impl == null) { 288 if (_impl == null) {
268 throw new core.MojoApiError("$this has no implementation set"); 289 throw new core.MojoApiError("$this has no implementation set");
269 } 290 }
270 switch (message.header.type) { 291 switch (message.header.type) {
271 {%- for method in interface.methods %} 292 {%- for method in interface.methods %}
272 {%- set request_struct = method.param_struct %} 293 {%- set request_struct = method.param_struct %}
273 case _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name: 294 case _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name:
274 {%- if method.parameters %} 295 {%- if method.parameters %}
275 var params = {{request_struct|name}}.deserialize( 296 var params = {{request_struct|name}}.deserialize(
276 message.payload); 297 message.payload);
277 {%- endif %} 298 {%- endif %}
278 {%- if method.response_parameters == None %} 299 {%- if method.response_parameters == None %}
279 _impl.{{method|name}}( 300 _impl.{{method|name}}(
280 {%- for parameter in method.parameters -%} 301 {%- for parameter in method.parameters -%}
281 params.{{parameter|name}}{% if not loop.last %}, {% endif %} 302 params.{{parameter|name}}{% if not loop.last %}, {% endif %}
282 {%- endfor -%} 303 {%- endfor -%}
283 ); 304 );
284 {%- else %} 305 {%- else %}
285 {%- set response_struct = method.response_param_struct %} 306 {%- set response_struct = method.response_param_struct %}
286 var response = _impl.{{method|name}}( 307 _impl.{{method|name}}(
287 {%- for parameter in method.parameters -%} 308 {%- for parameter in method.parameters -%}
288 params.{{parameter|name}}, 309 params.{{parameter|name}}, {% endfor -%}
289 {%- endfor -%} 310 _{{response_struct|name|lower_camel}}Responder(message.header.requestI d));
290 _{{response_struct|name|lower_camel}}Factory);
291 if (response is Future) {
292 return response.then((response) {
293 if (response != null) {
294 return buildResponseWithId(
295 response,
296 _{{interface|name|lower_camel}}Method{{method|name|upper_camel }}Name,
297 message.header.requestId,
298 bindings.MessageHeader.kMessageIsResponse);
299 }
300 });
301 } else if (response != null) {
302 return buildResponseWithId(
303 response,
304 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Na me,
305 message.header.requestId,
306 bindings.MessageHeader.kMessageIsResponse);
307 }
308 {%- endif %} 311 {%- endif %}
309 break; 312 break;
310 {%- endfor %} 313 {%- endfor %}
311 default: 314 default:
312 throw new bindings.MojoCodecError("Unexpected message name"); 315 throw new bindings.MojoCodecError("Unexpected message name");
313 break; 316 break;
314 } 317 }
315 return null;
316 } 318 }
317 319
318 {{interface|name}} get impl => _impl; 320 {{interface|name}} get impl => _impl;
319 set impl({{interface|name}} d) { 321 set impl({{interface|name}} d) {
320 if (d == null) { 322 if (d == null) {
321 throw new core.MojoApiError("$this: Cannot set a null implementation"); 323 throw new core.MojoApiError("$this: Cannot set a null implementation");
322 } 324 }
323 if (isBound && (_impl == null)) { 325 if (isBound && (_impl == null)) {
324 beginHandlingEvents(); 326 beginHandlingEvents();
325 } 327 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 {{parameter.kind|dart_type}} {{parameter|name}}{% if not loop.last %}, {% en dif %} 374 {{parameter.kind|dart_type}} {{parameter|name}}{% if not loop.last %}, {% en dif %}
373 {%- endfor -%} 375 {%- endfor -%}
374 ) { 376 ) {
375 return impl.{{method|name}}( 377 return impl.{{method|name}}(
376 {%- for parameter in method.parameters -%} 378 {%- for parameter in method.parameters -%}
377 {{parameter|name}}{% if not loop.last %}, {% endif %} 379 {{parameter|name}}{% if not loop.last %}, {% endif %}
378 {%- endfor -%} 380 {%- endfor -%}
379 ); 381 );
380 } 382 }
381 {%- else %} 383 {%- else %}
382 dynamic {{method|name}}( 384 void {{method|name}}(
383 {%- for parameter in method.parameters -%} 385 {%- for parameter in method.parameters -%}
384 {{parameter.kind|dart_type}} {{parameter|name}}, 386 {{parameter.kind|dart_type}} {{parameter|name}},
385 {%- endfor -%} 387 {%- endfor -%}
386 [Function responseFactory = null]) { 388 void callback(
389 {%- for param in method.response_parameters -%}
390 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif %}
391 {%- endfor -%}
392 )) {
387 return impl.{{method|name}}( 393 return impl.{{method|name}}(
388 {%- for parameter in method.parameters -%} 394 {%- for parameter in method.parameters -%}
389 {{parameter|name}}, 395 {{parameter|name}},
390 {%- endfor -%} 396 {%- endfor -%}
391 responseFactory); 397 callback);
392 } 398 }
393 {%- endif %} 399 {%- endif %}
394 {%- endfor %} 400 {%- endfor %}
395 } 401 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698