diff options
author | Diego Nehab <diego@tecgraf.puc-rio.br> | 2001-03-12 20:00:47 +0000 |
---|---|---|
committer | Diego Nehab <diego@tecgraf.puc-rio.br> | 2001-03-12 20:00:47 +0000 |
commit | 98a7e91de5ec69dc451e3a1f19ec47d29028af5a (patch) | |
tree | 7ca2cfe17fda30a33b044850cc120c952d803717 | |
parent | 3f52ed5c533d644ebe49c11905f7f0ee2feaa118 (diff) | |
download | luasocket-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.lua | 32 |
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) | |||
28 | server2.is_server = 1 | 28 | server2.is_server = 1 |
29 | 29 | ||
30 | set = {server1, server2} | 30 | set = {server1, server2} |
31 | number = 1 | ||
31 | 32 | ||
32 | while 1 do | 33 | while 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 |
61 | end | 69 | end |