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

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: Merge 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 {%- for method in interface.methods %} 134 {%- for method in interface.methods %}
126 {%- if method.response_parameters != None %} 135 {%- if method.response_parameters != None %}
127 {%- set response_struct = method.response_param_struct %} 136 {%- set response_struct = method.response_param_struct %}
128 case _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name: 137 case _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name:
129 var r = {{response_struct|name}}.deserialize( 138 var r = {{response_struct|name}}.deserialize(
130 message.payload); 139 message.payload);
131 if (!message.header.hasRequestId) { 140 if (!message.header.hasRequestId) {
132 proxyError("Expected a message with a valid request Id."); 141 proxyError("Expected a message with a valid request Id.");
133 return; 142 return;
134 } 143 }
135 Completer c = completerMap[message.header.requestId]; 144 Function callback = callbackMap[message.header.requestId];
136 if (c == null) { 145 if (callback == null) {
137 proxyError( 146 proxyError(
138 "Message had unknown request Id: ${message.header.requestId}"); 147 "Message had unknown request Id: ${message.header.requestId}");
139 return; 148 return;
140 } 149 }
141 completerMap.remove(message.header.requestId); 150 callbackMap.remove(message.header.requestId);
142 if (c.isCompleted) { 151 callback(
143 proxyError("Response completer already completed"); 152 {%- for param in method.response_parameters -%}
144 return; 153 r.{{param|name}} {% if not loop.last %}, {% endif %}
145 } 154 {%- endfor -%}
146 c.complete(r); 155 );
147 break; 156 break;
148 {%- endif %} 157 {%- endif %}
149 {%- endfor %} 158 {%- endfor %}
150 default: 159 default:
151 proxyError("Unexpected message type: ${message.header.type}"); 160 proxyError("Unexpected message type: ${message.header.type}");
152 close(immediate: true); 161 close(immediate: true);
153 break; 162 break;
154 } 163 }
155 } 164 }
156 165
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 var params = new {{request_struct|name}}(); 221 var params = new {{request_struct|name}}();
213 {%- for parameter in method.parameters %} 222 {%- for parameter in method.parameters %}
214 params.{{parameter|name}} = {{parameter|name}}; 223 params.{{parameter|name}} = {{parameter|name}};
215 {%- endfor %} 224 {%- endfor %}
216 ctrl.sendMessage(params, 225 ctrl.sendMessage(params,
217 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name); 226 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name);
218 } 227 }
219 {%- else %} 228 {%- else %}
220 {%- set request_struct = method.param_struct %} 229 {%- set request_struct = method.param_struct %}
221 {%- set response_struct = method.response_param_struct %} 230 {%- set response_struct = method.response_param_struct %}
222 dynamic {{method|name}}( 231 void {{method|name}}(
223 {%- for parameter in method.parameters -%} 232 {%- for parameter in method.parameters -%}
224 {{parameter.kind|dart_type}} {{parameter|name}}, 233 {{parameter.kind|dart_type}} {{parameter|name}},
225 {%- endfor -%} 234 {%- endfor -%}
226 [Function responseFactory = null]) { 235 void callback(
236 {%- for param in method.response_parameters -%}
237 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif %}
238 {%- endfor -%}
239 )) {
227 if (impl != null) { 240 if (impl != null) {
228 return new Future(() => impl.{{method|name}}( 241 impl.{{method|name}}(
229 {%- for parameter in method.parameters -%} 242 {%- for parameter in method.parameters -%}
230 {{parameter|name}}, 243 {{parameter|name}},
231 {%- endfor -%} 244 {%- endfor -%}
232 _{{interface|name}}StubControl._{{response_struct|name|lower_camel}}Fact ory)); 245 callback);
246 return;
233 } 247 }
234 var params = new {{request_struct|name}}(); 248 var params = new {{request_struct|name}}();
235 {%- for parameter in method.parameters %} 249 {%- for parameter in method.parameters %}
236 params.{{parameter|name}} = {{parameter|name}}; 250 params.{{parameter|name}} = {{parameter|name}};
237 {%- endfor %} 251 {%- endfor %}
238 return ctrl.sendMessageWithRequestId( 252 ctrl.sendMessageWithRequestId(
239 params, 253 params,
240 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name, 254 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name,
241 -1, 255 -1,
242 bindings.MessageHeader.kMessageExpectsResponse); 256 bindings.MessageHeader.kMessageExpectsResponse,
257 callback);
243 } 258 }
244 {%- endif %} 259 {%- endif %}
245 {%- endfor %} 260 {%- endfor %}
246 } 261 }
247 262
248 class _{{interface|name}}StubControl 263 class _{{interface|name}}StubControl
249 extends bindings.StubMessageHandler 264 extends bindings.StubMessageHandler
250 implements bindings.StubControl<{{interface|name}}> { 265 implements bindings.StubControl<{{interface|name}}> {
251 {{interface|name}} _impl; 266 {{interface|name}} _impl;
252 267
253 _{{interface|name}}StubControl.fromEndpoint( 268 _{{interface|name}}StubControl.fromEndpoint(
254 core.MojoMessagePipeEndpoint endpoint, [{{interface|name}} impl]) 269 core.MojoMessagePipeEndpoint endpoint, [{{interface|name}} impl])
255 : super.fromEndpoint(endpoint, autoBegin: impl != null) { 270 : super.fromEndpoint(endpoint, autoBegin: impl != null) {
256 _impl = impl; 271 _impl = impl;
257 } 272 }
258 273
259 _{{interface|name}}StubControl.fromHandle( 274 _{{interface|name}}StubControl.fromHandle(
260 core.MojoHandle handle, [{{interface|name}} impl]) 275 core.MojoHandle handle, [{{interface|name}} impl])
261 : super.fromHandle(handle, autoBegin: impl != null) { 276 : super.fromHandle(handle, autoBegin: impl != null) {
262 _impl = impl; 277 _impl = impl;
263 } 278 }
264 279
265 _{{interface|name}}StubControl.unbound([this._impl]) : super.unbound(); 280 _{{interface|name}}StubControl.unbound([this._impl]) : super.unbound();
266 281
267 String get serviceName => {{interface|name}}.serviceName; 282 String get serviceName => {{interface|name}}.serviceName;
268 283
269 {% for method in interface.methods %} 284 {% for method in interface.methods %}
270 {%- if method.response_parameters != None %} 285 {%- if method.response_parameters != None %}
271 {%- set response_struct = method.response_param_struct %} 286 {%- set response_struct = method.response_param_struct %}
272 static {{response_struct|name}} _{{response_struct|name|lower_camel}}Factory( 287 Function _{{response_struct|name|lower_camel}}Responder(
273 {%- for param in method.response_parameters -%} 288 int requestId) {
274 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif %} 289 return (
275 {%- endfor -%} 290 {%- for param in method.response_parameters -%}
276 ) { 291 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif %}
277 var result = new {{response_struct|name}}(); 292 {%- endfor -%}
278 {%- for param in method.response_parameters %} 293 ) {
279 result.{{param|name}} = {{param|name}}; 294 var result = new {{response_struct|name}}();
280 {%- endfor %} 295 {%- for param in method.response_parameters %}
281 return result; 296 result.{{param|name}} = {{param|name}};
297 {%- endfor %}
298 sendResponse(buildResponseWithId(
299 result,
300 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name,
301 requestId,
302 bindings.MessageHeader.kMessageIsResponse));
303 };
282 } 304 }
283 {%- endif %} 305 {%- endif %}
284 {%- endfor %} 306 {%- endfor %}
285 307
286 dynamic handleMessage(bindings.ServiceMessage message) { 308 void handleMessage(bindings.ServiceMessage message) {
287 if (bindings.ControlMessageHandler.isControlMessage(message)) { 309 if (bindings.ControlMessageHandler.isControlMessage(message)) {
288 return bindings.ControlMessageHandler.handleMessage(this, 310 bindings.ControlMessageHandler.handleMessage(
289 {{interface.version}}, 311 this, {{interface.version}}, message);
290 message); 312 return;
291 } 313 }
292 if (_impl == null) { 314 if (_impl == null) {
293 throw new core.MojoApiError("$this has no implementation set"); 315 throw new core.MojoApiError("$this has no implementation set");
294 } 316 }
295 switch (message.header.type) { 317 switch (message.header.type) {
296 {%- for method in interface.methods %} 318 {%- for method in interface.methods %}
297 {%- set request_struct = method.param_struct %} 319 {%- set request_struct = method.param_struct %}
298 case _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name: 320 case _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name:
299 {%- if method.parameters %} 321 {%- if method.parameters %}
300 var params = {{request_struct|name}}.deserialize( 322 var params = {{request_struct|name}}.deserialize(
301 message.payload); 323 message.payload);
302 {%- endif %} 324 {%- endif %}
303 {%- if method.response_parameters == None %} 325 {%- if method.response_parameters == None %}
304 _impl.{{method|name}}( 326 _impl.{{method|name}}(
305 {%- for parameter in method.parameters -%} 327 {%- for parameter in method.parameters -%}
306 params.{{parameter|name}}{% if not loop.last %}, {% endif %} 328 params.{{parameter|name}}{% if not loop.last %}, {% endif %}
307 {%- endfor -%} 329 {%- endfor -%}
308 ); 330 );
309 {%- else %} 331 {%- else %}
310 {%- set response_struct = method.response_param_struct %} 332 {%- set response_struct = method.response_param_struct %}
311 var response = _impl.{{method|name}}( 333 _impl.{{method|name}}(
312 {%- for parameter in method.parameters -%} 334 {%- for parameter in method.parameters -%}
313 params.{{parameter|name}}, 335 params.{{parameter|name}}, {% endfor -%}
314 {%- endfor -%} 336 _{{response_struct|name|lower_camel}}Responder(message.header.requestI d));
315 _{{response_struct|name|lower_camel}}Factory);
316 if (response is Future) {
317 return response.then((response) {
318 if (response != null) {
319 return buildResponseWithId(
320 response,
321 _{{interface|name|lower_camel}}Method{{method|name|upper_camel }}Name,
322 message.header.requestId,
323 bindings.MessageHeader.kMessageIsResponse);
324 }
325 });
326 } else if (response != null) {
327 return buildResponseWithId(
328 response,
329 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Na me,
330 message.header.requestId,
331 bindings.MessageHeader.kMessageIsResponse);
332 }
333 {%- endif %} 337 {%- endif %}
334 break; 338 break;
335 {%- endfor %} 339 {%- endfor %}
336 default: 340 default:
337 throw new bindings.MojoCodecError("Unexpected message name"); 341 throw new bindings.MojoCodecError("Unexpected message name");
338 break; 342 break;
339 } 343 }
340 return null;
341 } 344 }
342 345
343 {{interface|name}} get impl => _impl; 346 {{interface|name}} get impl => _impl;
344 set impl({{interface|name}} d) { 347 set impl({{interface|name}} d) {
345 if (d == null) { 348 if (d == null) {
346 throw new core.MojoApiError("$this: Cannot set a null implementation"); 349 throw new core.MojoApiError("$this: Cannot set a null implementation");
347 } 350 }
348 if (isBound && (_impl == null)) { 351 if (isBound && (_impl == null)) {
349 beginHandlingEvents(); 352 beginHandlingEvents();
350 } 353 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 {{parameter.kind|dart_type}} {{parameter|name}}{% if not loop.last %}, {% en dif %} 400 {{parameter.kind|dart_type}} {{parameter|name}}{% if not loop.last %}, {% en dif %}
398 {%- endfor -%} 401 {%- endfor -%}
399 ) { 402 ) {
400 return impl.{{method|name}}( 403 return impl.{{method|name}}(
401 {%- for parameter in method.parameters -%} 404 {%- for parameter in method.parameters -%}
402 {{parameter|name}}{% if not loop.last %}, {% endif %} 405 {{parameter|name}}{% if not loop.last %}, {% endif %}
403 {%- endfor -%} 406 {%- endfor -%}
404 ); 407 );
405 } 408 }
406 {%- else %} 409 {%- else %}
407 dynamic {{method|name}}( 410 void {{method|name}}(
408 {%- for parameter in method.parameters -%} 411 {%- for parameter in method.parameters -%}
409 {{parameter.kind|dart_type}} {{parameter|name}}, 412 {{parameter.kind|dart_type}} {{parameter|name}},
410 {%- endfor -%} 413 {%- endfor -%}
411 [Function responseFactory = null]) { 414 void callback(
415 {%- for param in method.response_parameters -%}
416 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif %}
417 {%- endfor -%}
418 )) {
412 return impl.{{method|name}}( 419 return impl.{{method|name}}(
413 {%- for parameter in method.parameters -%} 420 {%- for parameter in method.parameters -%}
414 {{parameter|name}}, 421 {{parameter|name}},
415 {%- endfor -%} 422 {%- endfor -%}
416 responseFactory); 423 callback);
417 } 424 }
418 {%- endif %} 425 {%- endif %}
419 {%- endfor %} 426 {%- endfor %}
420 } 427 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698