diff options
| author | Diego Nehab <diego@tecgraf.puc-rio.br> | 2002-07-08 20:56:36 +0000 |
|---|---|---|
| committer | Diego Nehab <diego@tecgraf.puc-rio.br> | 2002-07-08 20:56:36 +0000 |
| commit | 112e51be589e5333c12787d4dd0d22fcb4f7ae8e (patch) | |
| tree | cb87ee248d4f3c95f4d94b280576df2a77a53b27 | |
| parent | c27087ca95e15ede5a2dcc0b160341fb9bed04ca (diff) | |
| download | luasocket-112e51be589e5333c12787d4dd0d22fcb4f7ae8e.tar.gz luasocket-112e51be589e5333c12787d4dd0d22fcb4f7ae8e.tar.bz2 luasocket-112e51be589e5333c12787d4dd0d22fcb4f7ae8e.zip | |
Sockets are not tables anymore.
| -rw-r--r-- | samples/tinyirc.lua | 71 |
1 files changed, 37 insertions, 34 deletions
diff --git a/samples/tinyirc.lua b/samples/tinyirc.lua index f38ab73..b0c4168 100644 --- a/samples/tinyirc.lua +++ b/samples/tinyirc.lua | |||
| @@ -20,49 +20,52 @@ if arg then | |||
| 20 | port2 = arg[3] or port2 | 20 | port2 = arg[3] or port2 |
| 21 | end | 21 | end |
| 22 | 22 | ||
| 23 | server1 = bind(host, port1) | 23 | server1, error = bind(host, port1) |
| 24 | if not server1 then print(error) exit() end | ||
| 24 | server1:timeout(1) | 25 | server1:timeout(1) |
| 25 | server1.is_server = 1 | 26 | server2, error = bind(host, port2) |
| 26 | server2 = bind(host, port2) | 27 | if not server2 then print(error) exit() end |
| 27 | server2:timeout(1) | 28 | server2:timeout(1) |
| 28 | server2.is_server = 1 | ||
| 29 | 29 | ||
| 30 | set = {server1, server2} | 30 | sock_set = {server1, server2} |
| 31 | number = 1 | 31 | |
| 32 | sock_id = {} | ||
| 33 | sock_id[server1] = 1 | ||
| 34 | sock_id[server2] = 2 | ||
| 35 | next_id = 3 | ||
| 32 | 36 | ||
| 33 | while 1 do | 37 | while 1 do |
| 34 | local r, s, e, l, n | 38 | local readable, _, error = select(sock_set, nil) |
| 35 | r, _, e = select(set, nil) | 39 | for _, sock in readable do |
| 36 | for i, v in r do | 40 | -- is it a server socket |
| 37 | if v.is_server then | 41 | if sock_id[sock] < 3 then |
| 38 | s = v:accept() | 42 | local incomming = sock:accept() |
| 39 | if s then | 43 | if incomming then |
| 40 | s:timeout(1) | 44 | incomming:timeout(1) |
| 41 | s.number = number | 45 | sock_id[incomming] = next_id |
| 42 | number = number + 1 | 46 | set_add(sock_set, incomming) |
| 43 | set_add(set, s) | 47 | write("Added client id ", next_id, ". ", |
| 44 | write("Added client number ", s.number, ". ", | 48 | getn(sock_set)-2, " total.\n") |
| 45 | getn(set)-2, " total.\n") | 49 | next_id = next_id + 1 |
| 46 | end | 50 | end |
| 51 | -- it is a client socket | ||
| 47 | else | 52 | else |
| 48 | l, e = v:receive() | 53 | local line, error = sock:receive() |
| 49 | n = v.number | 54 | local id = sock_id[sock] |
| 50 | if e then | 55 | if error then |
| 51 | v:close() | 56 | sock:close() |
| 52 | set_remove(set, v) | 57 | set_remove(sock_set, sock) |
| 53 | write("Removed client number ", n, ". ", | 58 | write("Removed client number ", id, ". ", |
| 54 | getn(set)-2, " total.\n") | 59 | getn(sock_set)-2, " total.\n") |
| 55 | else | 60 | else |
| 56 | write("Broadcasting line '", tostring(n), "> ", | 61 | write("Broadcasting line '", id, "> ", line, "'.\n") |
| 57 | tostring(l), "'.\n") | 62 | _, writable, error = select(nil, sock_set, 1) |
| 58 | _, s, e = select(nil, set, 1) | 63 | if not error then |
| 59 | if not e then | 64 | for _, outgoing in writable do |
| 60 | for i,v in s do | 65 | write("Sending to client ", sock_id[outgoing], "\n") |
| 61 | v:send(tostring(n), "> ", l, "\r\n") | 66 | outgoing:send(id, "> ", line, "\r\n") |
| 62 | end | 67 | end |
| 63 | else | 68 | else write("No one ready to listen!!!\n") end |
| 64 | write("No one ready to listen!!!\n") | ||
| 65 | end | ||
| 66 | end | 69 | end |
| 67 | end | 70 | end |
| 68 | end | 71 | end |
