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 /samples | |
| 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.
Diffstat (limited to 'samples')
| -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 |
