diff --git a/imperative/examples/ircd/dynamic-main.rkt b/imperative/examples/ircd/dynamic-main.rkt new file mode 100644 index 0000000..41b4312 --- /dev/null +++ b/imperative/examples/ircd/dynamic-main.rkt @@ -0,0 +1,6 @@ +#lang imperative-syndicate +(require/activate imperative-syndicate/reload) +(spawn-reloader "config.rkt") +(spawn-reloader "session.rkt") +(spawn-reloader "channel.rkt") +(spawn-reloader "greeter.rkt") diff --git a/imperative/examples/ircd/greeter.rkt b/imperative/examples/ircd/greeter.rkt new file mode 100644 index 0000000..b8c8f70 --- /dev/null +++ b/imperative/examples/ircd/greeter.rkt @@ -0,0 +1,15 @@ +#lang imperative-syndicate + +(require "protocol.rkt") +(require "message.rkt") + +(require/activate imperative-syndicate/reload) + +(spawn #:name 'greeter + (stop-when-reloaded) + (on (asserted (ircd-channel-member $Ch $conn)) + (match-define (ircd-connection-info _ N U) + (immediate-query [query-value #f ($ I (ircd-connection-info conn _ _)) I])) + ;; TODO: history replay? As the following illustrates, we are able to forge messages + (send! (ircd-event conn (irc-message (irc-source-nick N U) "PRIVMSG" (list Ch) + (format "Welcome to ~a, ~a!" Ch N)))))) diff --git a/imperative/examples/ircd/irssi-config b/imperative/examples/ircd/irssi-config index 5af65cd..a829a4d 100644 --- a/imperative/examples/ircd/irssi-config +++ b/imperative/examples/ircd/irssi-config @@ -17,7 +17,7 @@ settings = { core = { real_name = "Tony Garnock-Jones"; user_name = "tonyg"; - nick = "two"; + nick = "client"; }; "fe-text" = { actlist_sort = "refnum"; }; }; diff --git a/imperative/examples/ircd/main.rkt b/imperative/examples/ircd/main.rkt index 69d1554..7da0661 100644 --- a/imperative/examples/ircd/main.rkt +++ b/imperative/examples/ircd/main.rkt @@ -1,7 +1,3 @@ #lang imperative-syndicate - (require/activate imperative-syndicate/reload) - -(spawn-reloader "config.rkt") -(spawn-reloader "session.rkt") -(spawn-reloader "channel.rkt") +(spawn-reloader "dynamic-main.rkt")