Advertisement
ComputerMan123

HouseChat-RW

Nov 8th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.29 KB | None | 0 0
  1. --[[
  2. HouseChat by houseofkraft
  3. ]]--
  4.  
  5. local args = { ... }
  6. local sides = rs.getSides()
  7.  
  8. if #args < 1 then
  9.     printError("Usages:")
  10.     printError("housechat host <server>")
  11.     printError("housechat join <server> <username>")
  12.     error()
  13. end
  14.  
  15. -- Modem checking
  16. local modemFound = false
  17. for k,v in pairs(sides) do
  18.     if peripheral.getType(v) == "modem" then
  19.         rednet.open(v)
  20.         modemFound = true
  21.     end
  22. end
  23. if modemFound == false then
  24.     printError("No modem found!")
  25.     error()
  26. end
  27.  
  28. -- Client Functions
  29. local function connect(user, server)
  30.     info = {user, server}
  31.     rednet.broadcast("connect", info)
  32. end
  33.  
  34. local function leave(user, server)
  35.     info = {user, server}
  36.     rednet.broadcast("leave", info)
  37. end
  38.  
  39. local function sendMessage(user, message, server)
  40.     info = {user, message, server}
  41.     rednet.broadcast("sendMessage", info)
  42. end
  43.  
  44. if args[1] == "host" then
  45.     if #args < 2 then
  46.         printError("Usage: housechat host <server>")
  47.         error()
  48.     end
  49.     local sName = args[2]
  50.     local nUsers = 0
  51.     local sUsers = {}
  52.     local sIDs = {}
  53.     local function operate()
  54.         while true do
  55.             id, message, info = rednet.receive()
  56.             if message == "connect" then
  57.                 local user = info[1]
  58.                 local server = info[2]
  59.                 if server == sName then
  60.                     nUsers = nUsers + 1
  61.                     table.insert(sIDs, id)
  62.                     table.insert(sUsers, user)
  63.                     local wmsg = "* "..user.." has joined "..sName
  64.                     sendMessage("Console", wmsg, sName)
  65.                 end
  66.             elseif message == "leave" then
  67.                 local user = info[1]
  68.                 local server = info[2]
  69.                 if server == sName then
  70.                     nUsers = nUsers - 1
  71.                     for k,v in pairs(sUsers) do
  72.                         if v == user then
  73.                             table.remove(sUsers, k)
  74.                         end
  75.                     end
  76.                     for k,v in pairs(sIDs) do
  77.                         if tostring(v) == tostring(id) then
  78.                             table.remove(sIDs, k)
  79.                         end
  80.                     end
  81.                     local bmsg = "* "..user.." has left "..sName
  82.                     sendMessage("Console", bmsg, sName)
  83.                 end
  84.             elseif message == "sendMessage" then
  85.                 local u = info[1]
  86.                 local m = info[2]
  87.                 local s = info[3]
  88.                 if server == sName then
  89.                     info = {u, m, s}
  90.                     for k,v in pairs(sIDs) do
  91.                         rednet.send(tonumber(v), "newMessage", info)
  92.                     end
  93.                 end
  94.             end
  95.         end
  96.     end
  97.     local function display()
  98.         while true do
  99.             term.clear()
  100.             term.setCursorPos(1,1)
  101.             print(nUsers.." users connected")
  102.             os.sleep(0)
  103.         end
  104.     end
  105.     parallel.waitForAll(operate, display)
  106. elseif args[1] == "join" then
  107.     if #args < 3 then
  108.         printError("Usage: housechat join <server> <username>")
  109.         error()
  110.     end
  111.     connect(args[3], args[2])
  112.     local server = args[2]
  113.     local username = args[3]
  114.     local function receive()
  115.         while true do
  116.             id, message, info = rednet.receive()
  117.             local u = info[1]
  118.             local m = info[2]
  119.             local s = info[3]
  120.             if s == server then
  121.                 if u == "Console" then
  122.                     term.setTextColor(colors.yellow)
  123.                     print(m)
  124.                     term.setTextColor(colors.white)
  125.                 else
  126.                     term.setTextColor(colors.white)
  127.                     print("<"..u.."> "..m)
  128.                 end
  129.             end    
  130.         end
  131.     end
  132.     local function send()
  133.         while true do
  134.             local w, h = term.getSize()
  135.             term.setCursorPos(1, h)
  136.             msg = read()
  137.             if msg == "/logout" then
  138.                 leave(username, server)
  139.             else
  140.                 sendMessage(username, msg, server)
  141.                 print("<"..username.."> "..msg)
  142.             end
  143.         end
  144.     end
  145.     parallel.waitForAll(receive, send)
  146. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement