Advertisement
ComputerMan123

HouseChat

Nov 7th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.09 KB | None | 0 0
  1. --[[
  2.   HouseChat by houseofkraft
  3. ]]--
  4.  
  5. --[[
  6. NOTE: This version of HouseChat is outdated. You can access the newer version by using this link:
  7. http://pastebin.com/uAqJU632
  8. ]]--
  9.  
  10. local args = { ... }
  11. local sides = rs.getSides()
  12. if #args < 1 then
  13.      printError("Usages:")
  14.      printError("housechat host <server>")
  15.      printError("housechat join <server> <username>")
  16.      return
  17. end
  18.  
  19. -- Modem checking
  20. local modemFound = false
  21. for k,v in pairs(sides) do
  22.      if peripheral.getType(v) == "modem" then
  23.         rednet.open(v)
  24.         modemFound = true
  25.     end
  26. end
  27. if not modemFound then
  28.     printError("No modem found!")
  29.     return
  30. end
  31.  
  32. -- Client Functions
  33. local function findID(server)
  34.     info = {server}
  35.     rednet.broadcast("findID", info)
  36.     id, message = rednet.receive()
  37.      if message == "found" then
  38.         local sid = id
  39.      end
  40.     return sid
  41. end
  42.  
  43. local function sendMessage(server, username, message)
  44.   info = {username, message}
  45.   local sid = findID(server)
  46.   rednet.send(sid, "sendMessage", info)
  47. end
  48.  
  49. local function joinServer(server, user)
  50.     local sid = findID(server)
  51.   if sid then
  52.     info = {server, user}
  53.     rednet.send(sid, "connect", info)
  54.   else
  55.     return false
  56.   end
  57. end
  58.  
  59. local function leaveServer(server, user)
  60.      local sid = findID(server)
  61.      if sid then
  62.         info = {server, user}
  63.         rednet.send(sid, "leave", info)
  64.      end
  65. end
  66.  
  67. if args[1] == "host" then
  68.     if #args < 2 then
  69.         printError("Usage: housechat host <server>")
  70.         return
  71.      end
  72.      local sUsers = {}
  73.      local nUsers = 0
  74.      local sIDs = {}
  75.      local sName = args[2]
  76.      local function handle()
  77.           while true do
  78.              id, message, info = rednet.receive()
  79.              if message == "findID" then
  80.                 local server = info[1]
  81.                   if server == sName then
  82.                         rednet.send(id, "found")
  83.                end
  84.              elseif message == "connect" then
  85.                   local server = info[1]
  86.                   local user = info[2]
  87.                   if server == sName then
  88.                        nUsers = nUsers + 1
  89.                        table.insert(sUsers, user)
  90.                         table.insert(sIDs, id)
  91.                        username = "Console"
  92.                        sendMessage(server, username, "* "..user.." has joined "..sName)
  93.                     end
  94.             elseif message == "leave" then
  95.                     local server = info[1]
  96.                     local user = info[2]
  97.                     if server == sName then
  98.                         nUsers = nUsers - 1
  99.                         username = "Console"
  100.                         sendMessage(server, username, "* "..user.." has left "..sName)
  101.                         for k,v in pairs(sUsers) do
  102.                             -- Trying to find where the user is in the table
  103.                             if v == user then
  104.                                 table.remove(sUsers, k)
  105.                             end
  106.                         end
  107.                     end
  108.                     for k,v in pairs(sIDs) do
  109.                         -- Once again, trying to find where the user's ID is in the table
  110.                         if v == id then
  111.                             table.remove(sIDs, k)
  112.                         end
  113.                     end
  114.         elseif message == "sendMessage" then
  115.              for k,v in pairs(sIDs) do
  116.                   local username = info[1]
  117.                   local m = info[2]
  118.                   info = {username, m}
  119.                   rednet.send(tonumber(v), "newMessage", info)
  120.          end
  121.         end
  122.     end
  123.   end
  124.   local function display()
  125.         while true do
  126.             term.clear()
  127.             term.setCursorPos(1,1)
  128.             if nUsers == 1 then
  129.                     print("1 user connected")
  130.             else
  131.                     print(nUsers.." users connected")
  132.             end
  133.             print()
  134.             write("Users:")
  135.             if #sUsers == 1 then
  136.                 for k,v in pairs(sUsers) do
  137.                         write(" "..v)
  138.                     end
  139.             else
  140.                     for k,v in pairs(sUsers) do
  141.                         write(" "..v..",")
  142.                 end
  143.             end
  144.             os.sleep(0)
  145.         end
  146.   end
  147.   parallel.waitForAll(handle, display)        
  148. elseif args[1] == "join" then
  149.     local server = args[2]
  150.     local us = args[3]
  151.     joinServer(server, us)
  152.     term.clear()
  153.     term.setCursorPos(1,1)
  154.     local function receive()
  155.         term.clear()
  156.         while true do
  157.             term.setCursorPos(1,1)
  158.             id, message, info = rednet.receive()
  159.             if message == "newMessage" then
  160.                     local u = info[1]
  161.                     local m = info[2]
  162.                     if u == "Console" then
  163.                       term.setTextColor(colors.yellow)
  164.                       print(m)
  165.                     else
  166.                       term.setTextColor(colors.white)
  167.                       print("<"..u.."> "..m)
  168.                 end
  169.             end
  170.         end
  171.   end
  172.   receive()
  173. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement