3 // A simple chat server
5 ChatClient
:= Object clone
6 ChatClient handleSocketFromServer
:= method(aSocket
, aServer
,
12 text
:= aSocket readBuffer asString
13 self handleCommand(text
)
15 aSocket readBuffer empty
17 server
removeClient(self)
18 write("[Closed connection from ", socket host
, "]\n")
21 ChatClient handleCommand
:= method(text
,
22 if (text
beginsWithSeq("name:"),
23 self name
:= text
substring(6, -1) replace("\n", "") replace("\r", "")
26 server
broadcastFrom(name
.. ": " .. text
, self)
29 ChatClient send
:= method(text
, socket
write(text
))
33 ChatServer
:= Server clone
34 ChatServer clients
:= List clone
35 ChatServer init
:= method(self clients
:= List clone)
37 ChatServer handleSocket
:= method(aSocket
,
38 write("[Accepted connection from ", aSocket host
, "]\n")
39 client
:= ChatClient
clone
40 clients
append(client
)
41 client
@handleSocketFromServer(aSocket
, self)
43 ChatServer removeClient
:= method(client
, clients
remove(client
))
45 ChatServer broadcastFrom
:= method(text
, senderClient
,
47 clients
foreach(client
, if (client
!= senderClient
, client
send(text
)))
53 write("Chat server starting on port ", port
, "\n")
54 server
setPort(port
) start