From 32d4da6f868e4ee917b7890355bc445ec55a9edd Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 6 Feb 2023 16:08:12 +0100 Subject: [PATCH] Seconds-based timer protocols --- README.md | 8 +- TODO.md | 2 +- .../src/index.ts | 10 +- .../yarn.lock | 139 +++++++++--------- packages/timer/src/index.ts | 31 ++-- todo/driver-mdns/src/routes.js | 2 +- todo/socks/src/service.js | 2 +- todo/syntax-playground/src/client.js | 2 +- todo/syntax-playground/src/mc.js | 2 +- todo/syntax-playground/src/worker_employee.js | 2 +- 10 files changed, 104 insertions(+), 96 deletions(-) diff --git a/README.md b/README.md index 9c638a6..345b658 100644 --- a/README.md +++ b/README.md @@ -139,19 +139,19 @@ along with this program. If not, see . - + - + - + - + diff --git a/TODO.md b/TODO.md index 7ddf5ce..f47e798 100644 --- a/TODO.md +++ b/TODO.md @@ -22,7 +22,7 @@ - [DONE] `during/spawn` - [DONE] `during` - - [DONE] `let { TimeLaterThan } = activate require("@syndicate-lang/driver-timer");` + - [DONE] `let { LaterThan } = activate require("@syndicate-lang/driver-timer");` - [DONE] `react` - [DONE] `spawn*` or similar - looks like `spawn on start { ... }` will do the trick - [DONE] activation diff --git a/examples/syndicate-html-example-flappy-bird/src/index.ts b/examples/syndicate-html-example-flappy-bird/src/index.ts index 1025ca4..5fc778d 100644 --- a/examples/syndicate-html-example-flappy-bird/src/index.ts +++ b/examples/syndicate-html-example-flappy-bird/src/index.ts @@ -109,12 +109,12 @@ function spawnGame(mainDs: Ref) { on message WindowEvent('+keypress', $_e) => yvel.value = -10; on message WindowEvent('+click', $_e) => yvel.value = -10; - const ms_per_tick = 1000.0 / 60; - const ms_per_tick_d = Double(ms_per_tick); - on message PeriodicTick(ms_per_tick_d) => { - xpos.value += 0.15 * ms_per_tick; + const seconds_per_tick = 1 / 60; + const seconds_per_tick_d = Double(seconds_per_tick); + on message PeriodicTick(seconds_per_tick_d) => { + xpos.value += 150 * seconds_per_tick; ypos.value = (ypos.value + yvel.value); - yvel.value += ms_per_tick * 0.05; + yvel.value += seconds_per_tick * 50; } } } diff --git a/examples/syndicate-html-example-flappy-bird/yarn.lock b/examples/syndicate-html-example-flappy-bird/yarn.lock index d63efad..9229b68 100644 --- a/examples/syndicate-html-example-flappy-bird/yarn.lock +++ b/examples/syndicate-html-example-flappy-bird/yarn.lock @@ -2,17 +2,17 @@ # yarn lockfile v1 -"@preserves/core@>=0.20.2", "@preserves/core@^0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@preserves/core/-/core-0.20.2.tgz#37afa1f1770d0e667b4d384f717e648af745a7fa" - integrity sha512-6mZbhYuzAvgA4u2UpuyW2JI5in4h693AdrDTLXfrpv542tFFcI9XxGyL7AJ/CnwDxaX/0d9lRt7uTOrfJJ0uMw== +"@preserves/core@>=0.20.2", "@preserves/core@^0.20.5": + version "0.20.5" + resolved "https://registry.yarnpkg.com/@preserves/core/-/core-0.20.5.tgz#3b34693b1f5aff659639690725a703a95689f822" + integrity sha512-hnywtmY30swKSuHix3MbEoheyCh6plCERzmhnCQllrkhdT0hFm66iSr2PVjNsXAUNIwd3Rh3Vu2btgdjMK+Q9Q== "@preserves/schema@>=0.21.2": - version "0.21.2" - resolved "https://registry.yarnpkg.com/@preserves/schema/-/schema-0.21.2.tgz#b8aff321e4971a7ff9275f33c499fab068da06bb" - integrity sha512-RZIIc2ETvRLC3sjjfFlyjJK3+6dlOK0N94E7lWPxK9c226vF4MU0CePi9ryRPBihgn5VdsjhCCfWXxt+te3IIw== + version "0.21.7" + resolved "https://registry.yarnpkg.com/@preserves/schema/-/schema-0.21.7.tgz#09e388b8c582c3dc95018ebdfe990381dddabfa8" + integrity sha512-q2gncEOOY3qqs+i+Op5yZx89cckqN601vbEcBDfnQge5PB9HrOrfMk68Wq4w/rpdQpRyVqWhZNxLlKsANjgoOw== dependencies: - "@preserves/core" "^0.20.2" + "@preserves/core" "^0.20.5" "@types/glob" "^7.1" "@types/minimatch" "^3.0" chalk "^4.1" @@ -30,48 +30,48 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@syndicate-lang/compiler@^0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@syndicate-lang/compiler/-/compiler-0.11.3.tgz#77b491c896bf0a83776cb99224968fd979a5e086" - integrity sha512-2ru1hCsaBFQCrPMocUDmyT6GE3IYuqUMYtHwx2pwegH8xPdzz33aShrAmfSRcv56xC+kkGXpj6hS3e+pM2ks6A== +"@syndicate-lang/compiler@^0.11.6": + version "0.11.6" + resolved "https://registry.yarnpkg.com/@syndicate-lang/compiler/-/compiler-0.11.6.tgz#98f6016da98033ae7dac9daa0d601f625ea371a1" + integrity sha512-eIz9jqNz4lzf5s05ngefeX+NMS0c63ysL60rEB9bg+9IpWXYTBlZs0xQoy/3lw2igKZerUlOlOeu2kSkszBNDw== -"@syndicate-lang/core@*", "@syndicate-lang/core@^0.11.4": - version "0.11.4" - resolved "https://registry.yarnpkg.com/@syndicate-lang/core/-/core-0.11.4.tgz#995e2ad3d2594929b6b01f0a3c9c045f7fbcbe5b" - integrity sha512-6abI79+rbR0wC2kJeM/MUJNy8WQYTrtQwEcQOEXCCsfoj7KZ75wkzmC05B09Fu2URJpFzFRRaVKRyImx3oDWXA== +"@syndicate-lang/core@*", "@syndicate-lang/core@^0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@syndicate-lang/core/-/core-0.12.0.tgz#dc30759789e322f1a4235ab7f7b0c6905e540a50" + integrity sha512-QwgQ+nh2krHsjVMPcSYL116bg/FgkJdMzlrd973TG2a+0PiapwevYetO72yK2Bw0PfRb0pjU2WN4UkwBYNvRJQ== dependencies: "@preserves/core" ">=0.20.2" "@preserves/schema" ">=0.21.2" "@syndicate-lang/html@*": - version "0.11.5" - resolved "https://registry.yarnpkg.com/@syndicate-lang/html/-/html-0.11.5.tgz#f1ed2aab0b37e848ffe88fbbd450d4140c670602" - integrity sha512-Y440cq+niz9SaoU5z79SCq44Q4SU59ILRW/gmwByYWTt3zt35zV8nYwn/QhylNU4OvrCkLNImIYtV4f8TSrNAg== + version "0.11.14" + resolved "https://registry.yarnpkg.com/@syndicate-lang/html/-/html-0.11.14.tgz#c81ddbe5ad5c768fedac15cb850f49e78c6e0c24" + integrity sha512-CcBzG/AKXwfvZbl0Py6l3bmQg9bd3EXUaKrluxkBdeBVBV1aZBVrk+//GfEtiFT8/KbQcOa6mnmaqPpQ/eft2g== dependencies: - "@syndicate-lang/core" "^0.11.4" + "@syndicate-lang/core" "^0.12.0" "@syndicate-lang/timer@*": - version "0.11.5" - resolved "https://registry.yarnpkg.com/@syndicate-lang/timer/-/timer-0.11.5.tgz#ad7240acaee014105ead719ba84ad99644a6ba5d" - integrity sha512-MxUHeFnng5fq73oaFj+bQ1Ce2ar0mj35DE05pCNj/EitljlhC8dohAd9x3jBX5DyeS/3+bNQnmJ+p6/af3dccw== + version "0.11.12" + resolved "https://registry.yarnpkg.com/@syndicate-lang/timer/-/timer-0.11.12.tgz#0dd2ddca9e254b79242a9b491019fb63c713c225" + integrity sha512-VpqKLf3kheKsdhNXcUJob/sQf0pWLdMNPUJ7HhWI/aieVNMb3FEGfgvnsiEpECQATO3/9QeF2fVwS4dygOqHmg== dependencies: - "@syndicate-lang/core" "^0.11.4" + "@syndicate-lang/core" "^0.12.0" "@syndicate-lang/ts-plugin@*": - version "0.11.5" - resolved "https://registry.yarnpkg.com/@syndicate-lang/ts-plugin/-/ts-plugin-0.11.5.tgz#afc62b4c73af28fab9c33b30cd78227983ab9f5f" - integrity sha512-LMZO1W9Qa4OvMMMInFXre9Lb9xcFVMG7EqrY3VpmH5OVV+/0CznaNKCmy7EwJJ/Oumuxniu9vSYZ6Mfs9W3ZQg== + version "0.11.12" + resolved "https://registry.yarnpkg.com/@syndicate-lang/ts-plugin/-/ts-plugin-0.11.12.tgz#2c42b0ee9dfa36e048dc6cf92c0ca81e5bfc86c1" + integrity sha512-fdbUL3OgWvK6SzpTqLVSLxzI855/Bb5WdPE6PFwQp/OKHiU1e8sZ1OGzjMs6t886JA7xForX/q/xM2vpA4Z3RA== dependencies: - "@syndicate-lang/compiler" "^0.11.3" - "@syndicate-lang/core" "^0.11.4" + "@syndicate-lang/compiler" "^0.11.6" + "@syndicate-lang/core" "^0.12.0" "@syndicate-lang/tsc@*": - version "0.11.5" - resolved "https://registry.yarnpkg.com/@syndicate-lang/tsc/-/tsc-0.11.5.tgz#67155080f357628b12014b842e00ceae8579e9d8" - integrity sha512-hOwQp7rFiwNaLj6r0LtdUEKe5eql8elWQuQDUbSz5DJ0mHuURDu4BdEH2yLdQEn1lyHz50R4Ze8UcLli4sIabA== + version "0.11.12" + resolved "https://registry.yarnpkg.com/@syndicate-lang/tsc/-/tsc-0.11.12.tgz#125e2af9e2d529587ad28e1d168f57960d6a0a35" + integrity sha512-ICHsGamBdanY13C9PwWgfgwzOgi3Vt9fOAtmTRX1E2TR1dAC4AbeGPFelgjVYASo3HXzuwliznxdh8MxlDY6fg== dependencies: - "@syndicate-lang/compiler" "^0.11.3" - "@syndicate-lang/core" "^0.11.4" + "@syndicate-lang/compiler" "^0.11.6" + "@syndicate-lang/core" "^0.12.0" glob "^7.1.6" yargs "^16.2.0" @@ -88,15 +88,20 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/minimatch@*", "@types/minimatch@^3.0": +"@types/minimatch@*": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/minimatch@^3.0": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/node@*": - version "17.0.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.12.tgz#f7aa331b27f08244888c47b7df126184bc2339c5" - integrity sha512-4YpbAsnJXWYK/fpTVFlMIcUIho2AYCi4wg5aNPrG1ng7fn/1/RZfCIpRCiBX+12RVa34RluilnvCqD+g3KiSiA== + version "18.11.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.19.tgz#35e26df9ec441ab99d73e99e9aca82935eea216d" + integrity sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw== ansi-regex@^5.0.1: version "5.0.1" @@ -111,9 +116,9 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: color-convert "^2.0.1" anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -200,12 +205,12 @@ commander@^7.2: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== emoji-regex@^8.0.0: version "8.0.0" @@ -232,7 +237,7 @@ fill-range@^7.0.1: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.2" @@ -252,14 +257,14 @@ glob-parent@~5.1.2: is-glob "^4.0.1" glob@^7.1, glob@^7.1.6: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" @@ -271,7 +276,7 @@ has-flag@^4.0.0: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -291,7 +296,7 @@ is-binary-path@~2.1.0: is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -310,10 +315,10 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -minimatch@^3.0, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@^3.0, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" @@ -325,14 +330,14 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2: version "2.3.1" @@ -349,7 +354,7 @@ readdirp@~3.6.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== rollup-plugin-sourcemaps@^0.6: version "0.6.3" @@ -360,9 +365,9 @@ rollup-plugin-sourcemaps@^0.6: source-map-resolve "^0.6.0" rollup@^2.60: - version "2.66.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.66.1.tgz#366b0404de353c4331d538c3ad2963934fcb4937" - integrity sha512-crSgLhSkLMnKr4s9iZ/1qJCplgAgrRY+igWv8KhG/AjKOJ0YX/WpmANyn8oxrw+zenF3BXWDLa7Xl/QZISH+7w== + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== optionalDependencies: fsevents "~2.3.2" @@ -404,10 +409,10 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -typescript@^4.5: - version "4.5.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" - integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== +typescript@^4.9: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== wrap-ansi@^7.0.0: version "7.0.0" @@ -421,7 +426,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== y18n@^5.0.5: version "5.0.8" diff --git a/packages/timer/src/index.ts b/packages/timer/src/index.ts index acb7e1a..87921be 100644 --- a/packages/timer/src/index.ts +++ b/packages/timer/src/index.ts @@ -1,16 +1,19 @@ /// SPDX-License-Identifier: GPL-3.0-or-later /// SPDX-FileCopyrightText: Copyright © 2016-2023 Tony Garnock-Jones -import { preserves, Observe, floatValue, Turn, Ref } from "@syndicate-lang/core"; +import { preserves, DoubleFloat, Observe, floatValue, Turn, Ref, Schemas } from "@syndicate-lang/core"; import { QuasiValue as Q } from "@syndicate-lang/core"; -export message type PeriodicTick(intervalMS); -export assertion type TimeLaterThan(deadlineMS); +export message type PeriodicTick(interval: DoubleFloat); -export function sleep(ds: Ref, ms: number, cb: () => void): void { +export const LaterThan = Schemas.timer.LaterThan; +export type LaterThan = Schemas.timer.LaterThan; + +export function sleep(ds: Ref, seconds: number, cb: () => void): void { react { at ds { - stop on asserted TimeLaterThan(+(new Date()) + ms) { + const deadline = +(new Date()) / 1000.0 + seconds; + stop on asserted LaterThan(deadline) { cb(); } } @@ -21,30 +24,30 @@ export function boot(ds: Ref) { spawn named 'timer/PeriodicTick' { at ds { during Observe({ - "pattern": :pattern PeriodicTick(\Q.lit($intervalMS)) - }) => spawn named (preserves`PeriodicTick(${intervalMS})`) { + "pattern": :pattern PeriodicTick(\Q.lit($interval: DoubleFloat)) + }) => spawn named (preserves`PeriodicTick(${interval})`) { const thisFacet = Turn.activeFacet; thisFacet.preventInertCheck(); const handle = setInterval(() => thisFacet.turn(() => { - send message PeriodicTick(intervalMS); - }), floatValue(intervalMS)); + send message PeriodicTick(interval); + }), floatValue(interval) * 1000.0); on stop clearInterval(handle); } } } - spawn named 'timer/TimeLaterThan' { + spawn named 'timer/LaterThan' { at ds { during Observe({ - "pattern": :pattern TimeLaterThan(\Q.lit($deadlineMS)) - }) => spawn named (preserves`TimeLaterThan(${deadlineMS})`) { + "pattern": :pattern LaterThan(\Q.lit($deadline: DoubleFloat)) + }) => spawn named (preserves`LaterThan(${deadline})`) { const thisFacet = Turn.activeFacet; thisFacet.preventInertCheck(); - let delta = floatValue(deadlineMS) - (+(new Date())); + let delta = floatValue(deadline) * 1000.0 - (+(new Date())); let handle: any | null = setTimeout(() => thisFacet.turn(() => { handle = null; react { - assert TimeLaterThan(deadlineMS); + assert LaterThan(floatValue(deadline)); } }), delta); on stop if (handle) { diff --git a/todo/driver-mdns/src/routes.js b/todo/driver-mdns/src/routes.js index bda3be6..c60056d 100644 --- a/todo/driver-mdns/src/routes.js +++ b/todo/driver-mdns/src/routes.js @@ -60,7 +60,7 @@ spawn named 'IPRouteDatabase' { return rec; }); react { - stop on message PeriodicTick(5000) refresh(); + stop on message PeriodicTick(5) refresh(); data.forEach((rec) => { const destnet = littleEndianHex(rec.Destination); const destmask = 32 - countZeroBits(littleEndianHex(rec.Mask)); diff --git a/todo/socks/src/service.js b/todo/socks/src/service.js index f05c4b7..3858791 100644 --- a/todo/socks/src/service.js +++ b/todo/socks/src/service.js @@ -96,7 +96,7 @@ spawn named 'docker-scan' { })); } on start scan(); - on message PeriodicTick(5000) scan(); + on message PeriodicTick(5) scan(); on message DockerContainers($containers0) { const containers = containers0.toJSON(); diff --git a/todo/syntax-playground/src/client.js b/todo/syntax-playground/src/client.js index ecaf853..a999b59 100644 --- a/todo/syntax-playground/src/client.js +++ b/todo/syntax-playground/src/client.js @@ -33,7 +33,7 @@ spawn named 'demo' { console.log(data); } - on message PeriodicTick(1000) { + on message PeriodicTick(1) { send WS.DataOut(wsId, Bytes.from(genUuid('timestamp'))); } } diff --git a/todo/syntax-playground/src/mc.js b/todo/syntax-playground/src/mc.js index 192ca4d..3a56199 100644 --- a/todo/syntax-playground/src/mc.js +++ b/todo/syntax-playground/src/mc.js @@ -38,7 +38,7 @@ spawn named 'multicast_demo' { console.log('Got', body, 'from', host, port); } - on message PeriodicTick(2000) { + on message PeriodicTick(2) { send U.UdpPacket(HANDLE, U.UdpPeer(GROUP_ADDRESS, PORT), genUuid('timestamp')); } } diff --git a/todo/syntax-playground/src/worker_employee.js b/todo/syntax-playground/src/worker_employee.js index f1195fe..503a06a 100644 --- a/todo/syntax-playground/src/worker_employee.js +++ b/todo/syntax-playground/src/worker_employee.js @@ -41,7 +41,7 @@ spawn named 'workerMain' { assert Outbound(Tack(me + ' ' + this.count)); - on message PeriodicTick(1000) { + on message PeriodicTick(1) { console.log('tick', me, this.count); send Outbound(Tick(me, this.count++)); }