moonbridge
changeset 123:20e0d4f51381
Updated chat example
author | bsw |
---|---|
date | Sat Apr 11 00:20:33 2015 +0200 (2015-04-11) |
parents | 3bbcd75eefcd |
children | 61a2f55b3538 |
files | example_application.lua |
line diff
1.1 --- a/example_application.lua Sat Apr 11 00:18:12 2015 +0200 1.2 +++ b/example_application.lua Sat Apr 11 00:20:33 2015 +0200 1.3 @@ -37,82 +37,80 @@ 1.4 1.5 for conn, client in pairs(clients) do 1.6 1.7 - repeat 1.8 - local line = conn:read_nb(nil, "\n") 1.9 - if not line then 1.10 - clients[conn] = nil 1.11 - io_listener[conn] = nil 1.12 + local line = conn:read_nb(nil, "\n") 1.13 + if not line then 1.14 + clients[conn] = nil 1.15 + io_listener[conn] = nil 1.16 1.17 - elseif line ~= "" then 1.18 - local line, terminator = line:match("([^\n]*)(\n?)") 1.19 + elseif line ~= "" then 1.20 + local line, terminator = line:match("([^\n]*)(\n?)") 1.21 + 1.22 + if terminator ~= "\n" then 1.23 + client.read_buffer = client.read_buffer .. line 1.24 + else 1.25 + local line = client.read_buffer .. line 1.26 + client.read_buffer = "" 1.27 1.28 - if terminator ~= "\n" then 1.29 - client.read_buffer = client.read_buffer .. line 1.30 - else 1.31 - local line = client.read_buffer .. line 1.32 - client.read_buffer = "" 1.33 - 1.34 - if not client.type then 1.35 - if line == "events" then 1.36 - client.type = "events" 1.37 - client.session = "sesam" .. math.random(10000000,99999999) 1.38 - client.name = "user".. math.random(10000000,99999999) 1.39 - client.last_msg = 0 1.40 - client.send_session = true 1.41 - client.send_name = true 1.42 - client.last_msg = #msgs 1.43 - sessions[client.session] = conn 1.44 - io_listener[conn] = nil 1.45 + if not client.type then 1.46 + if line == "events" then 1.47 + client.type = "events" 1.48 + client.session = "sesam" .. math.random(10000000,99999999) 1.49 + client.name = "user".. math.random(10000000,99999999) 1.50 + client.last_msg = 0 1.51 + client.send_session = true 1.52 + client.send_name = true 1.53 + client.last_msg = #msgs 1.54 + sessions[client.session] = conn 1.55 + io_listener[conn] = nil 1.56 + else 1.57 + client.type = "chat" 1.58 + if sessions[line] then 1.59 + client.session = line 1.60 + io_listener[conn] = true 1.61 else 1.62 - client.type = "chat" 1.63 - if sessions[line] then 1.64 - client.session = line 1.65 - io_listener[conn] = true 1.66 - else 1.67 - conn:close() 1.68 - clients[conn] = nil 1.69 - end 1.70 + conn:close() 1.71 + clients[conn] = nil 1.72 end 1.73 - else 1.74 - if client.type == "chat" then 1.75 - local event_client = clients[sessions[client.session]] 1.76 - local command, arg = line:match("([^:]+):(.*)") 1.77 - if not command then 1.78 - elseif command == "NAME" then 1.79 - local name = arg 1.80 - local success 1.81 - repeat 1.82 - success = true 1.83 - for conn2, client2 in pairs(clients) do 1.84 - if client2.name == name then 1.85 - name = name .. math.random(0,9) 1.86 - success = false 1.87 - break 1.88 - end 1.89 + end 1.90 + else 1.91 + if client.type == "chat" then 1.92 + local event_client = clients[sessions[client.session]] 1.93 + local command, arg = line:match("([^:]+):(.*)") 1.94 + if not command then 1.95 + elseif command == "NAME" then 1.96 + local name = arg 1.97 + local success 1.98 + repeat 1.99 + success = true 1.100 + for conn2, client2 in pairs(clients) do 1.101 + if client2.name == name then 1.102 + name = name .. math.random(0,9) 1.103 + success = false 1.104 + break 1.105 end 1.106 - until success 1.107 + end 1.108 + until success 1.109 + last_msg = last_msg + 1 1.110 + msgs[last_msg] = { 1.111 + name = event_client.name, 1.112 + msg = "is now known as " .. name 1.113 + } 1.114 + event_client.name = name 1.115 + event_client.send_name = true 1.116 + elseif command == "MSG" then 1.117 + if #arg > 0 then 1.118 last_msg = last_msg + 1 1.119 msgs[last_msg] = { 1.120 name = event_client.name, 1.121 - msg = "is now known as " .. name 1.122 + msg = arg 1.123 } 1.124 - event_client.name = name 1.125 - event_client.send_name = true 1.126 - elseif command == "MSG" then 1.127 - if #arg > 0 then 1.128 - last_msg = last_msg + 1 1.129 - msgs[last_msg] = { 1.130 - name = event_client.name, 1.131 - msg = arg 1.132 - } 1.133 - end 1.134 end 1.135 end 1.136 - 1.137 end 1.138 + 1.139 end 1.140 end 1.141 - until not line or line == "" 1.142 + end 1.143 end 1.144 1.145 for conn, client in pairs(clients) do 1.146 @@ -142,7 +140,7 @@ 1.147 1.148 end 1.149 1.150 - moonbridge_io.poll(io_listener, io_writer) 1.151 + moonbridge_io.poll(io_listener, io_writer, 5) 1.152 1.153 end 1.154