diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2018-08-09 12:17:08 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-09 12:17:08 -0700 |
commit | fb87cb38eca7a2d490c3e70738407dc6538e80d3 (patch) | |
tree | 29e81258ca714594f0b6b325ddd41bb5f8c54257 /js/timers.ts | |
parent | 0e96125260f2d78718e57cac95c7dc672bb24e57 (diff) |
First pass at setTimeout with Tokio (#434)
Diffstat (limited to 'js/timers.ts')
-rw-r--r-- | js/timers.ts | 61 |
1 files changed, 38 insertions, 23 deletions
diff --git a/js/timers.ts b/js/timers.ts index 9f18d2716..e5c7a5f3c 100644 --- a/js/timers.ts +++ b/js/timers.ts @@ -1,7 +1,9 @@ // Copyright 2018 the Deno authors. All rights reserved. MIT license. -import { deno as pb } from "./msg.pb"; -import { pubInternal, sub } from "./dispatch"; import { assert } from "./util"; +import * as util from "./util"; +import { deno as fbs } from "gen/msg_generated"; +import { flatbuffers } from "flatbuffers"; +import { libdeno } from "./globals"; let nextTimerId = 1; @@ -19,14 +21,9 @@ interface Timer { const timers = new Map<number, Timer>(); -export function initTimers() { - sub("timers", onMessage); -} - -function onMessage(payload: Uint8Array) { - const msg = pb.Msg.decode(payload); - assert(msg.command === pb.Msg.Command.TIMER_READY); - const { timerReadyId, timerReadyDone } = msg; +export function onMessage(msg: fbs.TimerReady) { + const timerReadyId = msg.id(); + const timerReadyDone = msg.done(); const timer = timers.get(timerReadyId); if (!timer) { return; @@ -37,7 +34,7 @@ function onMessage(payload: Uint8Array) { } } -function setTimer( +function startTimer( cb: TimerCallback, delay: number, interval: boolean, @@ -52,12 +49,23 @@ function setTimer( cb }; timers.set(timer.id, timer); - pubInternal("timers", { - command: pb.Msg.Command.TIMER_START, - timerStartId: timer.id, - timerStartInterval: timer.interval, - timerStartDelay: timer.delay - }); + + util.log("timers.ts startTimer"); + + // Send TimerStart message + const builder = new flatbuffers.Builder(); + fbs.TimerStart.startTimerStart(builder); + fbs.TimerStart.addId(builder, timer.id); + fbs.TimerStart.addInterval(builder, timer.interval); + fbs.TimerStart.addDelay(builder, timer.delay); + const msg = fbs.TimerStart.endTimerStart(builder); + fbs.Base.startBase(builder); + fbs.Base.addMsg(builder, msg); + fbs.Base.addMsgType(builder, fbs.Any.TimerStart); + builder.finish(fbs.Base.endBase(builder)); + const resBuf = libdeno.send(builder.asUint8Array()); + assert(resBuf == null); + return timer.id; } @@ -67,7 +75,7 @@ export function setTimeout( // tslint:disable-next-line:no-any ...args: any[] ): number { - return setTimer(cb, delay, false, args); + return startTimer(cb, delay, false, args); } export function setInterval( @@ -76,13 +84,20 @@ export function setInterval( // tslint:disable-next-line:no-any ...args: any[] ): number { - return setTimer(cb, delay, true, args); + return startTimer(cb, delay, true, args); } export function clearTimer(id: number) { timers.delete(id); - pubInternal("timers", { - command: pb.Msg.Command.TIMER_CLEAR, - timerClearId: id - }); + + const builder = new flatbuffers.Builder(); + fbs.TimerClear.startTimerClear(builder); + fbs.TimerClear.addId(builder, id); + const msg = fbs.TimerClear.endTimerClear(builder); + fbs.Base.startBase(builder); + fbs.Base.addMsg(builder, msg); + fbs.Base.addMsgType(builder, fbs.Any.TimerClear); + builder.finish(fbs.Base.endBase(builder)); + const resBuf = libdeno.send(builder.asUint8Array()); + assert(resBuf == null); } |