From 8fb5892010738526198c85eb9f08ec82f753cc60 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Fri, 2 Nov 2018 00:19:00 +0000 Subject: [PATCH] Add activate; remove ground dataspace --- src/index.js | 48 +++++++++++++++++++++++++++--------------------- src/msgspeed.js | 31 +++++++++++++++---------------- src/ticker.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 37 deletions(-) create mode 100644 src/ticker.js diff --git a/src/index.js b/src/index.js index 8376e67..3ff0842 100644 --- a/src/index.js +++ b/src/index.js @@ -18,30 +18,36 @@ //--------------------------------------------------------------------------- const Protocol = require("./protocol.js"); +const Dataspace = require("@syndicate-lang/core").Dataspace; + +activate require("./ticker.js"); const N = 10; -console.time('box-and-client-' + N.toString()); - -ground dataspace G { - spawn named 'box' { - field this.value = 0; - assert Protocol.BoxState(this.value); - stop on (this.value === N); - on message Protocol.SetBox($newValue) { - this.value = newValue; - console.log('box updated value', newValue); - } - } - - spawn named 'client' { - on asserted Protocol.BoxState($v) { - console.log('client sending SetBox', v + 1); - << Protocol.SetBox(v + 1); - } +spawn named 'box' { + field this.value = 0; + assert Protocol.BoxState(this.value); + stop on (this.value === N); + on message Protocol.SetBox($newValue) { + this.value = newValue; + console.log('box updated value', newValue); } } -G.stopHandler = () => { - console.timeEnd('box-and-client-' + N.toString()); -}; +spawn named 'client' { + on asserted Protocol.BoxState($v) { + console.log('client sending SetBox', v + 1); + << Protocol.SetBox(v + 1); + } + + on retracted Protocol.BoxState(_) { + console.log('box gone'); + } +} + +console.time('box-and-client-' + N.toString()); +spawn { + Dataspace.currentFacet().actor.dataspace.container.addStopHandler(() => { + console.timeEnd('box-and-client-' + N.toString()); + }); +} diff --git a/src/msgspeed.js b/src/msgspeed.js index 7b9b81f..6931f1f 100644 --- a/src/msgspeed.js +++ b/src/msgspeed.js @@ -21,23 +21,22 @@ var Dataspace = require('@syndicate-lang/core').Dataspace; const N = 100000; -console.time('msgspeed-' + N.toString()); - -ground dataspace G { - spawn { - on start { - << 0; - } - on message $v { - if (v === N) { - Dataspace.currentFacet().stop(() => { }); - } else { - << v + 1; - } +spawn { + on start { + << 0; + } + on message $v { + if (v === N) { + Dataspace.currentFacet().stop(() => { }); + } else { + << v + 1; } } } -G.stopHandler = () => { - console.timeEnd('msgspeed-' + N.toString()); -}; +console.time('msgspeed-' + N.toString()); +spawn { + Dataspace.currentFacet().actor.dataspace.container.addStopHandler(() => { + console.timeEnd('msgspeed-' + N.toString()); + }); +} diff --git a/src/ticker.js b/src/ticker.js new file mode 100644 index 0000000..667da92 --- /dev/null +++ b/src/ticker.js @@ -0,0 +1,46 @@ +//--------------------------------------------------------------------------- +// @syndicate-lang/syntax-test, a demo of Syndicate extensions to JS. +// Copyright (C) 2016-2018 Tony Garnock-Jones +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +//--------------------------------------------------------------------------- + +import { Dataspace } from "@syndicate-lang/core"; + +message type Tick(); + +spawn named 'ticker' { + field this.counter = 0; + + on start { console.log('ticker starting'); } + on stop { console.log('ticker stopping'); } + + on message Tick() { + this.counter++; + console.log('tick', new Date(), this.counter); + if (this.counter < 5) { + Dataspace.backgroundTask((finish) => { + setTimeout(Dataspace.wrapExternal(() => { + << Tick(); + finish(); + }), 1000); + }); + } + } + + on start { + console.log('sending first tick'); + << Tick(); + } +}