summaryrefslogtreecommitdiff
path: root/js/dispatch.ts
diff options
context:
space:
mode:
Diffstat (limited to 'js/dispatch.ts')
-rw-r--r--js/dispatch.ts55
1 files changed, 6 insertions, 49 deletions
diff --git a/js/dispatch.ts b/js/dispatch.ts
index a83e5a0e5..6668014b9 100644
--- a/js/dispatch.ts
+++ b/js/dispatch.ts
@@ -1,13 +1,11 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
import { typedArrayToArrayBuffer } from "./util";
-import { _global } from "./globals";
-import { deno as pb } from "./msg.pb";
+import { deno as fbs } from "./msg_generated";
export type MessageCallback = (msg: Uint8Array) => void;
//type MessageStructCallback = (msg: pb.IMsg) => void;
-const send = V8Worker2.send;
const channels = new Map<string, MessageCallback[]>();
export function sub(channel: string, cb: MessageCallback): void {
@@ -19,55 +17,14 @@ export function sub(channel: string, cb: MessageCallback): void {
subscribers.push(cb);
}
-/*
-export function subMsg(channel: string, cb: MessageStructCallback): void {
- sub(channel, (payload: Uint8Array) => {
- const msg = pb.Msg.decode(payload);
- if (msg.error != null) {
- f.onError(new Error(msg.error));
- } else {
- cb(msg);
- }
- });
-}
- */
-
-export function pub(channel: string, payload: Uint8Array): null | ArrayBuffer {
- const msg = pb.BaseMsg.fromObject({ channel, payload });
- const ui8 = pb.BaseMsg.encode(msg).finish();
- const ab = typedArrayToArrayBuffer(ui8);
- return send(ab);
-}
-
-// Internal version of "pub".
-// TODO add internal version of "sub"
-export function pubInternal(channel: string, obj: pb.IMsg): null | pb.Msg {
- const msg = pb.Msg.fromObject(obj);
- const ui8 = pb.Msg.encode(msg).finish();
- const resBuf = pub(channel, ui8);
- if (resBuf != null && resBuf.byteLength > 0) {
- const res = pb.Msg.decode(new Uint8Array(resBuf));
- if (res != null && res.error != null && res.error.length > 0) {
- throw Error(res.error);
- }
- return res;
- } else {
- return null;
- }
-}
-
-V8Worker2.recv((ab: ArrayBuffer) => {
- const msg = pb.BaseMsg.decode(new Uint8Array(ab));
- const subscribers = channels.get(msg.channel);
+deno.recv((channel: string, ab: ArrayBuffer) => {
+ const subscribers = channels.get(channel);
if (subscribers == null) {
- throw Error(`No subscribers for channel "${msg.channel}".`);
+ throw Error(`No subscribers for channel "${channel}".`);
}
+ const ui8 = new Uint8Array(ab);
for (const subscriber of subscribers) {
- subscriber(msg.payload);
+ subscriber(ui8);
}
});
-
-// Delete the V8Worker2 from the global object, so that no one else can receive
-// messages.
-_global["V8Worker2"] = null;