syndicate-nim/tests/chat.nim

46 lines
1.3 KiB
Nim
Raw Normal View History

2021-09-21 17:10:13 +00:00
# SPDX-FileCopyrightText: ☭ 2021 Emery Hemingway
# SPDX-License-Identifier: Unlicense
2021-10-29 14:55:49 +00:00
import std/[asyncdispatch, strutils]
2021-09-24 19:25:47 +00:00
import preserves, preserves/parse
import syndicate,
syndicate/[actors, capabilities, dataspaces, patterns, relay],
syndicate/protocols/[simpleChatProtocol]
2021-09-24 19:25:47 +00:00
from syndicate/protocols/protocol import Handle
from os import getCurrentProcessId
2021-09-21 17:10:13 +00:00
2021-10-28 17:43:56 +00:00
proc mint(): SturdyRef =
var key: array[16, byte]
mint(key, "syndicate")
2021-09-24 19:25:47 +00:00
waitFor runActor("chat") do (turn: var Turn):
2021-10-28 17:43:56 +00:00
let cap = mint()
2021-09-24 19:25:47 +00:00
connectUnix(turn, "/run/syndicate/ds", cap) do (turn: var Turn; a: Assertion) -> TurnAction:
let ds = unembed a
var
username: string
usernameHandle: Handle
proc updateUsername(turn: var Turn; u: string) =
username = u
2021-10-28 17:43:56 +00:00
var p = Present(username: username)
2021-09-24 19:25:47 +00:00
usernameHandle = replace(turn, ds,
2021-10-28 17:43:56 +00:00
usernameHandle, p)
2021-09-24 19:25:47 +00:00
updateUsername(turn, "user" & $getCurrentProcessId())
onPublish(turn, ds, Present ? {0: `?*`()}) do (username: string):
2021-10-29 14:55:49 +00:00
echo username, " arrived"
onRetract:
echo username, " left"
2021-10-29 14:55:49 +00:00
onMessage(turn, ds, Says ? {0: `?*`(), 1: `?*`()}) do (who: string; what: string):
2021-10-29 14:55:49 +00:00
echo who, ": ", what
2021-10-28 17:43:56 +00:00
message(turn, ds, Says(who: username, what: "hello"))
2021-09-24 19:25:47 +00:00
echo "actor completed"