SHOW:
|
|
- or go back to the newest paste.
1 | - | local default = "wss://osmarks.ml/ws/" |
1 | + | local m = peripheral.find "modem" |
2 | ||
3 | - | local ws, error, url |
3 | + | local function prompt(what, default) |
4 | write(what .. "> ") | |
5 | - | function connect() |
5 | + | local result = read() |
6 | - | ws, error = http.websocket(url) |
6 | + | if result == "" then |
7 | - | if error then |
7 | + | print("Defaulted to", textutils.serialise(default)) |
8 | - | print(error) |
8 | + | return default |
9 | - | else |
9 | + | |
10 | - | print "Connected" |
10 | + | return result |
11 | end | |
12 | ||
13 | local protocol = prompt("Protocol", nil) | |
14 | - | repeat |
14 | + | local sender = tonumber(prompt("Sender", os.getComputerID())) |
15 | - | write "URL> " |
15 | + | local recipient = tonumber(prompt("Recipient", rednet.CHANNEL_BROADCAST)) |
16 | - | url = read() |
16 | + | |
17 | m.open(rednet.CHANNEL_REPEAT) | |
18 | - | if url == "" then |
18 | + | |
19 | - | print("Defaulted to", default) |
19 | + | local function send(from, protocol, content, to) |
20 | - | url = default |
20 | + | local packet = { |
21 | nMessageID = math.random( 1, 2147483647 ), | |
22 | nRecipient = to, | |
23 | - | connect() |
23 | + | message = content, |
24 | - | until ws |
24 | + | sProtocol = protocol, |
25 | } | |
26 | - | function readWS() |
26 | + | |
27 | m.transmit(to, from, packet) | |
28 | - | print(ws.receive()) |
28 | + | m.transmit(rednet.CHANNEL_REPEAT, from, packet) |
29 | end | |
30 | ||
31 | local function receive() | |
32 | - | function send(msg) |
32 | + | local _, _, chan, replyChan, message = os.pullEvent "modem_message" |
33 | - | local ok = pcall(ws.send, msg) |
33 | + | return message.nRecipient, replyChan, message.message, message.sProtocol |
34 | end | |
35 | - | if not ok then |
35 | + | |
36 | - | print "Disconnected" |
36 | + | local function recvLoop() |
37 | - | connect() |
37 | + | |
38 | - | send(msg) |
38 | + | local recipient, sender, message, protocol = receive() |
39 | local text = sender .. ">" .. recipient | |
40 | if protocol then text = text .. " (" .. protocol .. ")" end | |
41 | text = text .. " " .. textutils.serialise(message) | |
42 | - | function writeWS() |
42 | + | print(text) |
43 | end | |
44 | - | sleep(0.2) -- so response can arrive |
44 | + | |
45 | ||
46 | - | local input = read() |
46 | + | local function sendLoop() |
47 | - | send(input) |
47 | + | |
48 | write "|> " | |
49 | local msg = read() | |
50 | send(sender, protocol, msg, recipient) | |
51 | - | parallel.waitForAll(writeWS, readWS) |
51 | + | |
52 | end | |
53 | ||
54 | parallel.waitForAll(sendLoop, recvLoop) |