mirror of
https://github.com/kepler155c/opus
synced 2024-11-05 08:26:16 +00:00
70 lines
1.5 KiB
Lua
70 lines
1.5 KiB
Lua
|
local Event = require('event')
|
||
|
local Terminal = require('terminal')
|
||
|
local Util = require('util')
|
||
|
|
||
|
local colors = _G.colors
|
||
|
local modem = _G.device.wireless_modem
|
||
|
local term = _G.term
|
||
|
local textutils = _G.textutils
|
||
|
|
||
|
local terminal = Terminal.window(term.current())
|
||
|
terminal.setMaxScroll(300)
|
||
|
local oldTerm = term.redirect(terminal)
|
||
|
|
||
|
local function syntax()
|
||
|
error('Syntax: sniff [port]')
|
||
|
end
|
||
|
|
||
|
local port = ({ ... })[1] or syntax()
|
||
|
port = tonumber(port) or syntax()
|
||
|
|
||
|
Event.on('modem_message',
|
||
|
function(_, _, dport, _, data, _)
|
||
|
if dport == port then
|
||
|
terminal.scrollBottom()
|
||
|
terminal.setTextColor(colors.white)
|
||
|
print(textutils.serialize(data))
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
Event.on('mouse_scroll', function(_, direction)
|
||
|
if direction == -1 then
|
||
|
terminal.scrollUp()
|
||
|
else
|
||
|
terminal.scrollDown()
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
local function sniffer(_, _, data)
|
||
|
terminal.scrollBottom()
|
||
|
terminal.setTextColor(colors.yellow)
|
||
|
local ot = term.redirect(terminal)
|
||
|
print(textutils.serialize(data))
|
||
|
term.redirect(ot)
|
||
|
end
|
||
|
|
||
|
local socket = _G.transport.sockets[port]
|
||
|
if socket then
|
||
|
if not socket.sniffers then
|
||
|
socket.sniffers = { modem.transmit }
|
||
|
socket.transmit = function(...)
|
||
|
for _,v in pairs(socket.sniffers) do
|
||
|
v(...)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
table.insert(socket.sniffers, sniffer)
|
||
|
end
|
||
|
|
||
|
local s, m = pcall(Event.pullEvents)
|
||
|
|
||
|
if socket then
|
||
|
Util.removeByValue(socket.sniffers, sniffer)
|
||
|
end
|
||
|
|
||
|
term.redirect(oldTerm)
|
||
|
|
||
|
if not s and m then
|
||
|
error(m)
|
||
|
end
|