#!/bin/bash set -euo pipefail . $(dirname "$0")/../lib/syndicate.sh demo_ds_resolved() { local oid="$(ds_project "$ds_event" '^ assert . 0 .embedded . 1')" if [ -n "$oid" ] then ds_ref="#![1 $oid]" echo "Dataspace: $ds_ref" username="user$$" declare -A demo_user_presence demo_presence() { case $(ds_project "$ds_event" .^) in assert) local h="$(ds_project "$ds_event" '. 1')" local who="$(ds_project "$ds_event" '. 0 . 0')" demo_user_presence[$h]="$who" echo "JOIN: $who" ;; retract) local h="$(ds_project "$ds_event" '. 0')" local who="${demo_user_presence[$h]}" echo "PART: $who" unset 'demo_user_presence[$h]' ;; esac } ds_object presence demo_presence ds_assert "$ds_ref" " {0: >}> $presence>" ds_assert "$ds_ref" "" demo_utterance() { ds_project "$ds_event" '^ message . 0' } ds_object utterance demo_utterance ds_assert "$ds_ref" " {0: > 1: >}> $utterance>" ds_flush ds_mainloop " ds_flush done ' \ 'ds_assert "#![1 0]" " $bootk>"'