Chat server
Chat server is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Write a server for a minimal text based chat. People should be able to connect via 'telnet', sign on with a nickname, and type messages which will then be seen by all other connected users. Arrivals and departures of chat members should generate appropriate notification messages.
PicoLisp
<lang PicoLisp>#!/usr/bin/picolisp /usr/lib/picolisp/lib.l
(de chat Lst
(out *Sock (mapc prin Lst) (prinl) ) )
(setq *Port (port 4004))
(loop
(setq *Sock (listen *Port)) (NIL (fork) (close *Port)) (close *Sock) )
(out *Sock
(prin "Please enter your name: ") (flush) )
(in *Sock (setq *Name (line T)))
(tell 'chat "+++ " *Name " arrived +++")
(task *Sock
(in @ (ifn (eof) (tell 'chat *Name "> " (line T)) (tell 'chat "--- " *Name " left ---") (bye) ) ) )
(wait)</lang> After starting the above script, connect to the chat server from two terminals:
Terminal 1 | Terminal 2 ---------------------------------+--------------------------------- $ telnet localhost 4004 | Trying ::1... | Trying 127.0.0.1... | Connected to localhost. | Escape character is '^]'. | Please enter your name: Ben | | $ telnet localhost 4004 | Trying ::1... | Trying 127.0.0.1... | Connected to localhost. | Escape character is '^]'. | Please enter your name: Tom +++ Tom arrived +++ | Hi Tom | | Ben> Hi Tom | Hi Ben Tom> Hi Ben | | How are you? Tom> How are you? | Thanks, fine! | | Ben> Thanks, fine! | See you! Tom> See you! | | ^] | telnet> quit --- Tom left --- | | Connection closed. | $