on master help sign in
Possibly fix jsaddle-warp duplicate batch issue
commit84afb19753d93000d9f28253d12c26b477898330 authorHamish Mackenzie <Hamish.K.Mackenzie@googlemail.com> dateThu 29 Jun 2017, 22:44 (9 years ago) parent5771606
2 files changed+12−4
jsaddle-warp/src/Language/Javascript/JSaddle/WebSockets.hs+4−4 jsaddle/src/Language/Javascript/JSaddle/Run/Files.hs+8
jsaddle-warp/src/Language/Javascript/JSaddle/WebSockets.hs+4−4
@@ -148,11 +148,13 @@ jsaddleJs = "\
148148 \\n\
149149 \ ws.onopen = function(e) {\n\
150150 \ " <> initState <> "\n\
151− \ var inXhrSend = false;\n\
152151 \\n\
153152 \ ws.onmessage = function(e) {\n\
154− \ if(inXhrSend) return;\n\
155153 \ var batch = JSON.parse(e.data);\n\
154+ \ if(inCallback > 0) {\n\
155+ \ asyncBatch = batch;\n\
156+ \ return;\n\
157+ \ }\n\
156158 \ if(typeof batch === \"string\") {\n\
157159 \ syncKey = batch;\n\
158160 \ var xhr = new XMLHttpRequest();\n\
@@ -167,12 +169,10 @@ jsaddleJs = "\
167169 \\n\
168170 \ " <> runBatch (\a -> "ws.send(JSON.stringify(" <> a <> "));")
169171 (Just (\a -> "(function(){\n\
170− \ inXhrSend = true;\n\
171172 \ var xhr = new XMLHttpRequest();\n\
172173 \ xhr.open('POST', '/sync/'+syncKey, false);\n\
173174 \ xhr.setRequestHeader(\"Content-type\", \"application/json\");\n\
174175 \ xhr.send(JSON.stringify(" <> a <> "));\n\
175− \ inXhrSend = false;\n\
176176 \ return JSON.parse(xhr.response);})()")) <> "\
177177 \ };\n\
178178 \ };\n\
jsaddle/src/Language/Javascript/JSaddle/Run/Files.hs+8
@@ -47,6 +47,7 @@ initState = "\
4747 \ var expectedBatch = 1;\n\
4848 \ var lastResults = [0, {}];\n\
4949 \ var inCallback = 0;\n\
50+ \ var asyncBatch = null;\n\
5051 \"
5152
5253runBatch :: (ByteString -> ByteString) -> Maybe (ByteString -> ByteString) -> ByteString
@@ -313,6 +314,13 @@ runBatch send sendSync = "\
313314 \ jsaddle_values.set(n, err);\n\
314315 \ " <> send "{\"tag\": \"BatchResults\", \"contents\": [batch[2], {\"tag\": \"Failure\", \"contents\": [callbacksToFree, results, n]}]}" <> "\n\
315316 \ }\n\
317+ \ if(inCallback == 1) {\n\
318+ \ while(asyncBatch !== null) {\n\
319+ \ var b = asyncBatch;\n\
320+ \ asyncBatch = null;\n\
321+ \ if(b[2] == expectedBatch) runBatch(b);\n\
322+ \ }\n\
323+ \ }\n\
316324 \ inCallback--;\n\
317325 \ };\n\
318326 \ if(batch[1] && (initialSyncDepth || 0) === 0) {\n\