forked from Hyperion/HyperionOS
super dupper system update (it runs)
This commit is contained in:
65
wip/SNIP/client/messenger.lua
Normal file
65
wip/SNIP/client/messenger.lua
Normal file
@@ -0,0 +1,65 @@
|
||||
local ws = http.websocket("wss://ip.astronand.dev")
|
||||
|
||||
local OP_DATA = 0x10
|
||||
|
||||
-- Example IPs (replace with assigned ones)
|
||||
local my_ip = {10,0,0,2}
|
||||
local peers = {}
|
||||
|
||||
local function pack_u32(n)
|
||||
return string.char(
|
||||
bit32.rshift(n,24) & 0xFF,
|
||||
bit32.rshift(n,16) & 0xFF,
|
||||
bit32.rshift(n,8) & 0xFF,
|
||||
n & 0xFF
|
||||
)
|
||||
end
|
||||
|
||||
local function pack_ip(ip)
|
||||
return string.char(ip[1], ip[2], ip[3], ip[4])
|
||||
end
|
||||
|
||||
local function send_chat(dst_ip, username, msg)
|
||||
local payload = "CHAT|" .. username .. "|" .. msg
|
||||
local packet =
|
||||
string.char(OP_DATA) ..
|
||||
pack_ip(my_ip) ..
|
||||
pack_ip(dst_ip) ..
|
||||
pack_u32(#payload) ..
|
||||
payload
|
||||
|
||||
ws.send(packet)
|
||||
end
|
||||
|
||||
-- Receiver
|
||||
local function receiver()
|
||||
while true do
|
||||
local msg = ws.receive()
|
||||
if msg then
|
||||
local op = string.byte(msg, 1)
|
||||
if op == OP_DATA then
|
||||
local payload = msg:sub(14)
|
||||
if payload:sub(1,5) == "CHAT|" then
|
||||
local _, _, user, text =
|
||||
payload:find("CHAT|(.-)|(.*)")
|
||||
print(user .. ": " .. text)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Sender
|
||||
local function sender()
|
||||
write("Username: ")
|
||||
local username = read()
|
||||
|
||||
while true do
|
||||
local msg = read()
|
||||
for _, ip in pairs(peers) do
|
||||
send_chat(ip, username, msg)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
parallel.waitForAny(receiver, sender)
|
||||
Reference in New Issue
Block a user