Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- HouseChat by houseofkraft
- ]]--
- local args = { ... }
- local sides = rs.getSides()
- if #args < 1 then
- printError("Usages:")
- printError("housechat host <server>")
- printError("housechat join <server> <username>")
- error()
- 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 modemFound == false then
- printError("No modem found!")
- error()
- end
- -- Client Functions
- local function connect(user, server)
- info = {user, server}
- rednet.broadcast("connect", info)
- end
- local function leave(user, server)
- info = {user, server}
- rednet.broadcast("leave", info)
- end
- local function sendMessage(user, message, server)
- info = {user, message, server}
- rednet.broadcast("sendMessage", info)
- end
- if args[1] == "host" then
- if #args < 2 then
- printError("Usage: housechat host <server>")
- error()
- end
- local sName = args[2]
- local nUsers = 0
- local sUsers = {}
- local sIDs = {}
- local function operate()
- while true do
- id, message, info = rednet.receive()
- if message == "connect" then
- local user = info[1]
- local server = info[2]
- if server == sName then
- nUsers = nUsers + 1
- table.insert(sIDs, id)
- table.insert(sUsers, user)
- local wmsg = "* "..user.." has joined "..sName
- sendMessage("Console", wmsg, sName)
- end
- elseif message == "leave" then
- local user = info[1]
- local server = info[2]
- if server == sName then
- nUsers = nUsers - 1
- for k,v in pairs(sUsers) do
- if v == user then
- table.remove(sUsers, k)
- end
- end
- for k,v in pairs(sIDs) do
- if tostring(v) == tostring(id) then
- table.remove(sIDs, k)
- end
- end
- local bmsg = "* "..user.." has left "..sName
- sendMessage("Console", bmsg, sName)
- end
- elseif message == "sendMessage" then
- local u = info[1]
- local m = info[2]
- local s = info[3]
- if server == sName then
- info = {u, m, s}
- for k,v in pairs(sIDs) do
- rednet.send(tonumber(v), "newMessage", info)
- end
- end
- end
- end
- end
- local function display()
- while true do
- term.clear()
- term.setCursorPos(1,1)
- print(nUsers.." users connected")
- os.sleep(0)
- end
- end
- parallel.waitForAll(operate, display)
- elseif args[1] == "join" then
- if #args < 3 then
- printError("Usage: housechat join <server> <username>")
- error()
- end
- connect(args[3], args[2])
- local server = args[2]
- local username = args[3]
- local function receive()
- while true do
- id, message, info = rednet.receive()
- local u = info[1]
- local m = info[2]
- local s = info[3]
- if s == server then
- if u == "Console" then
- term.setTextColor(colors.yellow)
- print(m)
- term.setTextColor(colors.white)
- else
- term.setTextColor(colors.white)
- print("<"..u.."> "..m)
- end
- end
- end
- end
- local function send()
- while true do
- local w, h = term.getSize()
- term.setCursorPos(1, h)
- msg = read()
- if msg == "/logout" then
- leave(username, server)
- else
- sendMessage(username, msg, server)
- print("<"..username.."> "..msg)
- end
- end
- end
- parallel.waitForAll(receive, send)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement