Update
This commit is contained in:
parent
997653632f
commit
0564e4efb3
|
@ -1,7 +1,7 @@
|
|||
```javascript
|
||||
actor {
|
||||
this.balance = 0;
|
||||
forever {
|
||||
react {
|
||||
assert account(this.balance);
|
||||
on message deposit($amount) {
|
||||
this.balance += amount;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
```javascript
|
||||
actor {
|
||||
forever {
|
||||
react {
|
||||
on asserted account($balance) {
|
||||
console.log("Balance:",
|
||||
balance);
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -10,7 +10,7 @@ var path = require('path');
|
|||
var ohm = require('ohm-js');
|
||||
var ES5 = require('./es5.js');
|
||||
|
||||
var grammarSource = Buffer("Ly8gLSotIGphdmFzY3JpcHQgLSotCi8vIFN5bnRhY3RpYyBleHRlbnNpb25zIHRvIEVTNSBmb3IgU3luZGljYXRlL2pzLiBTZWUgY29tcGlsZXIuanMgZm9yCi8vIHRoZSByZXN0IG9mIHRoZSB0cmFuc2xhdG9yLgoKU3luZGljYXRlIDw6IEVTNSB7CiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBFeHRlbnNpb25zIHRvIGV4cHJlc3Npb25zLgoKICBTdGF0ZW1lbnQKICAgICs9IEFjdG9yU3RhdGVtZW50CiAgICB8IERhdGFzcGFjZVN0YXRlbWVudAogICAgfCBBY3RvckZhY2V0U3RhdGVtZW50CiAgICB8IEFzc2VydGlvblR5cGVEZWNsYXJhdGlvblN0YXRlbWVudAogICAgfCBTZW5kTWVzc2FnZVN0YXRlbWVudAoKICBBY3RvclN0YXRlbWVudAogICAgPSBhY3RvciBDYWxsRXhwcmVzc2lvbiBCbG9jayAtLSB3aXRoQ29uc3RydWN0b3IKICAgIHwgYWN0b3IgQmxvY2sgICAgICAgICAgICAgICAgLS0gbm9Db25zdHJ1Y3RvcgoKICBEYXRhc3BhY2VTdGF0ZW1lbnQKICAgID0gZ3JvdW5kIGRhdGFzcGFjZSBpZGVudGlmaWVyPyBCbG9jayAtLSBncm91bmQKICAgIHwgZGF0YXNwYWNlIEJsb2NrICAgICAgICAgICAgICAgICAgICAtLSBub3JtYWwKCiAgQWN0b3JGYWNldFN0YXRlbWVudAogICAgPSBzdGF0ZSBGYWNldEJsb2NrIHVudGlsIEZhY2V0U3RhdGVUcmFuc2l0aW9uQmxvY2sgICAtLSBzdGF0ZQogICAgfCB1bnRpbCBGYWNldFN0YXRlVHJhbnNpdGlvbkJsb2NrICAgICAgICAgICAgICAgICAgICAtLSB1bnRpbAogICAgfCBmb3JldmVyIEZhY2V0QmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBmb3JldmVyCgogIEFzc2VydGlvblR5cGVEZWNsYXJhdGlvblN0YXRlbWVudAogICAgPSBhc3NlcnRpb24gdHlwZSBpZGVudGlmaWVyICIoIiBGb3JtYWxQYXJhbWV0ZXJMaXN0ICIpIiAoIj0iIHN0cmluZ0xpdGVyYWwpPyAjKHNjKQoKICBTZW5kTWVzc2FnZVN0YXRlbWVudCA9ICI6OiIgRXhwcmVzc2lvbjx3aXRoSW4+ICMoc2MpCgogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gT25nb2luZyBldmVudCBoYW5kbGVycy4KCiAgRmFjZXRCbG9jayA9ICJ7IiBGYWNldEluaXRCbG9jaz8gRmFjZXRTaXR1YXRpb24qIEZhY2V0RG9uZUJsb2NrPyAifSIKICBGYWNldFN0YXRlVHJhbnNpdGlvbkJsb2NrID0gInsiIEZhY2V0U3RhdGVUcmFuc2l0aW9uKiAifSIKCiAgRmFjZXRJbml0QmxvY2sgPSBpbml0IEJsb2NrCiAgRmFjZXREb25lQmxvY2sgPSBkb25lIEJsb2NrCgogIEZhY2V0U2l0dWF0aW9uCiAgICA9IGFzc2VydCBGYWNldFBhdHRlcm4gQXNzZXJ0V2hlbkNsYXVzZT8gIyhzYykgLS0gYXNzZXJ0CiAgICB8IG9uIEZhY2V0RXZlbnRQYXR0ZXJuIEJsb2NrICAgICAgICAgICAgICAgICAgLS0gZXZlbnQKICAgIHwgZHVyaW5nIEZhY2V0UGF0dGVybiBGYWNldEJsb2NrICAgICAgICAgICAgICAtLSBkdXJpbmcKCiAgQXNzZXJ0V2hlbkNsYXVzZSA9IHdoZW4gIigiIEV4cHJlc3Npb248d2l0aEluPiAiKSIKCiAgRmFjZXRFdmVudFBhdHRlcm4KICAgID0gbWVzc2FnZSBGYWNldFBhdHRlcm4gICAtLSBtZXNzYWdlRXZlbnQKICAgIHwgYXNzZXJ0ZWQgRmFjZXRQYXR0ZXJuICAtLSBhc3NlcnRlZEV2ZW50CiAgICB8IHJldHJhY3RlZCBGYWNldFBhdHRlcm4gLS0gcmV0cmFjdGVkRXZlbnQKCiAgRmFjZXRUcmFuc2l0aW9uRXZlbnRQYXR0ZXJuCiAgICA9IEZhY2V0RXZlbnRQYXR0ZXJuICAgICAgICAgIC0tIGZhY2V0RXZlbnQKICAgIHwgIigiIEV4cHJlc3Npb248d2l0aEluPiAiKSIgLS0gcmlzaW5nRWRnZQoKICBGYWNldFN0YXRlVHJhbnNpdGlvbgogICAgPSBjYXNlIEZhY2V0VHJhbnNpdGlvbkV2ZW50UGF0dGVybiBCbG9jayAtLSB3aXRoQ29udGludWF0aW9uCiAgICB8IGNhc2UgRmFjZXRUcmFuc2l0aW9uRXZlbnRQYXR0ZXJuICMoc2MpIC0tIG5vQ29udGludWF0aW9uCgogIEZhY2V0UGF0dGVybgogICAgPSBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uIG1ldGFsZXZlbCBkZWNpbWFsSW50ZWdlckxpdGVyYWwgLS0gd2l0aE1ldGFsZXZlbAogICAgfCBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gbm9NZXRhbGV2ZWwKCiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBLZXl3b3Jkcy4gV2UgZG9uJ3QgYWRkIHRoZW0gdG8gdGhlICJrZXl3b3JkIiBwcm9kdWN0aW9uIGJlY2F1c2UKICAvLyB3ZSBkb24ndCB3YW50IHRvIG1ha2UgdGhlbSB1bmF2YWlsYWJsZSB0byBwcm9ncmFtcyBhcwogIC8vIGlkZW50aWZpZXJzLgoKICBhY3RvciA9ICJhY3RvciIgfmlkZW50aWZpZXJQYXJ0CiAgYXNzZXJ0ID0gImFzc2VydCIgfmlkZW50aWZpZXJQYXJ0CiAgYXNzZXJ0ZWQgPSAiYXNzZXJ0ZWQiIH5pZGVudGlmaWVyUGFydAogIGFzc2VydGlvbiA9ICJhc3NlcnRpb24iIH5pZGVudGlmaWVyUGFydAogIGRhdGFzcGFjZSA9ICJkYXRhc3BhY2UiIH5pZGVudGlmaWVyUGFydAogIGRvbmUgPSAiZG9uZSIgfmlkZW50aWZpZXJQYXJ0CiAgZHVyaW5nID0gImR1cmluZyIgfmlkZW50aWZpZXJQYXJ0CiAgZm9yZXZlciA9ICJmb3JldmVyIiB+aWRlbnRpZmllclBhcnQKICBncm91bmQgPSAiZ3JvdW5kIiB+aWRlbnRpZmllclBhcnQKICBpbml0ID0gImluaXQiIH5pZGVudGlmaWVyUGFydAogIG1lc3NhZ2UgPSAibWVzc2FnZSIgfmlkZW50aWZpZXJQYXJ0CiAgbWV0YWxldmVsID0gIm1ldGFsZXZlbCIgfmlkZW50aWZpZXJQYXJ0CiAgb24gPSAib24iIH5pZGVudGlmaWVyUGFydAogIHJldHJhY3RlZCA9ICJyZXRyYWN0ZWQiIH5pZGVudGlmaWVyUGFydAogIHN0YXRlID0gInN0YXRlIiB+aWRlbnRpZmllclBhcnQKICB0eXBlID0gInR5cGUiIH5pZGVudGlmaWVyUGFydAogIHVudGlsID0gInVudGlsIiB+aWRlbnRpZmllclBhcnQKICB3aGVuID0gIndoZW4iIH5pZGVudGlmaWVyUGFydAp9Cg==","base64").toString();
|
||||
var grammarSource = Buffer("Ly8gLSotIGphdmFzY3JpcHQgLSotCi8vIFN5bnRhY3RpYyBleHRlbnNpb25zIHRvIEVTNSBmb3IgU3luZGljYXRlL2pzLiBTZWUgY29tcGlsZXIuanMgZm9yCi8vIHRoZSByZXN0IG9mIHRoZSB0cmFuc2xhdG9yLgoKU3luZGljYXRlIDw6IEVTNSB7CiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBFeHRlbnNpb25zIHRvIGV4cHJlc3Npb25zLgoKICBTdGF0ZW1lbnQKICAgICs9IEFjdG9yU3RhdGVtZW50CiAgICB8IERhdGFzcGFjZVN0YXRlbWVudAogICAgfCBBY3RvckZhY2V0U3RhdGVtZW50CiAgICB8IEFzc2VydGlvblR5cGVEZWNsYXJhdGlvblN0YXRlbWVudAogICAgfCBTZW5kTWVzc2FnZVN0YXRlbWVudAoKICBBY3RvclN0YXRlbWVudAogICAgPSBhY3RvciBDYWxsRXhwcmVzc2lvbiBCbG9jayAtLSB3aXRoQ29uc3RydWN0b3IKICAgIHwgYWN0b3IgQmxvY2sgICAgICAgICAgICAgICAgLS0gbm9Db25zdHJ1Y3RvcgoKICBEYXRhc3BhY2VTdGF0ZW1lbnQKICAgID0gZ3JvdW5kIGRhdGFzcGFjZSBpZGVudGlmaWVyPyBCbG9jayAtLSBncm91bmQKICAgIHwgZGF0YXNwYWNlIEJsb2NrICAgICAgICAgICAgICAgICAgICAtLSBub3JtYWwKCiAgQWN0b3JGYWNldFN0YXRlbWVudAogICAgPSByZWFjdCBGYWNldEJsb2NrIHVudGlsIEZhY2V0U3RhdGVUcmFuc2l0aW9uQmxvY2sgICAtLSBzdGF0ZQogICAgfCByZWFjdCB1bnRpbCBGYWNldFN0YXRlVHJhbnNpdGlvbkJsb2NrICAgICAgICAgICAgICAtLSB1bnRpbAogICAgfCByZWFjdCBGYWNldEJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBmb3JldmVyCgogIEFzc2VydGlvblR5cGVEZWNsYXJhdGlvblN0YXRlbWVudAogICAgPSBhc3NlcnRpb24gdHlwZSBpZGVudGlmaWVyICIoIiBGb3JtYWxQYXJhbWV0ZXJMaXN0ICIpIiAoIj0iIHN0cmluZ0xpdGVyYWwpPyAjKHNjKQoKICBTZW5kTWVzc2FnZVN0YXRlbWVudCA9ICI6OiIgRXhwcmVzc2lvbjx3aXRoSW4+ICMoc2MpCgogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gT25nb2luZyBldmVudCBoYW5kbGVycy4KCiAgRmFjZXRCbG9jayA9ICJ7IiBGYWNldEluaXRCbG9jaz8gRmFjZXRTaXR1YXRpb24qIEZhY2V0RG9uZUJsb2NrPyAifSIKICBGYWNldFN0YXRlVHJhbnNpdGlvbkJsb2NrID0gInsiIEZhY2V0U3RhdGVUcmFuc2l0aW9uKiAifSIKCiAgRmFjZXRJbml0QmxvY2sgPSBkbyBCbG9jawogIEZhY2V0RG9uZUJsb2NrID0gZmluYWxseSBCbG9jawoKICBGYWNldFNpdHVhdGlvbgogICAgPSBhc3NlcnQgRmFjZXRQYXR0ZXJuIEFzc2VydFdoZW5DbGF1c2U/ICMoc2MpIC0tIGFzc2VydAogICAgfCBvbiBGYWNldEV2ZW50UGF0dGVybiBCbG9jayAgICAgICAgICAgICAgICAgIC0tIGV2ZW50CiAgICB8IGR1cmluZyBGYWNldFBhdHRlcm4gRmFjZXRCbG9jayAgICAgICAgICAgICAgLS0gZHVyaW5nCgogIEFzc2VydFdoZW5DbGF1c2UgPSB3aGVuICIoIiBFeHByZXNzaW9uPHdpdGhJbj4gIikiCgogIEZhY2V0RXZlbnRQYXR0ZXJuCiAgICA9IG1lc3NhZ2UgRmFjZXRQYXR0ZXJuICAgLS0gbWVzc2FnZUV2ZW50CiAgICB8IGFzc2VydGVkIEZhY2V0UGF0dGVybiAgLS0gYXNzZXJ0ZWRFdmVudAogICAgfCByZXRyYWN0ZWQgRmFjZXRQYXR0ZXJuIC0tIHJldHJhY3RlZEV2ZW50CgogIEZhY2V0VHJhbnNpdGlvbkV2ZW50UGF0dGVybgogICAgPSBGYWNldEV2ZW50UGF0dGVybiAgICAgICAgICAtLSBmYWNldEV2ZW50CiAgICB8ICIoIiBFeHByZXNzaW9uPHdpdGhJbj4gIikiIC0tIHJpc2luZ0VkZ2UKCiAgRmFjZXRTdGF0ZVRyYW5zaXRpb24KICAgID0gY2FzZSBGYWNldFRyYW5zaXRpb25FdmVudFBhdHRlcm4gQmxvY2sgLS0gd2l0aENvbnRpbnVhdGlvbgogICAgfCBjYXNlIEZhY2V0VHJhbnNpdGlvbkV2ZW50UGF0dGVybiAjKHNjKSAtLSBub0NvbnRpbnVhdGlvbgoKICBGYWNldFBhdHRlcm4KICAgID0gTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiBtZXRhbGV2ZWwgZGVjaW1hbEludGVnZXJMaXRlcmFsIC0tIHdpdGhNZXRhbGV2ZWwKICAgIHwgTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIG5vTWV0YWxldmVsCgogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gS2V5d29yZHMuIFdlIGRvbid0IGFkZCB0aGVtIHRvIHRoZSAia2V5d29yZCIgcHJvZHVjdGlvbiBiZWNhdXNlCiAgLy8gd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZW0gdW5hdmFpbGFibGUgdG8gcHJvZ3JhbXMgYXMKICAvLyBpZGVudGlmaWVycy4KCiAgYWN0b3IgPSAiYWN0b3IiIH5pZGVudGlmaWVyUGFydAogIGFzc2VydCA9ICJhc3NlcnQiIH5pZGVudGlmaWVyUGFydAogIGFzc2VydGVkID0gImFzc2VydGVkIiB+aWRlbnRpZmllclBhcnQKICBhc3NlcnRpb24gPSAiYXNzZXJ0aW9uIiB+aWRlbnRpZmllclBhcnQKICBkYXRhc3BhY2UgPSAiZGF0YXNwYWNlIiB+aWRlbnRpZmllclBhcnQKICBkdXJpbmcgPSAiZHVyaW5nIiB+aWRlbnRpZmllclBhcnQKICBncm91bmQgPSAiZ3JvdW5kIiB+aWRlbnRpZmllclBhcnQKICBtZXNzYWdlID0gIm1lc3NhZ2UiIH5pZGVudGlmaWVyUGFydAogIG1ldGFsZXZlbCA9ICJtZXRhbGV2ZWwiIH5pZGVudGlmaWVyUGFydAogIG9uID0gIm9uIiB+aWRlbnRpZmllclBhcnQKICByZWFjdCA9ICJyZWFjdCIgfmlkZW50aWZpZXJQYXJ0CiAgcmV0cmFjdGVkID0gInJldHJhY3RlZCIgfmlkZW50aWZpZXJQYXJ0CiAgdHlwZSA9ICJ0eXBlIiB+aWRlbnRpZmllclBhcnQKICB1bnRpbCA9ICJ1bnRpbCIgfmlkZW50aWZpZXJQYXJ0CiAgd2hlbiA9ICJ3aGVuIiB+aWRlbnRpZmllclBhcnQKfQo=","base64").toString();
|
||||
var grammar = ohm.grammar(grammarSource, { ES5: ES5.grammar });
|
||||
var semantics = grammar.extendSemantics(ES5.semantics);
|
||||
|
||||
|
@ -103,7 +103,7 @@ var modifiedSourceActions = {
|
|||
ActorFacetStatement_state: function(_state, facetBlock, _until, transitionBlock) {
|
||||
return buildFacet(facetBlock, transitionBlock);
|
||||
},
|
||||
ActorFacetStatement_until: function(_until, transitionBlock) {
|
||||
ActorFacetStatement_until: function(_react, _until, transitionBlock) {
|
||||
return buildFacet(null, transitionBlock);
|
||||
},
|
||||
ActorFacetStatement_forever: function(_forever, facetBlock) {
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -8,7 +8,7 @@ $(document).ready(function() {
|
|||
|
||||
actor {
|
||||
this.counter = 0;
|
||||
forever {
|
||||
react {
|
||||
assert DOM('#button-label', '', Syndicate.seal(this.counter));
|
||||
on message jQueryEvent('#counter', 'click', _) {
|
||||
this.counter++;
|
||||
|
|
|
@ -19,7 +19,7 @@ function spawnChatApp() {
|
|||
if (!($("#nym").val())) { $("#nym").val("nym" + Math.floor(Math.random() * 65536)); }
|
||||
|
||||
actor {
|
||||
forever {
|
||||
react {
|
||||
on asserted jQueryInput('#nym', $v) { this.nym = v; }
|
||||
on asserted jQueryInput('#status', $v) { this.status = v; }
|
||||
|
||||
|
@ -85,11 +85,11 @@ assertion type jQueryInput(selector, value);
|
|||
|
||||
function spawnInputChangeMonitor() {
|
||||
actor {
|
||||
forever {
|
||||
react {
|
||||
on asserted Syndicate.observe(jQueryInput($selector, _)) {
|
||||
actor {
|
||||
this.value = $(selector).val();
|
||||
state {
|
||||
react {
|
||||
assert jQueryInput(selector, this.value);
|
||||
on message jQueryEvent(selector, 'change', $e) {
|
||||
this.value = e.target.value;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
assertion type switchState(on);
|
||||
assertion type powerDraw(watts);
|
||||
assertion type time(now);
|
||||
assertion type remoteClick();
|
||||
assertion type tvAlert(text);
|
||||
assertion type switchAction(on);
|
||||
|
@ -14,7 +13,7 @@ var jQueryEvent = Syndicate.JQuery.jQueryEvent;
|
|||
|
||||
function spawnTV() {
|
||||
actor {
|
||||
forever {
|
||||
react {
|
||||
during tvAlert($text) {
|
||||
assert DOM('#tv', 'alert', Syndicate.seal(["li", text]));
|
||||
}
|
||||
|
@ -27,7 +26,7 @@ function spawnTV() {
|
|||
|
||||
function spawnRemoteControl() {
|
||||
actor {
|
||||
forever {
|
||||
react {
|
||||
assert componentPresent('remote control');
|
||||
on message jQueryEvent('#remote-control', 'click', _) {
|
||||
:: remoteClick();
|
||||
|
@ -44,7 +43,7 @@ function spawnRemoteListener() {
|
|||
// state, if we've been clicked, turn it off. We don't do this
|
||||
// here, for simplicity.
|
||||
|
||||
forever {
|
||||
react {
|
||||
on asserted powerDraw($watts) {
|
||||
this.stoveIsOn = watts > 0;
|
||||
}
|
||||
|
@ -64,7 +63,7 @@ function spawnRemoteListener() {
|
|||
function spawnStoveSwitch() {
|
||||
actor {
|
||||
this.powerOn = false;
|
||||
state {
|
||||
react {
|
||||
assert componentPresent('stove switch');
|
||||
assert switchState(this.powerOn);
|
||||
|
||||
|
@ -88,7 +87,7 @@ function spawnStoveSwitch() {
|
|||
function spawnPowerDrawMonitor() {
|
||||
actor {
|
||||
this.watts = 0;
|
||||
state {
|
||||
react {
|
||||
assert componentPresent('power draw monitor');
|
||||
assert powerDraw(this.watts);
|
||||
|
||||
|
@ -107,45 +106,71 @@ function spawnPowerDrawMonitor() {
|
|||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Clock and "timeout listener"
|
||||
|
||||
function spawnClock() {
|
||||
actor {
|
||||
setInterval(Syndicate.Dataspace.wrap(function () {
|
||||
:: time(+(new Date()));
|
||||
}), 200);
|
||||
forever {
|
||||
assert componentPresent('real time clock');
|
||||
}
|
||||
}
|
||||
}
|
||||
// Timeout listener
|
||||
|
||||
function spawnTimeoutListener() {
|
||||
actor {
|
||||
this.mostRecentTime = 0;
|
||||
this.powerOnTime = null;
|
||||
|
||||
forever {
|
||||
on asserted powerDraw($watts) {
|
||||
this.powerOnTime = (watts > 0) ? this.mostRecentTime : null;
|
||||
react {
|
||||
during powerDraw($watts) {
|
||||
do {
|
||||
if (watts > 0) {
|
||||
var powerOnTime = Date.now();
|
||||
react {
|
||||
on asserted Syndicate.Timer.timeLaterThan(powerOnTime + 3000) {
|
||||
react { assert tvAlert('Stove on too long?'); }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
on message time($now) {
|
||||
this.mostRecentTime = now;
|
||||
}
|
||||
assert tvAlert('Stove on too long?')
|
||||
when (this.powerOnTime !== null && this.mostRecentTime - this.powerOnTime > 3000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// function spawnTimeoutListener() {
|
||||
// actor {
|
||||
// react {
|
||||
// on asserted powerDraw($watts) {
|
||||
// if (watts > 0) {
|
||||
// var powerOnTime = Date.now();
|
||||
// react {
|
||||
// on asserted Syndicate.Timer.timeLaterThan(powerOnTime + 3000) {
|
||||
// react { assert tvAlert('Stove on too long?'); }
|
||||
// }
|
||||
// } until {
|
||||
// case asserted powerDraw(0); // alt: on retracted powerDraw(watts);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// function spawnTimeoutListener() {
|
||||
// actor {
|
||||
// this.mostRecentTime = 0;
|
||||
// this.powerOnTime = null;
|
||||
// react {
|
||||
// on asserted powerDraw($watts) {
|
||||
// this.powerOnTime = (watts > 0) ? this.mostRecentTime : null;
|
||||
// }
|
||||
// on message Syndicate.Timer.periodicTick(200) {
|
||||
// this.mostRecentTime = Date.now();
|
||||
// }
|
||||
// assert tvAlert('Stove on too long?')
|
||||
// when (this.powerOnTime !== null && this.mostRecentTime - this.powerOnTime > 3000);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Failure monitor
|
||||
|
||||
function spawnFailureMonitor() {
|
||||
actor {
|
||||
forever {
|
||||
react {
|
||||
on retracted componentPresent($who) {
|
||||
state {
|
||||
react {
|
||||
assert tvAlert('FAILURE: ' + who);
|
||||
} until {
|
||||
case asserted componentPresent(who);
|
||||
|
@ -160,7 +185,7 @@ function spawnFailureMonitor() {
|
|||
|
||||
function spawnChaosMonkey() {
|
||||
actor {
|
||||
forever {
|
||||
react {
|
||||
on message jQueryEvent('#spawn-power-draw-monitor', 'click', _) {
|
||||
spawnPowerDrawMonitor();
|
||||
}
|
||||
|
@ -178,13 +203,13 @@ $(document).ready(function () {
|
|||
ground dataspace G {
|
||||
Syndicate.JQuery.spawnJQueryDriver();
|
||||
Syndicate.DOM.spawnDOMDriver();
|
||||
Syndicate.Timer.spawnTimerDriver();
|
||||
|
||||
spawnTV();
|
||||
spawnRemoteControl();
|
||||
spawnRemoteListener();
|
||||
spawnStoveSwitch();
|
||||
spawnPowerDrawMonitor();
|
||||
spawnClock();
|
||||
spawnTimeoutListener();
|
||||
|
||||
spawnFailureMonitor();
|
||||
|
|
|
@ -4,11 +4,11 @@ ground dataspace {
|
|||
console.log('starting ground boot');
|
||||
|
||||
actor {
|
||||
until {
|
||||
react until {
|
||||
case asserted Syndicate.observe(beep(_)) {
|
||||
var counter = 0;
|
||||
state {
|
||||
init {
|
||||
react {
|
||||
do {
|
||||
:: beep(counter++);
|
||||
}
|
||||
on message beep(_) {
|
||||
|
@ -22,7 +22,7 @@ ground dataspace {
|
|||
}
|
||||
|
||||
actor {
|
||||
forever {
|
||||
react {
|
||||
on message beep($counter) {
|
||||
console.log("beep!", counter);
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ $(document).ready(function () {
|
|||
:: time(+(new Date()));
|
||||
}), 1000);
|
||||
|
||||
forever {
|
||||
react {
|
||||
on message time($now) {
|
||||
this.angle = (((now / 1000) % 60) / 60) * 2 * Math.PI;
|
||||
this.handX = 50 + 40 * Math.cos(this.angle);
|
||||
|
|
|
@ -43,7 +43,7 @@ function spawnGui() {
|
|||
: piece(text, pos, 0, text.length + 1, "normal");
|
||||
};
|
||||
|
||||
forever {
|
||||
react {
|
||||
on message jQueryEvent("#inputRow", "+keypress", $event) {
|
||||
var keycode = event.keyCode;
|
||||
var character = String.fromCharCode(event.charCode);
|
||||
|
@ -82,7 +82,7 @@ function spawnModel() {
|
|||
this.fieldValue = "initial";
|
||||
this.cursorPos = this.fieldValue.length; /* positions address gaps between characters */
|
||||
|
||||
forever {
|
||||
react {
|
||||
assert fieldContents(this.fieldValue, this.cursorPos);
|
||||
|
||||
on message fieldCommand("cursorLeft") {
|
||||
|
@ -135,7 +135,7 @@ function spawnSearch() {
|
|||
}
|
||||
};
|
||||
|
||||
forever {
|
||||
react {
|
||||
assert highlight(this.highlight);
|
||||
|
||||
on message jQueryEvent("#searchBox", "input", $event) {
|
||||
|
|
Loading…
Reference in New Issue