Show More
@@ -41,6 +41,7 b' define([' | |||
|
41 | 41 | this.username = "username"; |
|
42 | 42 | this.session_id = utils.uuid(); |
|
43 | 43 | this._msg_callbacks = {}; |
|
44 | this._msg_queue = Promise.resolve(); | |
|
44 | 45 | this.info_reply = {}; // kernel_info_reply stored here after starting |
|
45 | 46 | |
|
46 | 47 | if (typeof(WebSocket) !== 'undefined') { |
@@ -854,7 +855,10 b' define([' | |||
|
854 | 855 | }; |
|
855 | 856 | |
|
856 | 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 | 864 | Kernel.prototype._finish_ws_message = function (msg) { |
@@ -30,7 +30,7 b' define([' | |||
|
30 | 30 | return msg; |
|
31 | 31 | }; |
|
32 | 32 | |
|
33 |
var _deserialize_binary = function(data |
|
|
33 | var _deserialize_binary = function(data) { | |
|
34 | 34 | /** |
|
35 | 35 | * deserialize the binary message format |
|
36 | 36 | * callback will be called with a message whose buffers attribute |
@@ -39,28 +39,31 b' define([' | |||
|
39 | 39 | if (data instanceof Blob) { |
|
40 | 40 | // data is Blob, have to deserialize from ArrayBuffer in reader callback |
|
41 | 41 | var reader = new FileReader(); |
|
42 | reader.onload = function () { | |
|
43 | var msg = _deserialize_array_buffer(this.result); | |
|
44 | callback(msg); | |
|
45 | }; | |
|
42 | var promise = new Promise(function(resolve, reject) { | |
|
43 | reader.onload = function () { | |
|
44 | var msg = _deserialize_array_buffer(this.result); | |
|
45 | resolve(msg); | |
|
46 | }; | |
|
47 | }); | |
|
46 | 48 | reader.readAsArrayBuffer(data); |
|
49 | return promise; | |
|
47 | 50 | } else { |
|
48 | 51 | // data is ArrayBuffer, can deserialize directly |
|
49 | 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 | 61 | if (typeof data === "string") { |
|
59 | 62 | // text JSON message |
|
60 |
|
|
|
63 | return Promise.resolve(JSON.parse(data)); | |
|
61 | 64 | } else { |
|
62 | 65 | // binary message |
|
63 |
_deserialize_binary(data |
|
|
66 | return Promise.resolve(_deserialize_binary(data)); | |
|
64 | 67 | } |
|
65 | 68 | }; |
|
66 | 69 | |
@@ -117,4 +120,4 b' define([' | |||
|
117 | 120 | serialize: serialize |
|
118 | 121 | }; |
|
119 | 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