From ef3879297018ce32e4cda7de56869f31377bc675 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Wed, 16 Aug 2023 10:57:14 +0100 Subject: [PATCH] Update for Nim-2.0.0 --- shell.nix | 2 +- src/msg.nim | 19 +++++++++++-------- src/net_mapper.nim | 22 ++++++++++------------ src/nim.cfg | 1 + src/syndex_card.nim | 9 ++++++--- syndicate_utils.nimble | 2 +- 6 files changed, 30 insertions(+), 25 deletions(-) create mode 100644 src/nim.cfg diff --git a/shell.nix b/shell.nix index 160e711..19e4f60 100644 --- a/shell.nix +++ b/shell.nix @@ -2,4 +2,4 @@ let syndicate = builtins.getFlake "syndicate"; pkgs = import { overlays = builtins.attrValues syndicate.overlays; }; -in pkgs.nimPackages.syndicate_utils +in pkgs.nim2Packages.syndicate_utils diff --git a/src/msg.nim b/src/msg.nim index 74df70c..576d867 100644 --- a/src/msg.nim +++ b/src/msg.nim @@ -9,17 +9,20 @@ proc unixSocketPath: Unix = if result.path == "": result.path = getEnv("XDG_RUNTIME_DIR", "/run/user/1000") / "dataspace" -proc envStep: Preserve[Ref] = +proc envStep: Assertion = var s = getEnv("SYNDICATE_STEP") - if s != "": parsePreserves(s, Ref) - else: capabilities.mint().toPreserve(Ref) + if s != "": parsePreserves(s, Cap) + else: capabilities.mint().toPreserve(Cap) + proc main = - let label = getAppFilename().extractFilename - discard bootDataspace(label) do (root: Ref; turn: var Turn): - let step = envStep() - connect(turn, unixSocketPath(), step) do (turn: var Turn; ds: Ref): - message(turn, ds, initRecord(label, map(commandLineParams(), parsePreserves))) + let + step = envStep() + label = getAppFilename().extractFilename + data = map(commandLineParams(), parsePreserves) + discard bootDataspace(label) do (root: Cap; turn: var Turn): + connect(turn, unixSocketPath(), step) do (turn: var Turn; ds: Cap): + message(turn, ds, initRecord(label, data)) for _ in 1..4: poll() quit() diff --git a/src/net_mapper.nim b/src/net_mapper.nim index 7da129e..efd8d45 100644 --- a/src/net_mapper.nim +++ b/src/net_mapper.nim @@ -3,15 +3,12 @@ ## A ping utility for Syndicate. -import std/[asyncdispatch, asyncnet, math, monotimes, nativesockets, net, os, strutils, tables, times] +import std/[asyncdispatch, asyncnet, monotimes, nativesockets, net, os, strutils, tables, times] import preserves import syndicate, syndicate/patterns import ./schema/net_mapper -type ListenOn* {.preservesRecord: "listen-on".} = ref object - dataspace: Preserve[Ref] - #[ var SOL_IP {.importc, nodecl, header: "".}: int @@ -71,7 +68,7 @@ proc match(a, b: IcmpEchoFields): bool = type Pinger = ref object facet: Facet - ds: Ref + ds: Cap rtt: RoundTripTime rttHandle: Handle sum: Duration @@ -82,7 +79,7 @@ type sadLen: SockLen interval: Duration -proc newPinger(address: IpAddress; facet: Facet; ds: Ref): Pinger = +proc newPinger(address: IpAddress; facet: Facet; ds: Cap): Pinger = result = Pinger( facet: facet, ds: ds, @@ -138,10 +135,11 @@ proc exchangeEcho(ping: Pinger) {.async.} = else: stderr.writeLine "reply data has a bad length ", data.len -proc kick(ping: Pinger) = +proc kick(ping: Pinger) {.gcsafe.} = if not ping.socket.isClosed: addTimer(ping.interval.inMilliseconds.int, oneshot = true) do (fd: AsyncFD) -> bool: - exchangeEcho(ping).addCallback do (fut: Future[void]): + let fut = exchangeEcho(ping) + fut.addCallback do (): if fut.failed and ping.rttHandle != Handle(0): ping.facet.run do (turn: var Turn): retract(turn, ping.rttHandle) @@ -153,13 +151,13 @@ proc kick(ping: Pinger) = ping.interval = ping.interval * 2 kick(ping) -type RefArgs {.preservesDictionary.} = object - dataspace: Ref +type Args {.preservesDictionary.} = object + dataspace: Cap -runActor("main") do (root: Ref; turn: var Turn): +runActor("net_mapper") do (root: Cap; turn: var Turn): connectStdio(root, turn) let rttObserver = ?Observe(pattern: !RoundTripTime) ?? {0: grabLit()} - during(turn, root, ?RefArgs) do (ds: Ref): + during(turn, root, ?Args) do (ds: Cap): during(turn, ds, rttObserver) do (address: IpAddress): var ping: Pinger if address.family == IpAddressFamily.IPv4: diff --git a/src/nim.cfg b/src/nim.cfg new file mode 100644 index 0000000..e17d20a --- /dev/null +++ b/src/nim.cfg @@ -0,0 +1 @@ +threads:off diff --git a/src/syndex_card.nim b/src/syndex_card.nim index e9d38ae..c9a1b6c 100644 --- a/src/syndex_card.nim +++ b/src/syndex_card.nim @@ -107,14 +107,17 @@ setControlCHook: quit() proc main = - let pat = inputPattern() + let + unix = unixSocketPath() + step = envStep() + pat = inputPattern() if stdout.is_a_TTY: illwillInit() hideCursor() discard bootDataspace("syndex_card") do (ds: Cap; turn: var Turn): - connect(turn, unixSocketPath(), envStep()) do (turn: var Turn; ds: Cap): + connect(turn, unix, step) do (turn: var Turn; ds: Cap): var termBuf = newTerminalBuffer(terminalWidth(), terminalHeight()) termBuf.write(1, 1, $pat, styleBright) termBuf.drawHorizLine(1, termBuf.width(), 2) @@ -132,7 +135,7 @@ proc main = else: let entity = DumpEntity() runActor("syndex_card") do (root: Cap; turn: var Turn): - connect(turn, unixSocketPath(), envStep()) do (turn: var Turn; ds: Cap): + connect(turn, unix, step) do (turn: var Turn; ds: Cap): discard observe(turn, ds, pat, entity) main() diff --git a/syndicate_utils.nimble b/syndicate_utils.nimble index 430f9d7..f3575b2 100644 --- a/syndicate_utils.nimble +++ b/syndicate_utils.nimble @@ -1,6 +1,6 @@ # Package -version = "20230801" +version = "20230816" author = "Emery Hemingway" description = "Utilites for Syndicated Actors and Synit" license = "unlicense"