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