OLD | NEW |
| (Empty) |
1 {% from "constant_definition.tmpl" import constant_def %} | |
2 {% from "enum_definition.tmpl" import enum_def %} | |
3 {% from "data_types_definition.tmpl" import struct_def %} | |
4 | |
5 {%- macro declare_params(parameters, boxed=false) %} | |
6 {%- for param in parameters -%} | |
7 {{param.kind|java_type(boxed)}} {{param|name}} | |
8 {%- if not loop.last %}, {% endif %} | |
9 {%- endfor %} | |
10 {%- endmacro %} | |
11 | |
12 {% macro declare_request_params(method) %} | |
13 {{declare_params(method.parameters)}} | |
14 {%- if method.response_parameters != None -%} | |
15 {%- if method.parameters %}, {% endif %} | |
16 {{method|interface_response_name}} callback | |
17 {%- endif -%} | |
18 {% endmacro %} | |
19 | |
20 {%- macro declare_callback(method) -%} | |
21 | |
22 interface {{method|interface_response_name}} extends org.chromium.mojo.bindings.
Callbacks.Callback{{method.response_parameters|length}}{% if method.response_par
ameters %}< | |
23 {%- for param in method.response_parameters -%} | |
24 {{param.kind|java_type(True)}} | |
25 {%- if not loop.last %}, {% endif %} | |
26 {%- endfor -%} | |
27 >{% endif %} { } | |
28 {%- endmacro -%} | |
29 | |
30 {%- macro run_callback(variable, parameters) -%} | |
31 {%- if parameters -%} | |
32 {%- for param in parameters -%} | |
33 {{variable}}.{{param|name}} | |
34 {%- if not loop.last %}, {% endif %} | |
35 {%- endfor -%} | |
36 {%- endif -%} | |
37 {%- endmacro -%} | |
38 | |
39 {%- macro flags_for_method(method, is_request) -%} | |
40 {{flags(method.response_parameters != None, is_request)}} | |
41 {%- endmacro -%} | |
42 | |
43 {%- macro flags(use_response_flag, is_request) -%} | |
44 {%- if not use_response_flag -%} | |
45 org.chromium.mojo.bindings.MessageHeader.NO_FLAG | |
46 {%- elif is_request: -%} | |
47 org.chromium.mojo.bindings.MessageHeader.MESSAGE_EXPECTS_RESPONSE_FLAG | |
48 {%- else -%} | |
49 org.chromium.mojo.bindings.MessageHeader.MESSAGE_IS_RESPONSE_FLAG | |
50 {%- endif -%} | |
51 {%- endmacro -%} | |
52 | |
53 {%- macro manager_class(interface, fully_qualified=False) -%} | |
54 {% if fully_qualified %}org.chromium.mojo.bindings.Interface.{% endif %}{% if in
terface.service_name %}Named{% endif %}Manager<{{interface|name}}, {{interface|n
ame}}.Proxy> | |
55 {%- endmacro -%} | |
56 | |
57 {%- macro manager_def(interface) -%} | |
58 public static final {{manager_class(interface, True)}} MANAGER = | |
59 new {{manager_class(interface, True)}}() { | |
60 {% if interface.service_name %} | |
61 | |
62 public String getName() { | |
63 return "{{interface.service_name}}"; | |
64 } | |
65 {% endif %} | |
66 | |
67 public int getVersion() { | |
68 return {{interface.version}}; | |
69 } | |
70 | |
71 public Proxy buildProxy(org.chromium.mojo.system.Core core, | |
72 org.chromium.mojo.bindings.MessageReceiverWithRespon
der messageReceiver) { | |
73 return new Proxy(core, messageReceiver); | |
74 } | |
75 | |
76 public Stub buildStub(org.chromium.mojo.system.Core core, {{interface|name}}
impl) { | |
77 return new Stub(core, impl); | |
78 } | |
79 | |
80 public {{interface|name}}[] buildArray(int size) { | |
81 return new {{interface|name}}[size]; | |
82 } | |
83 }; | |
84 {%- endmacro -%} | |
85 | |
86 {%- macro accept_body(interface, with_response) -%} | |
87 try { | |
88 org.chromium.mojo.bindings.ServiceMessage messageWithHeader = | |
89 message.asServiceMessage(); | |
90 org.chromium.mojo.bindings.MessageHeader header = messageWithHeader.getHeade
r(); | |
91 if (!header.validateHeader({{flags(with_response, True)}})) { | |
92 return false; | |
93 } | |
94 switch(header.getType()) { | |
95 {% if with_response %} | |
96 case org.chromium.mojo.bindings.InterfaceControlMessagesConstants.RUN_ME
SSAGE_ID: | |
97 return org.chromium.mojo.bindings.InterfaceControlMessagesHelper.han
dleRun( | |
98 getCore(), {{interface|name}}_Internal.MANAGER, messageWithH
eader, receiver); | |
99 {% else %} | |
100 case org.chromium.mojo.bindings.InterfaceControlMessagesConstants.RUN_OR
_CLOSE_PIPE_MESSAGE_ID: | |
101 return org.chromium.mojo.bindings.InterfaceControlMessagesHelper.han
dleRunOrClosePipe( | |
102 {{interface|name}}_Internal.MANAGER, messageWithHeader); | |
103 {% endif %} | |
104 {% for method in interface.methods %} | |
105 {% if (with_response and method.response_parameters != None) or | |
106 (not with_response and method.response_parameters == None) %} | |
107 {% set request_struct = method.param_struct %} | |
108 {% if with_response %} | |
109 {% set response_struct = method.response_param_struct %} | |
110 {% endif %} | |
111 case {{method|method_ordinal_name}}: { | |
112 {% if method.parameters %} | |
113 {{request_struct|name}} data = | |
114 {{request_struct|name}}.deserialize(messageWithHeader.getPay
load()); | |
115 {% else %} | |
116 {{request_struct|name}}.deserialize(messageWithHeader.getPayload()); | |
117 {% endif %} | |
118 getImpl().{{method|name}}({{run_callback('data', method.parameters)}
}{% if with_response %}{% if method.parameters %}, {% endif %}new {{response_str
uct|name}}ProxyToResponder(getCore(), receiver, header.getRequestId()){% endif %
}); | |
119 return true; | |
120 } | |
121 {% endif %} | |
122 {% endfor %} | |
123 default: | |
124 return false; | |
125 } | |
126 } catch (org.chromium.mojo.bindings.DeserializationException e) { | |
127 System.err.println(e.toString()); | |
128 return false; | |
129 } | |
130 {%- endmacro -%} | |
131 | |
132 {% macro interface_def(interface) %} | |
133 public interface {{interface|name}} extends org.chromium.mojo.bindings.Interface
{ | |
134 {% for constant in interface.constants %} | |
135 | |
136 {{constant_def(constant)|indent(4)}} | |
137 {% endfor %} | |
138 {% for enum in interface.enums %} | |
139 | |
140 {{enum_def(enum, false)|indent(4)}} | |
141 {% endfor %} | |
142 | |
143 public interface Proxy extends {{interface|name}}, org.chromium.mojo.binding
s.Interface.Proxy { | |
144 } | |
145 | |
146 {{manager_class(interface)}} MANAGER = {{interface|name}}_Internal.MANAGER; | |
147 {% for method in interface.methods %} | |
148 | |
149 void {{method|name}}({{declare_request_params(method)}}); | |
150 {% if method.response_parameters != None %} | |
151 {{declare_callback(method)|indent(4)}} | |
152 {% endif %} | |
153 {% endfor %} | |
154 } | |
155 {% endmacro %} | |
156 | |
157 {% macro interface_internal_def(interface) %} | |
158 class {{interface|name}}_Internal { | |
159 | |
160 {{manager_def(interface)|indent(4)}} | |
161 | |
162 {% for method in interface.methods %} | |
163 private static final int {{method|method_ordinal_name}} = {{method.ordinal}}
; | |
164 {% endfor %} | |
165 | |
166 static final class Proxy extends org.chromium.mojo.bindings.Interface.Abstra
ctProxy implements {{interface|name}}.Proxy { | |
167 | |
168 Proxy(org.chromium.mojo.system.Core core, | |
169 org.chromium.mojo.bindings.MessageReceiverWithResponder messageRec
eiver) { | |
170 super(core, messageReceiver); | |
171 } | |
172 {% for method in interface.methods %} | |
173 | |
174 @Override | |
175 public void {{method|name}}({{declare_request_params(method)}}) { | |
176 {% set request_struct = method.param_struct %} | |
177 {{request_struct|name}} _message = new {{request_struct|name}}(); | |
178 {% for param in method.parameters %} | |
179 _message.{{param|name}} = {{param|name}}; | |
180 {% endfor %} | |
181 {% if method.response_parameters != None %} | |
182 getProxyHandler().getMessageReceiver().acceptWithResponder( | |
183 _message.serializeWithHeader( | |
184 getProxyHandler().getCore(), | |
185 new org.chromium.mojo.bindings.MessageHeader( | |
186 {{method|method_ordinal_name}}, | |
187 {{flags_for_method(method, True)}}, | |
188 0)), | |
189 new {{method.response_param_struct|name}}ForwardToCallback(c
allback)); | |
190 {% else %} | |
191 getProxyHandler().getMessageReceiver().accept( | |
192 _message.serializeWithHeader( | |
193 getProxyHandler().getCore(), | |
194 new org.chromium.mojo.bindings.MessageHeader({{metho
d|method_ordinal_name}}))); | |
195 {% endif %} | |
196 } | |
197 {% endfor %} | |
198 | |
199 } | |
200 | |
201 static final class Stub extends org.chromium.mojo.bindings.Interface.Stub<{{
interface|name}}> { | |
202 | |
203 Stub(org.chromium.mojo.system.Core core, {{interface|name}} impl) { | |
204 super(core, impl); | |
205 } | |
206 | |
207 @Override | |
208 public boolean accept(org.chromium.mojo.bindings.Message message) { | |
209 {{accept_body(interface, False)|indent(12)}} | |
210 } | |
211 | |
212 @Override | |
213 public boolean acceptWithResponder(org.chromium.mojo.bindings.Message me
ssage, org.chromium.mojo.bindings.MessageReceiver receiver) { | |
214 {{accept_body(interface, True)|indent(12)}} | |
215 } | |
216 } | |
217 {% for method in interface.methods %} | |
218 | |
219 {{ struct_def(method.param_struct, True)|indent(4) }} | |
220 {% if method.response_parameters != None %} | |
221 {% set response_struct = method.response_param_struct %} | |
222 | |
223 {{ struct_def(response_struct, True)|indent(4) }} | |
224 | |
225 static class {{response_struct|name}}ForwardToCallback extends org.chromium.
mojo.bindings.SideEffectFreeCloseable | |
226 implements org.chromium.mojo.bindings.MessageReceiver { | |
227 private final {{interface|name}}.{{method|interface_response_name}} mCal
lback; | |
228 | |
229 {{response_struct|name}}ForwardToCallback({{interface|name}}.{{method|in
terface_response_name}} callback) { | |
230 this.mCallback = callback; | |
231 } | |
232 | |
233 @Override | |
234 public boolean accept(org.chromium.mojo.bindings.Message message) { | |
235 try { | |
236 org.chromium.mojo.bindings.ServiceMessage messageWithHeader = | |
237 message.asServiceMessage(); | |
238 org.chromium.mojo.bindings.MessageHeader header = messageWithHea
der.getHeader(); | |
239 if (!header.validateHeader({{method|method_ordinal_name}}, | |
240 {{flags_for_method(method, False)}}))
{ | |
241 return false; | |
242 } | |
243 {% if method.response_parameters|length %} | |
244 {{response_struct|name}} response = {{response_struct|name}}.des
erialize(messageWithHeader.getPayload()); | |
245 {% endif %} | |
246 mCallback.call({{run_callback('response', method.response_parame
ters)}}); | |
247 return true; | |
248 } catch (org.chromium.mojo.bindings.DeserializationException e) { | |
249 return false; | |
250 } | |
251 } | |
252 } | |
253 | |
254 static class {{response_struct|name}}ProxyToResponder implements {{interface
|name}}.{{method|interface_response_name}} { | |
255 | |
256 private final org.chromium.mojo.system.Core mCore; | |
257 private final org.chromium.mojo.bindings.MessageReceiver mMessageReceive
r; | |
258 private final long mRequestId; | |
259 | |
260 {{response_struct|name}}ProxyToResponder( | |
261 org.chromium.mojo.system.Core core, | |
262 org.chromium.mojo.bindings.MessageReceiver messageReceiver, | |
263 long requestId) { | |
264 mCore = core; | |
265 mMessageReceiver = messageReceiver; | |
266 mRequestId = requestId; | |
267 } | |
268 | |
269 @Override | |
270 public void call({{declare_params(method.response_parameters, true)}}) { | |
271 {{response_struct|name}} _response = new {{response_struct|name}}(); | |
272 {% for param in method.response_parameters %} | |
273 _response.{{param|name}} = {{param|name}}; | |
274 {% endfor %} | |
275 org.chromium.mojo.bindings.ServiceMessage _message = | |
276 _response.serializeWithHeader( | |
277 mCore, | |
278 new org.chromium.mojo.bindings.MessageHeader( | |
279 {{method|method_ordinal_name}}, | |
280 {{flags_for_method(method, False)}}, | |
281 mRequestId)); | |
282 mMessageReceiver.accept(_message); | |
283 } | |
284 } | |
285 {% endif %} | |
286 {% endfor %} | |
287 | |
288 } | |
289 {% endmacro %} | |
OLD | NEW |