diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2019-08-07 14:02:29 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-07 14:02:29 -0400 |
commit | e438ac2c74c823882dc9c9ecde2a9e9ed7bcfb4b (patch) | |
tree | 480b2daa83e31b26c5d611feff021674d289e492 /js/dispatch_minimal.ts | |
parent | 5350abbc7ffdba6d17166fa00ad89e86979a43f7 (diff) |
Add op_id throughout op API (#2734)
Removes the magic number hack to switch between flatbuffers and the
minimal dispatcher.
Adds machinery to pass the op_id through the shared_queue.
Diffstat (limited to 'js/dispatch_minimal.ts')
-rw-r--r-- | js/dispatch_minimal.ts | 45 |
1 files changed, 18 insertions, 27 deletions
diff --git a/js/dispatch_minimal.ts b/js/dispatch_minimal.ts index 17d328110..df0a290b2 100644 --- a/js/dispatch_minimal.ts +++ b/js/dispatch_minimal.ts @@ -3,7 +3,6 @@ import * as util from "./util"; import { core } from "./core"; -const DISPATCH_MINIMAL_TOKEN = 0xcafe; const promiseTableMin = new Map<number, util.Resolvable<number>>(); let _nextPromiseId = 0; @@ -13,31 +12,27 @@ export function nextPromiseId(): number { export interface RecordMinimal { promiseId: number; - opId: number; + opId: number; // Maybe better called dispatchId arg: number; result: number; } -/** Determines if a message has the "minimal" serialization format. If false, it - * is flatbuffer encoded. - */ -export function hasMinimalToken(i32: Int32Array): boolean { - return i32[0] == DISPATCH_MINIMAL_TOKEN; -} - -export function recordFromBufMinimal(buf32: Int32Array): null | RecordMinimal { - if (hasMinimalToken(buf32)) { - return { - promiseId: buf32[1], - opId: buf32[2], - arg: buf32[3], - result: buf32[4] - }; +export function recordFromBufMinimal( + opId: number, + buf32: Int32Array +): RecordMinimal { + if (buf32.length != 3) { + throw Error("Bad message"); } - return null; + return { + promiseId: buf32[0], + opId, + arg: buf32[1], + result: buf32[2] + }; } -const scratch32 = new Int32Array(5); +const scratch32 = new Int32Array(3); const scratchBytes = new Uint8Array( scratch32.buffer, scratch32.byteOffset, @@ -63,15 +58,11 @@ export function sendAsyncMinimal( zeroCopy: Uint8Array ): Promise<number> { const promiseId = nextPromiseId(); // AKA cmdId - - scratch32[0] = DISPATCH_MINIMAL_TOKEN; - scratch32[1] = promiseId; - scratch32[2] = opId; - scratch32[3] = arg; - + scratch32[0] = promiseId; + scratch32[1] = arg; + scratch32[2] = 0; // result const promise = util.createResolvable<number>(); promiseTableMin.set(promiseId, promise); - - core.dispatch(scratchBytes, zeroCopy); + core.dispatch(opId, scratchBytes, zeroCopy); return promise; } |