THRIFT-4131: js / WebSocket / fix handling oneway methods
Client: js
Patch: Martin Hejnfelt <mh@newtec.dk>
This closes #1372
diff --git a/compiler/cpp/src/thrift/generate/t_js_generator.cc b/compiler/cpp/src/thrift/generate/t_js_generator.cc
index 10b0ee1..c146da7 100644
--- a/compiler/cpp/src/thrift/generate/t_js_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_js_generator.cc
@@ -1510,16 +1510,20 @@
f_service_ << indent() << "return this.output.getTransport().flush(callback);" << endl;
} else {
f_service_ << indent() << "if (callback) {" << endl;
- f_service_ << indent() << " var self = this;" << endl;
- f_service_ << indent() << " this.output.getTransport().flush(true, function() {" << endl;
- f_service_ << indent() << " var result = null;" << endl;
- f_service_ << indent() << " try {" << endl;
- f_service_ << indent() << " result = self.recv_" << funname << "();" << endl;
- f_service_ << indent() << " } catch (e) {" << endl;
- f_service_ << indent() << " result = e;" << endl;
- f_service_ << indent() << " }" << endl;
- f_service_ << indent() << " callback(result);" << endl;
- f_service_ << indent() << " });" << endl;
+ if((*f_iter)->is_oneway()) {
+ f_service_ << indent() << " this.output.getTransport().flush(true, null);" << endl;
+ } else {
+ f_service_ << indent() << " var self = this;" << endl;
+ f_service_ << indent() << " this.output.getTransport().flush(true, function() {" << endl;
+ f_service_ << indent() << " var result = null;" << endl;
+ f_service_ << indent() << " try {" << endl;
+ f_service_ << indent() << " result = self.recv_" << funname << "();" << endl;
+ f_service_ << indent() << " } catch (e) {" << endl;
+ f_service_ << indent() << " result = e;" << endl;
+ f_service_ << indent() << " }" << endl;
+ f_service_ << indent() << " callback(result);" << endl;
+ f_service_ << indent() << " });" << endl;
+ }
f_service_ << indent() << "} else {" << endl;
f_service_ << indent() << " return this.output.getTransport().flush();" << endl;
f_service_ << indent() << "}" << endl;
diff --git a/lib/js/src/thrift.js b/lib/js/src/thrift.js
index 37ba690..ab85e9d 100644
--- a/lib/js/src/thrift.js
+++ b/lib/js/src/thrift.js
@@ -575,6 +575,15 @@
clientCallback();
};
}()));
+ if(callback) {
+ this.callbacks.push((function() {
+ var clientCallback = callback;
+ return function(msg) {
+ self.setRecvBuffer(msg);
+ clientCallback();
+ };
+ }()));
+ }
} else {
//Queue the send to go out __onOpen
this.send_pending.push({