aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Nehab <diego@tecgraf.puc-rio.br>2001-03-12 20:00:47 +0000
committerDiego Nehab <diego@tecgraf.puc-rio.br>2001-03-12 20:00:47 +0000
commit98a7e91de5ec69dc451e3a1f19ec47d29028af5a (patch)
tree7ca2cfe17fda30a33b044850cc120c952d803717
parent3f52ed5c533d644ebe49c11905f7f0ee2feaa118 (diff)
downloadluasocket-98a7e91de5ec69dc451e3a1f19ec47d29028af5a.tar.gz
luasocket-98a7e91de5ec69dc451e3a1f19ec47d29028af5a.tar.bz2
luasocket-98a7e91de5ec69dc451e3a1f19ec47d29028af5a.zip
Connection closed detection was improved. Client numbers are now tracked
and sent along with broadcasted line.
-rw-r--r--samples/tinyirc.lua32
1 files changed, 20 insertions, 12 deletions
diff --git a/samples/tinyirc.lua b/samples/tinyirc.lua
index 992b235..f38ab73 100644
--- a/samples/tinyirc.lua
+++ b/samples/tinyirc.lua
@@ -28,34 +28,42 @@ server2:timeout(1)
28server2.is_server = 1 28server2.is_server = 1
29 29
30set = {server1, server2} 30set = {server1, server2}
31number = 1
31 32
32while 1 do 33while 1 do
33 local r, s, e, l 34 local r, s, e, l, n
34 r, _, e = select(set, nil) 35 r, _, e = select(set, nil)
35 for i, v in r do 36 for i, v in r do
36 if v.is_server then 37 if v.is_server then
37 s = v:accept() 38 s = v:accept()
38 if s then 39 if s then
39 s:timeout(1) 40 s:timeout(1)
41 s.number = number
42 number = number + 1
40 set_add(set, s) 43 set_add(set, s)
41 write("Added new client. ", getn(set)-2, " total.\n") 44 write("Added client number ", s.number, ". ",
45 getn(set)-2, " total.\n")
42 end 46 end
43 else 47 else
44 l, e = v:receive() 48 l, e = v:receive()
49 n = v.number
45 if e then 50 if e then
46 v:close() 51 v:close()
47 set_remove(set, v) 52 set_remove(set, v)
48 write("Removed client. ", getn(set)-2, " total.\n") 53 write("Removed client number ", n, ". ",
49 end 54 getn(set)-2, " total.\n")
50 write("Broadcasting line '", tostring(l), "'.\n")
51 _, s, e = select(nil, set, 1)
52 if not e then
53 for i,v in s do
54 v:send(l, "\r\n")
55 end
56 else 55 else
57 write("No one ready to listen!!!\n") 56 write("Broadcasting line '", tostring(n), "> ",
58 end 57 tostring(l), "'.\n")
58 _, s, e = select(nil, set, 1)
59 if not e then
60 for i,v in s do
61 v:send(tostring(n), "> ", l, "\r\n")
62 end
63 else
64 write("No one ready to listen!!!\n")
65 end
66 end
59 end 67 end
60 end 68 end
61end 69end