Show More
@@ -41,6 +41,7 define([ | |||||
41 | this.username = "username"; |
|
41 | this.username = "username"; | |
42 | this.session_id = utils.uuid(); |
|
42 | this.session_id = utils.uuid(); | |
43 | this._msg_callbacks = {}; |
|
43 | this._msg_callbacks = {}; | |
|
44 | this._msg_queue = Promise.resolve(); | |||
44 | this.info_reply = {}; // kernel_info_reply stored here after starting |
|
45 | this.info_reply = {}; // kernel_info_reply stored here after starting | |
45 |
|
46 | |||
46 | if (typeof(WebSocket) !== 'undefined') { |
|
47 | if (typeof(WebSocket) !== 'undefined') { | |
@@ -854,7 +855,10 define([ | |||||
854 | }; |
|
855 | }; | |
855 |
|
856 | |||
856 | Kernel.prototype._handle_ws_message = function (e) { |
|
857 | Kernel.prototype._handle_ws_message = function (e) { | |
857 | serialize.deserialize(e.data, $.proxy(this._finish_ws_message, this)); |
|
858 | this._msg_queue = this._msg_queue.then(function() { | |
|
859 | return serialize.deserialize(e.data); | |||
|
860 | }).then($.proxy(this._finish_ws_message, this)) | |||
|
861 | .catch(utils.reject("Couldn't process kernel message", true)); | |||
858 | }; |
|
862 | }; | |
859 |
|
863 | |||
860 | Kernel.prototype._finish_ws_message = function (msg) { |
|
864 | Kernel.prototype._finish_ws_message = function (msg) { |
@@ -30,7 +30,7 define([ | |||||
30 | return msg; |
|
30 | return msg; | |
31 | }; |
|
31 | }; | |
32 |
|
32 | |||
33 |
var _deserialize_binary = function(data |
|
33 | var _deserialize_binary = function(data) { | |
34 | /** |
|
34 | /** | |
35 | * deserialize the binary message format |
|
35 | * deserialize the binary message format | |
36 | * callback will be called with a message whose buffers attribute |
|
36 | * callback will be called with a message whose buffers attribute | |
@@ -39,28 +39,31 define([ | |||||
39 | if (data instanceof Blob) { |
|
39 | if (data instanceof Blob) { | |
40 | // data is Blob, have to deserialize from ArrayBuffer in reader callback |
|
40 | // data is Blob, have to deserialize from ArrayBuffer in reader callback | |
41 | var reader = new FileReader(); |
|
41 | var reader = new FileReader(); | |
42 | reader.onload = function () { |
|
42 | var promise = new Promise(function(resolve, reject) { | |
43 | var msg = _deserialize_array_buffer(this.result); |
|
43 | reader.onload = function () { | |
44 | callback(msg); |
|
44 | var msg = _deserialize_array_buffer(this.result); | |
45 | }; |
|
45 | resolve(msg); | |
|
46 | }; | |||
|
47 | }); | |||
46 | reader.readAsArrayBuffer(data); |
|
48 | reader.readAsArrayBuffer(data); | |
|
49 | return promise; | |||
47 | } else { |
|
50 | } else { | |
48 | // data is ArrayBuffer, can deserialize directly |
|
51 | // data is ArrayBuffer, can deserialize directly | |
49 | var msg = _deserialize_array_buffer(data); |
|
52 | var msg = _deserialize_array_buffer(data); | |
50 |
|
|
53 | return msg; | |
51 | } |
|
54 | } | |
52 | }; |
|
55 | }; | |
53 |
|
56 | |||
54 |
var deserialize = function (data |
|
57 | var deserialize = function (data) { | |
55 | /** |
|
58 | /** | |
56 |
* deserialize a message and |
|
59 | * deserialize a message and return a promise for the unpacked message | |
57 | */ |
|
60 | */ | |
58 | if (typeof data === "string") { |
|
61 | if (typeof data === "string") { | |
59 | // text JSON message |
|
62 | // text JSON message | |
60 |
|
|
63 | return Promise.resolve(JSON.parse(data)); | |
61 | } else { |
|
64 | } else { | |
62 | // binary message |
|
65 | // binary message | |
63 |
_deserialize_binary(data |
|
66 | return Promise.resolve(_deserialize_binary(data)); | |
64 | } |
|
67 | } | |
65 | }; |
|
68 | }; | |
66 |
|
69 | |||
@@ -117,4 +120,4 define([ | |||||
117 | serialize: serialize |
|
120 | serialize: serialize | |
118 | }; |
|
121 | }; | |
119 | return exports; |
|
122 | return exports; | |
120 | }); No newline at end of file |
|
123 | }); |
General Comments 0
You need to be logged in to leave comments.
Login now