OLD | NEW |
| (Empty) |
1 {%- for method in interface.methods %} | |
2 const int _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name =
{{method.ordinal}}; | |
3 {%- endfor %} | |
4 | |
5 {#--- Interface Enums #} | |
6 {%- from "enum_definition.tmpl" import enum_def -%} | |
7 {%- for enum in interface.enums %} | |
8 {{ enum_def(enum, typepkg, package) }} | |
9 {%- endfor %} | |
10 | |
11 class _{{interface|name}}ServiceDescription implements {{descpkg}}ServiceDescrip
tion { | |
12 {%- if should_gen_mojom_types and interface.service_name %} | |
13 void getTopLevelInterface(Function responder){ | |
14 var interfaceTypeKey = getRuntimeTypeInfo().services["{{interface.service_na
me}}"]; | |
15 var userDefinedType = getAllMojomTypeDefinitions()[interfaceTypeKey]; | |
16 responder(userDefinedType.interfaceType); | |
17 } | |
18 | |
19 void getTypeDefinition(String typeKey, Function responder) { | |
20 responder(getAllMojomTypeDefinitions()[typeKey]); | |
21 } | |
22 | |
23 void getAllTypeDefinitions(Function responder) { | |
24 responder(getAllMojomTypeDefinitions()); | |
25 } | |
26 {%- else %} | |
27 void getTopLevelInterface(Function responder) { | |
28 responder(null); | |
29 } | |
30 | |
31 void getTypeDefinition(String typeKey, Function responder) { | |
32 responder(null); | |
33 } | |
34 | |
35 void getAllTypeDefinitions(Function responder) { | |
36 responder(null); | |
37 } | |
38 {%- endif %} | |
39 } | |
40 | |
41 abstract class {{interface|name}} { | |
42 {%- if interface.service_name %} | |
43 static const String serviceName = "{{interface.service_name}}"; | |
44 {%- else %} | |
45 static const String serviceName = null; | |
46 {%- endif %} | |
47 | |
48 static {{descpkg}}ServiceDescription _cachedServiceDescription; | |
49 static {{descpkg}}ServiceDescription get serviceDescription { | |
50 if (_cachedServiceDescription == null) { | |
51 _cachedServiceDescription = new _{{interface|name}}ServiceDescription(); | |
52 } | |
53 return _cachedServiceDescription; | |
54 } | |
55 | |
56 static {{interface|name}}Proxy connectToService( | |
57 bindings.ServiceConnector s, String url, [String serviceName]) { | |
58 {{interface|name}}Proxy p = new {{interface|name}}Proxy.unbound(); | |
59 String name = serviceName ?? {{interface|name}}.serviceName; | |
60 if ((name == null) || name.isEmpty) { | |
61 throw new core.MojoApiError( | |
62 "If an interface has no ServiceName, then one must be provided."); | |
63 } | |
64 s.connectToService(url, p, name); | |
65 return p; | |
66 } | |
67 | |
68 {%- for method in interface.methods %} | |
69 {%- if method.response_parameters == None %} | |
70 void {{method|name}}( | |
71 {%- for parameter in method.parameters -%} | |
72 {{parameter.kind|dart_type}} {{parameter|name}}{% if not loop.last %}, {%
endif %} | |
73 {%- endfor -%} | |
74 ); | |
75 {%- else %} | |
76 void {{method|name}}( | |
77 {%- for parameter in method.parameters -%} | |
78 {{parameter.kind|dart_type}} {{parameter|name}}, | |
79 {%- endfor -%} | |
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 )); | |
85 {%- endif %} | |
86 {%- endfor %} | |
87 | |
88 {#--- Interface Constants #} | |
89 {%- for constant in interface.constants %} | |
90 static const {{constant.kind|dart_type}} {{constant|name}} = {{constant.resolv
ed_value}}; | |
91 {%- endfor %} | |
92 } | |
93 | |
94 abstract class {{interface|name}}Interface | |
95 implements bindings.MojoInterface<{{interface|name}}>, | |
96 {{interface|name}} { | |
97 factory {{interface|name}}Interface([{{interface|name}} impl]) => | |
98 new {{interface|name}}Stub.unbound(impl); | |
99 | |
100 factory {{interface|name}}Interface.fromEndpoint( | |
101 core.MojoMessagePipeEndpoint endpoint, | |
102 [{{interface|name}} impl]) => | |
103 new {{interface|name}}Stub.fromEndpoint(endpoint, impl); | |
104 | |
105 factory {{interface|name}}Interface.fromMock( | |
106 {{interface|name}} mock) => | |
107 new {{interface|name}}Proxy.fromMock(mock); | |
108 } | |
109 | |
110 abstract class {{interface|name}}InterfaceRequest | |
111 implements bindings.MojoInterface<{{interface|name}}>, | |
112 {{interface|name}} { | |
113 factory {{interface|name}}InterfaceRequest() => | |
114 new {{interface|name}}Proxy.unbound(); | |
115 } | |
116 | |
117 class _{{interface|name}}ProxyControl | |
118 extends bindings.ProxyMessageHandler | |
119 implements bindings.ProxyControl<{{interface|name}}> { | |
120 {{interface|name}} impl; | |
121 | |
122 _{{interface|name}}ProxyControl.fromEndpoint( | |
123 core.MojoMessagePipeEndpoint endpoint) : super.fromEndpoint(endpoint); | |
124 | |
125 _{{interface|name}}ProxyControl.fromHandle( | |
126 core.MojoHandle handle) : super.fromHandle(handle); | |
127 | |
128 _{{interface|name}}ProxyControl.unbound() : super.unbound(); | |
129 | |
130 String get serviceName => {{interface|name}}.serviceName; | |
131 | |
132 void handleResponse(bindings.ServiceMessage message) { | |
133 switch (message.header.type) { | |
134 {%- for method in interface.methods %} | |
135 {%- if method.response_parameters != None %} | |
136 {%- set response_struct = method.response_param_struct %} | |
137 case _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name: | |
138 Function callback = getCallback(message); | |
139 if (callback != null) { | |
140 var r = {{response_struct|name}}.deserialize( | |
141 message.payload); | |
142 callback( | |
143 {%- for param in method.response_parameters -%} | |
144 r.{{param|name}} {% if not loop.last %}, {% endif %} | |
145 {%- endfor -%} | |
146 ); | |
147 } | |
148 break; | |
149 {%- endif %} | |
150 {%- endfor %} | |
151 default: | |
152 proxyError("Unexpected message type: ${message.header.type}"); | |
153 close(immediate: true); | |
154 break; | |
155 } | |
156 } | |
157 | |
158 @override | |
159 String toString() { | |
160 var superString = super.toString(); | |
161 return "_{{interface|name}}ProxyControl($superString)"; | |
162 } | |
163 } | |
164 | |
165 class {{interface|name}}Proxy | |
166 extends bindings.Proxy<{{interface|name}}> | |
167 implements {{interface|name}}, | |
168 {{interface|name}}Interface, | |
169 {{interface|name}}InterfaceRequest { | |
170 {{interface|name}}Proxy.fromEndpoint( | |
171 core.MojoMessagePipeEndpoint endpoint) | |
172 : super(new _{{interface|name}}ProxyControl.fromEndpoint(endpoint)); | |
173 | |
174 {{interface|name}}Proxy.fromHandle(core.MojoHandle handle) | |
175 : super(new _{{interface|name}}ProxyControl.fromHandle(handle)); | |
176 | |
177 {{interface|name}}Proxy.unbound() | |
178 : super(new _{{interface|name}}ProxyControl.unbound()); | |
179 | |
180 factory {{interface|name}}Proxy.fromMock({{interface|name}} mock) { | |
181 {{interface|name}}Proxy newMockedProxy = | |
182 new {{interface|name}}Proxy.unbound(); | |
183 newMockedProxy.impl = mock; | |
184 return newMockedProxy; | |
185 } | |
186 | |
187 static {{interface|name}}Proxy newFromEndpoint( | |
188 core.MojoMessagePipeEndpoint endpoint) { | |
189 assert(endpoint.setDescription("For {{interface|name}}Proxy")); | |
190 return new {{interface|name}}Proxy.fromEndpoint(endpoint); | |
191 } | |
192 | |
193 {% for method in interface.methods %} | |
194 {%- if method.response_parameters == None %} | |
195 void {{method|name}}( | |
196 {%- for parameter in method.parameters -%} | |
197 {{parameter.kind|dart_type}} {{parameter|name}}{% if not loop.last %}, {% en
dif %} | |
198 {%- endfor -%} | |
199 {%- set request_struct = method.param_struct -%} | |
200 ) { | |
201 if (impl != null) { | |
202 impl.{{method|name}}( | |
203 {%- for parameter in method.parameters -%} | |
204 {{parameter|name}}{% if not loop.last %}, {% endif %} | |
205 {%- endfor -%} | |
206 ); | |
207 return; | |
208 } | |
209 if (!ctrl.isBound) { | |
210 ctrl.proxyError("The Proxy is closed."); | |
211 return; | |
212 } | |
213 var params = new {{request_struct|name}}(); | |
214 {%- for parameter in method.parameters %} | |
215 params.{{parameter|name}} = {{parameter|name}}; | |
216 {%- endfor %} | |
217 ctrl.sendMessage(params, | |
218 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name); | |
219 } | |
220 {%- else %} | |
221 {%- set request_struct = method.param_struct %} | |
222 {%- set response_struct = method.response_param_struct %} | |
223 void {{method|name}}( | |
224 {%- for parameter in method.parameters -%} | |
225 {{parameter.kind|dart_type}} {{parameter|name}}, | |
226 {%- endfor -%} | |
227 void callback( | |
228 {%- for param in method.response_parameters -%} | |
229 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif
%} | |
230 {%- endfor -%} | |
231 )) { | |
232 if (impl != null) { | |
233 impl.{{method|name}}( | |
234 {%- for parameter in method.parameters -%} | |
235 {{parameter|name}}, | |
236 {%- endfor -%} | |
237 callback ?? bindings.DoNothingFunction.fn); | |
238 return; | |
239 } | |
240 var params = new {{request_struct|name}}(); | |
241 {%- for parameter in method.parameters %} | |
242 params.{{parameter|name}} = {{parameter|name}}; | |
243 {%- endfor %} | |
244 Function zonedCallback; | |
245 if ((callback == null) || identical(Zone.current, Zone.ROOT)) { | |
246 zonedCallback = callback; | |
247 } else { | |
248 Zone z = Zone.current; | |
249 zonedCallback = (( | |
250 {%- for param in method.response_parameters -%} | |
251 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif
%} | |
252 {%- endfor -%} | |
253 ) { | |
254 z.bindCallback(() { | |
255 callback( | |
256 {%- for param in method.response_parameters -%} | |
257 {{param|name}}{% if not loop.last %}, {% endif %} | |
258 {%- endfor -%} | |
259 ); | |
260 })(); | |
261 }); | |
262 } | |
263 ctrl.sendMessageWithRequestId( | |
264 params, | |
265 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name, | |
266 -1, | |
267 bindings.MessageHeader.kMessageExpectsResponse, | |
268 zonedCallback); | |
269 } | |
270 {%- endif %} | |
271 {%- endfor %} | |
272 } | |
273 | |
274 class _{{interface|name}}StubControl | |
275 extends bindings.StubMessageHandler | |
276 implements bindings.StubControl<{{interface|name}}> { | |
277 {{interface|name}} _impl; | |
278 | |
279 _{{interface|name}}StubControl.fromEndpoint( | |
280 core.MojoMessagePipeEndpoint endpoint, [{{interface|name}} impl]) | |
281 : super.fromEndpoint(endpoint, autoBegin: impl != null) { | |
282 _impl = impl; | |
283 } | |
284 | |
285 _{{interface|name}}StubControl.fromHandle( | |
286 core.MojoHandle handle, [{{interface|name}} impl]) | |
287 : super.fromHandle(handle, autoBegin: impl != null) { | |
288 _impl = impl; | |
289 } | |
290 | |
291 _{{interface|name}}StubControl.unbound([this._impl]) : super.unbound(); | |
292 | |
293 String get serviceName => {{interface|name}}.serviceName; | |
294 | |
295 {% for method in interface.methods %} | |
296 {%- if method.response_parameters != None %} | |
297 {%- set response_struct = method.response_param_struct %} | |
298 Function _{{response_struct|name|lower_camel}}Responder( | |
299 int requestId) { | |
300 return ( | |
301 {%- for param in method.response_parameters -%} | |
302 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif
%} | |
303 {%- endfor -%} | |
304 ) { | |
305 var result = new {{response_struct|name}}(); | |
306 {%- for param in method.response_parameters %} | |
307 result.{{param|name}} = {{param|name}}; | |
308 {%- endfor %} | |
309 sendResponse(buildResponseWithId( | |
310 result, | |
311 _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name, | |
312 requestId, | |
313 bindings.MessageHeader.kMessageIsResponse)); | |
314 }; | |
315 } | |
316 {%- endif %} | |
317 {%- endfor %} | |
318 | |
319 void handleMessage(bindings.ServiceMessage message) { | |
320 if (bindings.ControlMessageHandler.isControlMessage(message)) { | |
321 bindings.ControlMessageHandler.handleMessage( | |
322 this, {{interface.version}}, message); | |
323 return; | |
324 } | |
325 if (_impl == null) { | |
326 throw new core.MojoApiError("$this has no implementation set"); | |
327 } | |
328 switch (message.header.type) { | |
329 {%- for method in interface.methods %} | |
330 {%- set request_struct = method.param_struct %} | |
331 case _{{interface|name|lower_camel}}Method{{method|name|upper_camel}}Name: | |
332 {%- if method.parameters %} | |
333 var params = {{request_struct|name}}.deserialize( | |
334 message.payload); | |
335 {%- endif %} | |
336 {%- if method.response_parameters == None %} | |
337 _impl.{{method|name}}( | |
338 {%- for parameter in method.parameters -%} | |
339 params.{{parameter|name}}{% if not loop.last %}, {% endif %} | |
340 {%- endfor -%} | |
341 ); | |
342 {%- else %} | |
343 {%- set response_struct = method.response_param_struct %} | |
344 _impl.{{method|name}}( | |
345 {%- for parameter in method.parameters -%} | |
346 params.{{parameter|name}}, {% endfor -%} | |
347 _{{response_struct|name|lower_camel}}Responder(message.header.requestI
d)); | |
348 {%- endif %} | |
349 break; | |
350 {%- endfor %} | |
351 default: | |
352 throw new bindings.MojoCodecError("Unexpected message name"); | |
353 break; | |
354 } | |
355 } | |
356 | |
357 {{interface|name}} get impl => _impl; | |
358 set impl({{interface|name}} d) { | |
359 if (d == null) { | |
360 throw new core.MojoApiError("$this: Cannot set a null implementation"); | |
361 } | |
362 if (isBound && (_impl == null)) { | |
363 beginHandlingEvents(); | |
364 } | |
365 _impl = d; | |
366 } | |
367 | |
368 @override | |
369 void bind(core.MojoMessagePipeEndpoint endpoint) { | |
370 super.bind(endpoint); | |
371 if (!isOpen && (_impl != null)) { | |
372 beginHandlingEvents(); | |
373 } | |
374 } | |
375 | |
376 @override | |
377 String toString() { | |
378 var superString = super.toString(); | |
379 return "_{{interface|name}}StubControl($superString)"; | |
380 } | |
381 | |
382 int get version => {{interface.version}}; | |
383 } | |
384 | |
385 class {{interface|name}}Stub | |
386 extends bindings.Stub<{{interface|name}}> | |
387 implements {{interface|name}}, | |
388 {{interface|name}}Interface, | |
389 {{interface|name}}InterfaceRequest { | |
390 {{interface|name}}Stub.unbound([{{interface|name}} impl]) | |
391 : super(new _{{interface|name}}StubControl.unbound(impl)); | |
392 | |
393 {{interface|name}}Stub.fromEndpoint( | |
394 core.MojoMessagePipeEndpoint endpoint, [{{interface|name}} impl]) | |
395 : super(new _{{interface|name}}StubControl.fromEndpoint(endpoint, impl)); | |
396 | |
397 {{interface|name}}Stub.fromHandle( | |
398 core.MojoHandle handle, [{{interface|name}} impl]) | |
399 : super(new _{{interface|name}}StubControl.fromHandle(handle, impl)); | |
400 | |
401 static {{interface|name}}Stub newFromEndpoint( | |
402 core.MojoMessagePipeEndpoint endpoint) { | |
403 assert(endpoint.setDescription("For {{interface|name}}Stub")); | |
404 return new {{interface|name}}Stub.fromEndpoint(endpoint); | |
405 } | |
406 | |
407 {% for method in interface.methods %} | |
408 {%- if method.response_parameters == None %} | |
409 void {{method|name}}( | |
410 {%- for parameter in method.parameters -%} | |
411 {{parameter.kind|dart_type}} {{parameter|name}}{% if not loop.last %}, {% en
dif %} | |
412 {%- endfor -%} | |
413 ) { | |
414 return impl.{{method|name}}( | |
415 {%- for parameter in method.parameters -%} | |
416 {{parameter|name}}{% if not loop.last %}, {% endif %} | |
417 {%- endfor -%} | |
418 ); | |
419 } | |
420 {%- else %} | |
421 void {{method|name}}( | |
422 {%- for parameter in method.parameters -%} | |
423 {{parameter.kind|dart_type}} {{parameter|name}}, | |
424 {%- endfor -%} | |
425 void callback( | |
426 {%- for param in method.response_parameters -%} | |
427 {{param.kind|dart_type}} {{param|name}}{% if not loop.last %}, {% endif
%} | |
428 {%- endfor -%} | |
429 )) { | |
430 return impl.{{method|name}}( | |
431 {%- for parameter in method.parameters -%} | |
432 {{parameter|name}}, | |
433 {%- endfor -%} | |
434 callback); | |
435 } | |
436 {%- endif %} | |
437 {%- endfor %} | |
438 } | |
OLD | NEW |