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    

Impressum / About Us