Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- HouseChat by houseofkraft
- ]]--
- --[[
- NOTE: This version of HouseChat is outdated. You can access the newer version by using this link:
- http://pastebin.com/uAqJU632
- ]]--
- local args = { ... }
- local sides = rs.getSides()
- if #args < 1 then
- printError("Usages:")
- printError("housechat host <server>")
- printError("housechat join <server> <username>")
- return
- end
- -- Modem checking
- local modemFound = false
- for k,v in pairs(sides) do
- if peripheral.getType(v) == "modem" then
- rednet.open(v)
- modemFound = true
- end
- end
- if not modemFound then
- printError("No modem found!")
- return
- end
- -- Client Functions
- local function findID(server)
- info = {server}
- rednet.broadcast("findID", info)
- id, message = rednet.receive()
- if message == "found" then
- local sid = id
- end
- return sid
- end
- local function sendMessage(server, username, message)
- info = {username, message}
- local sid = findID(server)
- rednet.send(sid, "sendMessage", info)
- end
- local function joinServer(server, user)
- local sid = findID(server)
- if sid then
- info = {server, user}
- rednet.send(sid, "connect", info)
- else
- return false
- end
- end
- local function leaveServer(server, user)
- local sid = findID(server)
- if sid then
- info = {server, user}
- rednet.send(sid, "leave", info)
- end
- end
- if args[1] == "host" then
- if #args < 2 then
- printError("Usage: housechat host <server>")
- return
- end
- local sUsers = {}
- local nUsers = 0
- local sIDs = {}
- local sName = args[2]
- local function handle()
- while true do
- id, message, info = rednet.receive()
- if message == "findID" then
- local server = info[1]
- if server == sName then
- rednet.send(id, "found")
- end
- elseif message == "connect" then
- local server = info[1]
- local user = info[2]
- if server == sName then
- nUsers = nUsers + 1
- table.insert(sUsers, user)
- table.insert(sIDs, id)
- username = "Console"
- sendMessage(server, username, "* "..user.." has joined "..sName)
- end
- elseif message == "leave" then
- local server = info[1]
- local user = info[2]
- if server == sName then
- nUsers = nUsers - 1
- username = "Console"
- sendMessage(server, username, "* "..user.." has left "..sName)
- for k,v in pairs(sUsers) do
- -- Trying to find where the user is in the table
- if v == user then
- table.remove(sUsers, k)
- end
- end
- end
- for k,v in pairs(sIDs) do
- -- Once again, trying to find where the user's ID is in the table
- if v == id then
- table.remove(sIDs, k)
- end
- end
- elseif message == "sendMessage" then
- for k,v in pairs(sIDs) do
- local username = info[1]
- local m = info[2]
- info = {username, m}
- rednet.send(tonumber(v), "newMessage", info)
- end
- end
- end
- end
- local function display()
- while true do
- term.clear()
- term.setCursorPos(1,1)
- if nUsers == 1 then
- print("1 user connected")
- else
- print(nUsers.." users connected")
- end
- print()
- write("Users:")
- if #sUsers == 1 then
- for k,v in pairs(sUsers) do
- write(" "..v)
- end
- else
- for k,v in pairs(sUsers) do
- write(" "..v..",")
- end
- end
- os.sleep(0)
- end
- end
- parallel.waitForAll(handle, display)
- elseif args[1] == "join" then
- local server = args[2]
- local us = args[3]
- joinServer(server, us)
- term.clear()
- term.setCursorPos(1,1)
- local function receive()
- term.clear()
- while true do
- term.setCursorPos(1,1)
- id, message, info = rednet.receive()
- if message == "newMessage" then
- local u = info[1]
- local m = info[2]
- if u == "Console" then
- term.setTextColor(colors.yellow)
- print(m)
- else
- term.setTextColor(colors.white)
- print("<"..u.."> "..m)
- end
- end
- end
- end
- receive()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement