Index: mojo/public/tools/bindings/generators/dart_templates/interface_definition.tmpl |
diff --git a/mojo/public/tools/bindings/generators/dart_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/dart_templates/interface_definition.tmpl |
index a21eb432c074b8425d06dbe813d23b4c5309b656..288bfd856af56a475d627b4e429c52ce9bd5b967 100644 |
--- a/mojo/public/tools/bindings/generators/dart_templates/interface_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/dart_templates/interface_definition.tmpl |
@@ -1,60 +1,69 @@ |
{%- for method in interface.methods %} |
-const int k{{interface.name}}_{{method.name}}_name = {{method.ordinal}}; |
+const int k{{interface|name}}_{{method|name}}_name = {{method.ordinal}}; |
{%- endfor %} |
-abstract class {{interface.name}}Calls { |
- void enqueueMessage(Type t, int name, Object msg); |
- Future enqueueMessageWithRequestID(Type t, int name, int id, Object msg); |
+abstract class {{interface|name}}Calls { |
+ void enqueueMessage(bindings.Struct message, int name); |
+ Future enqueueMessageWithRequestId(bindings.Struct message, int name, int id); |
bool get isOpen; |
{%- for method in interface.methods %} |
{%- if method.response_parameters == None %} |
- void call{{method.name}}( |
+ void call{{method|name|upper_camel_case}}( |
{%- for parameter in method.parameters -%} |
- {{parameter.kind|dart_decl_type}} {{parameter.name}}{% if not loop.last %}, {% endif %} |
+ {{parameter.kind|dart_type}} {{parameter|name}}{% if not loop.last %}, {% endif %} |
{%- endfor -%} |
+{%- set request_struct = method|struct_from_method %} |
) { |
assert(isOpen); |
- var params = new {{interface.name}}_{{method.name}}_Params(); |
+ var params = new {{request_struct|name}}(); |
{%- for parameter in method.parameters %} |
- params.{{parameter.name}} = {{parameter.name}}; |
+ params.{{parameter|name}} = {{parameter|name}}; |
{%- endfor %} |
- enqueueMessage({{interface.name}}_{{method.name}}_Params, |
- k{{interface.name}}_{{method.name}}_name, |
- params); |
+ enqueueMessage(params, k{{interface|name}}_{{method|name}}_name); |
} |
{% else %} |
- Future<{{interface.name}}_{{method.name}}_ResponseParams> call{{method.name}}( |
+{%- set response_struct = method|response_struct_from_method %} |
+ Future<{{response_struct|name}}> call{{method|name|upper_camel_case}}( |
{%- for parameter in method.parameters -%} |
- {{parameter.kind|dart_decl_type}} {{parameter.name}}{% if not loop.last %}, {% endif %} |
+ {{parameter.kind|dart_type}} {{parameter|name}}, |
{%- endfor -%} |
+{%- set request_struct = method|struct_from_method %} |
+ [int requestId = -1] |
) { |
assert(isOpen); |
- var params = new {{interface.name}}_{{method.name}}_Params(); |
+ var params = new {{request_struct|name}}(); |
{%- for parameter in method.parameters %} |
- params.{{parameter.name}} = {{parameter.name}}; |
+ params.{{parameter|name}} = {{parameter|name}}; |
{%- endfor %} |
- return enqueueMessageWithRequestID( |
- {{interface.name}}_{{method.name}}_Params, |
- k{{interface.name}}_{{method.name}}_name, |
- 0, |
- bindings.kMessageExpectsResponse, |
- params); |
+ return enqueueMessageWithRequestId( |
+ params, |
+ k{{interface|name}}_{{method|name}}_name, |
+ requestId, |
+ bindings.MessageHeader.kMessageExpectsResponse); |
} |
{%- endif %} |
{%- endfor %} |
} |
-class {{interface.name}}Client extends bindings.Client with {{interface.name}}Calls { |
- {{interface.name}}Client(core.MojoMessagePipeEndpoint endpoint) : super(endpoint); |
+class {{interface|name}}Client extends bindings.Client with {{interface|name}}Calls { |
+ {{interface|name}}Client(core.MojoMessagePipeEndpoint endpoint) : super(endpoint); |
- void handleResponse(bindings.MessageReader reader) { |
- switch (reader.name) { |
+ {{interface|name}}Client.fromHandle(int handle) : super.fromHandle(handle); |
+ |
+ void handleResponse(bindings.ServiceMessage message) { |
+ switch (message.header.type) { |
{%- for method in interface.methods %} |
{%- if method.response_parameters != None %} |
- case k{{interface.name}}_{{method.name}}_name: |
- var r = reader.decodeStruct({{interface.name}}_{{method.name}}_ResponseParams); |
- Completer c = completerQueue.removeAt(0); |
+{%- set response_struct = method|response_struct_from_method %} |
+ case k{{interface|name}}_{{method|name}}_name: |
+ var r = {{response_struct|name}}.deserialize( |
+ message.payload); |
+ if (!message.header.hasRequestId) { |
+ throw 'Expected a message with a valid request Id.'; |
+ } |
+ Completer c = completerMap[message.header.requestId]; |
+ completerMap[message.header.requestId] = null; |
c.complete(r); |
break; |
{%- endif %} |
@@ -67,47 +76,60 @@ class {{interface.name}}Client extends bindings.Client with {{interface.name}}Ca |
} |
-abstract class {{interface.name}}Interface extends bindings.Interface |
+abstract class {{interface|name}}Interface extends bindings.Interface |
{% if interface.client != None -%} |
-with {{imported_from[interface.client]}}{{interface.client}}Calls |
+with {{imported_from[interface.client]}}{{interface.client|upper_camel_case}}Calls |
{% endif -%} { |
- {{interface.name}}Interface(core.MojoMessagePipeEndpoint endpoint) : super(endpoint); |
+ {{interface|name}}Interface(core.MojoMessagePipeEndpoint endpoint) : super(endpoint); |
+ |
+ {{interface|name}}Interface.fromHandle(int handle) : super.fromHandle(handle); |
+ |
+ static const String name = '{{namespace|replace(".","::")}}::{{interface|name}}'; |
{% for method in interface.methods %} |
{%- if method.response_parameters == None %} |
- void {{method.name|stylize_method}}( |
+ void {{method|name}}( |
{%- for parameter in method.parameters -%} |
- {{parameter.kind|dart_decl_type}} {{parameter.name}}{% if not loop.last %}, {% endif %} |
+ {{parameter.kind|dart_type}} {{parameter|name}}{% if not loop.last %}, {% endif %} |
{%- endfor -%} |
); |
{%- else %} |
- {{interface.name}}_{{method.name}}_ResponseParams {{method.name|stylize_method}}( |
+{%- set response_struct = method|response_struct_from_method %} |
+ Future<{{response_struct|name}}> {{method|name}}( |
{%- for parameter in method.parameters -%} |
- {{parameter.kind|dart_decl_type}} {{parameter.name}}{% if not loop.last %}, {% endif %} |
+ {{parameter.kind|dart_type}} {{parameter|name}}{% if not loop.last %}, {% endif %} |
{%- endfor -%} |
); |
{%- endif %} |
{%- endfor %} |
- bindings.Message handleMessage(bindings.MessageReader reader) { |
- switch (reader.name) { |
+ Future<bindings.Message> handleMessage(bindings.ServiceMessage message) { |
+ switch (message.header.type) { |
{%- for method in interface.methods %} |
- case k{{interface.name}}_{{method.name}}_name: |
- var params = reader.decodeStruct({{interface.name}}_{{method.name}}_Params); |
+{%- set request_struct = method|struct_from_method %} |
+ case k{{interface|name}}_{{method|name}}_name: |
+ var params = {{request_struct|name}}.deserialize( |
+ message.payload); |
{%- if method.response_parameters == None %} |
- {{method.name|stylize_method}}(params); |
-{%- else %} |
- var response = {{method.name|stylize_method}}( |
+ {{method|name}}( |
{%- for parameter in method.parameters -%} |
- params.{{parameter.name}}{% if not loop.last %}, {% endif %} |
+ params.{{parameter|name}}{% if not loop.last %}, {% endif %} |
{%- endfor -%} |
); |
- return buildResponseWithID( |
- {{interface.name}}_{{method.name}}_ResponseParams, |
- k{{interface.name}}_{{method.name}}_name, |
- reader.requestID, |
- bindings.kMessageIsResponse, |
- response); |
+{%- else %} |
+ return {{method|name}}( |
+ {%- for parameter in method.parameters -%} |
+ params.{{parameter|name}}{% if not loop.last %}, {% endif %} |
+ {%- endfor -%} |
+ ).then((response) { |
+ if (response != null) { |
+ return buildResponseWithId( |
+ response, |
+ k{{interface|name}}_{{method|name}}_name, |
+ message.header.requestId, |
+ bindings.MessageHeader.kMessageIsResponse); |
+ } |
+ }); |
{%- endif %} |
break; |
{%- endfor %} |
@@ -125,7 +147,7 @@ with {{imported_from[interface.client]}}{{interface.client}}Calls |
{#--- Interface Constants #} |
{% for constant in interface.constants %} |
-final {{constant.name}} = {{constant.value|expression_to_text}}; |
+final {{constant|name}} = {{constant.value|expression_to_text}}; |
{%- endfor %} |