summaryrefslogtreecommitdiff
path: root/js/dispatch_minimal.ts
diff options
context:
space:
mode:
Diffstat (limited to 'js/dispatch_minimal.ts')
-rw-r--r--js/dispatch_minimal.ts45
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;
}