• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1{%- set namespace_as_string = namespace|replace(".","::") %}
2{%- for method in interface.methods %}
3  var k{{interface.name}}_{{method.name}}_Name = {{method.ordinal}};
4{%- endfor %}
5
6  function {{interface.name}}Proxy(receiver) {
7    this.receiver_ = receiver;
8  }
9
10  {{interface.name}}Proxy.NAME_ = '{{namespace_as_string}}::{{interface.name}}';
11
12{%- for method in interface.methods %}
13  {{interface.name}}Proxy.prototype.{{method.name|stylize_method}} = function(
14{%- for parameter in method.parameters -%}
15{{parameter.name}}{% if not loop.last %}, {% endif %}
16{%- endfor -%}
17) {
18    var params = new {{interface.name}}_{{method.name}}_Params();
19{%- for parameter in method.parameters %}
20    params.{{parameter.name}} = {{parameter.name}};
21{%- endfor %}
22
23{%- if method.response_parameters == None %}
24    var builder = new codec.MessageBuilder(
25        k{{interface.name}}_{{method.name}}_Name,
26        codec.align({{interface.name}}_{{method.name}}_Params.encodedSize));
27    builder.encodeStruct({{interface.name}}_{{method.name}}_Params, params);
28    var message = builder.finish();
29    this.receiver_.accept(message);
30{%- else %}
31    return new Promise(function(resolve, reject) {
32      var builder = new codec.MessageWithRequestIDBuilder(
33          k{{interface.name}}_{{method.name}}_Name,
34          codec.align({{interface.name}}_{{method.name}}_Params.encodedSize),
35          codec.kMessageExpectsResponse, 0);
36      builder.encodeStruct({{interface.name}}_{{method.name}}_Params, params);
37      var message = builder.finish();
38      this.receiver_.acceptWithResponder(message, {
39          accept: function(message) {
40            var reader = new codec.MessageReader(message);
41            var responseParams =
42                reader.decodeStruct({{interface.name}}_{{method.name}}_ResponseParams);
43            resolve(responseParams);
44          },
45          reject: function(result) {
46            reject(Error("Connection error: " + result));
47          },
48      }).catch(reject);
49    }.bind(this));
50{%- endif %}
51  };
52{%- endfor %}
53
54  function {{interface.name}}Stub() {
55  }
56
57  {{interface.name}}Stub.NAME_ = '{{namespace_as_string}}::{{interface.name}}';
58
59  {{interface.name}}Stub.prototype.accept = function(message) {
60    var reader = new codec.MessageReader(message);
61    switch (reader.messageName) {
62{%- for method in interface.methods %}
63{%- if method.response_parameters == None %}
64    case k{{interface.name}}_{{method.name}}_Name:
65      var params = reader.decodeStruct({{interface.name}}_{{method.name}}_Params);
66      this.{{method.name|stylize_method}}(
67{%- for parameter in method.parameters -%}
68params.{{parameter.name}}{% if not loop.last %}, {% endif %}
69{%- endfor %});
70      return true;
71{%- endif %}
72{%- endfor %}
73    default:
74      return false;
75    }
76  };
77
78  {{interface.name}}Stub.prototype.acceptWithResponder =
79      function(message, responder) {
80    var reader = new codec.MessageReader(message);
81    switch (reader.messageName) {
82{%- for method in interface.methods %}
83{%- if method.response_parameters != None %}
84    case k{{interface.name}}_{{method.name}}_Name:
85      var params = reader.decodeStruct({{interface.name}}_{{method.name}}_Params);
86      return this.{{method.name|stylize_method}}(
87{%- for parameter in method.parameters -%}
88params.{{parameter.name}}{% if not loop.last %}, {% endif -%}
89{%- endfor %}).then(function(response) {
90        var responseParams =
91            new {{interface.name}}_{{method.name}}_ResponseParams();
92{%-     for parameter in method.response_parameters %}
93        responseParams.{{parameter.name}} = response.{{parameter.name}};
94{%-     endfor %}
95        var builder = new codec.MessageWithRequestIDBuilder(
96            k{{interface.name}}_{{method.name}}_Name,
97            codec.align({{interface.name}}_{{method.name}}_ResponseParams.encodedSize),
98            codec.kMessageIsResponse, reader.requestID);
99        builder.encodeStruct({{interface.name}}_{{method.name}}_ResponseParams,
100                             responseParams);
101        var message = builder.finish();
102        responder.accept(message);
103      });
104{%- endif %}
105{%- endfor %}
106    default:
107      return Promise.reject(Error("Unhandled message: " + reader.messageName));
108    }
109  };
110
111{#--- Validation #}
112
113  function validate{{interface.name}}Request(messageValidator) {
114{%- if not(interface.methods) %}
115    return validator.validationError.NONE;
116{%- else %}
117    var message = messageValidator.message;
118    var paramsClass = null;
119    switch (message.getName()) {
120{%-   for method in interface.methods %}
121      case k{{interface.name}}_{{method.name}}_Name:
122{%-     if method.response_parameters == None %}
123        if (!message.expectsResponse() && !message.isResponse())
124          paramsClass = {{interface.name}}_{{method.name}}_Params;
125{%-     else %}
126        if (message.expectsResponse())
127          paramsClass = {{interface.name}}_{{method.name}}_Params;
128{%-     endif %}
129      break;
130{%-   endfor %}
131    }
132    if (paramsClass === null)
133      return validator.validationError.NONE;
134    return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
135{%- endif %}
136  }
137
138  function validate{{interface.name}}Response(messageValidator) {
139{%- if not(interface|has_callbacks) %}
140    return validator.validationError.NONE;
141{%- else %}
142   var message = messageValidator.message;
143   var paramsClass = null;
144   switch (message.getName()) {
145{%-   for method in interface.methods %}
146{%-     if method.response_parameters != None %}
147      case k{{interface.name}}_{{method.name}}_Name:
148        if (message.isResponse())
149          paramsClass = {{interface.name}}_{{method.name}}_ResponseParams;
150        break;
151{%-     endif %}
152{%-   endfor %}
153    }
154    if (paramsClass === null)
155      return validator.validationError.NONE;
156    return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
157{%- endif %}
158  }
159
160  {{interface.name}}Stub.prototype.validator = validate{{interface.name}}Request;
161{%- if interface|has_callbacks %}
162  {{interface.name}}Proxy.prototype.validator = validate{{interface.name}}Response;
163{%- else %}
164  {{interface.name}}Proxy.prototype.validator = null;
165{%- endif -%}
166
167{#--- Enums #}
168{%  from "enum_definition.tmpl" import enum_def -%}
169{%  for enum in interface.enums %}
170  {{enum_def("%sProxy.%s"|format(interface.name, enum.name), enum, module)}}
171  {{interface.name}}Stub.{{enum.name}} = {{interface.name}}Proxy.{{enum.name}};
172{%-  endfor %}
173
174{#--- Constants. #}
175{%  for constant in interface.constants %}
176  {{interface.name}}Proxy.{{constant.name}} = {{constant.value|expression_to_text}};
177  {{interface.name}}Stub.{{constant.name}} = {{interface.name}}Proxy.{{constant.name}};
178{%-  endfor %}
179