Making Samples executable. #!/usr/bin/env io and chmod a+x *.io
[io/jrb1.git] / addons / Socket / samples / ChatServer.io
blob781de07745369bde0ff002865bbc06261f2488bf
1 #!/usr/bin/env io
3 // A simple chat server
5 ChatClient := Object clone
6 ChatClient handleSocketFromServer := method(aSocket, aServer,
7 self server := aServer
8 self socket := aSocket
9 self name := "Unnamed"
10 while(aSocket isOpen,
11 if(aSocket read,
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", "")
24 return
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,
46 write(text)
47 clients foreach(client, if (client != senderClient, client send(text)))
51 server := ChatServer
52 port := 8405
53 write("Chat server starting on port ", port, "\n")
54 server setPort(port) start