Refactor dispatch handling (#2452)

Promise id is now created in core and passed back to JS.
This commit is contained in:
andy finch 2019-06-13 23:43:54 -04:00 committed by Ryan Dahl
parent fdd2eb5383
commit dc60fe9f30
18 changed files with 667 additions and 709 deletions

View file

@ -151,14 +151,27 @@ SharedQueue Binary Layout
function handleAsyncMsgFromRust(buf) {
if (buf) {
asyncHandler(buf);
handleAsyncMsgFromRustInner(buf);
} else {
while ((buf = shift()) != null) {
asyncHandler(buf);
handleAsyncMsgFromRustInner(buf);
}
}
}
function handleAsyncMsgFromRustInner(buf) {
// DataView to extract cmdId value.
const dataView = new DataView(buf.buffer, buf.byteOffset, 4);
const promiseId = dataView.getInt32(0);
// Uint8 buffer view shifted right and shortened 4 bytes to remove cmdId from view window.
const bufViewFinal = new Uint8Array(
buf.buffer,
buf.byteOffset + 4,
buf.byteLength - 4
);
asyncHandler(promiseId, bufViewFinal);
}
function dispatch(control, zeroCopy = null) {
maybeInit();
// First try to push control to shared.