1
0
mirror of https://github.com/ShadowKatStudios/OC-Minitel.git synced 2024-11-26 03:48:06 +11:00

Compare commits

..

6 Commits

Author SHA1 Message Date
7ed7452428 update the KOS NEO implementation to comply with new packet repeating behavior 2019-04-19 14:37:05 +10:00
e6e7a6b6b6 change wording to allow ignoring the receiving modem address if repeating packets 2019-04-19 14:28:05 +10:00
Izaya
02e4eb1794
Merge pull request #24 from booty-bumping/no-wired-repeat
Avoid repeating packets to the same wired interface
2019-04-19 14:00:51 +10:00
Izaya
9cdce20847
Merge pull request #25 from booty-bumping/add-editorconfig
Add .editorconfig
2019-04-19 13:58:14 +10:00
booty-bumping
0e2b3a9e91 add editorconfig 2019-04-18 03:49:20 -06:00
booty-bumping
b624918e88 avoid repeating packets to the same wired interface 2019-04-18 03:35:31 -06:00
4 changed files with 37 additions and 17 deletions

9
.editorconfig Normal file
View File

@ -0,0 +1,9 @@
root = true
[*]
charset = utf-8
insert_final_newline = true
[*.lua]
indent_style = space
indent_size = 1

View File

@ -40,10 +40,8 @@ sender: original sender of packet
data: the actual packet data, duh.
]]--
local listeners = {}
local timers = {}
local hostname = computer.address():sub(1,8)
local listener = false
local dbug = false
local modems = {}
local port = 4096
@ -112,7 +110,7 @@ local function genPacketID()
return npID
end
local function sendPacket(packetID,packetType,dest,sender,vport,data)
local function sendPacket(packetID,packetType,dest,sender,vport,data,repeatingFrom)
if rcache[dest] then
dprint("Cached", rcache[dest][1],"send",rcache[dest][2],port,packetID,packetType,dest,sender,vport,data)
if modems[rcache[dest][1]].type == "modem" then
@ -123,10 +121,14 @@ local function sendPacket(packetID,packetType,dest,sender,vport,data)
else
dprint("Not cached", port,packetID,packetType,dest,sender,vport,data)
for k,v in pairs(modems) do
-- do not send message back to the wired or linked modem it came from
-- the check for tunnels is for short circuiting `v.isWireless()`, which does not exist for tunnels
if v.address ~= repeatingFrom or (v.type ~= "tunnel" and v.isWireless()) then
if v.type == "modem" then
v.broadcast(port,packetID,packetType,dest,sender,vport,data)
v.broadcast(port,packetID,packetType,dest,sender,vPort,data)
elseif v.type == "tunnel" then
v.send(packetID,packetType,dest,sender,vport,data)
v.send(packetID,packetType,dest,sender,vPort,data)
end
end
end
end

View File

@ -19,10 +19,11 @@ local event = require "event"
local component = require "component"
local computer = require "computer"
local serial = require "serialization"
local hostname = computer.address():sub(1,8)
local listener = false
cfg.debug = false
local modems = {}
cfg.debug = false
cfg.port = 4096
cfg.retry = 10
cfg.retrycount = 64
@ -91,7 +92,9 @@ function start()
f:close()
end
print("Hostname: "..hostname)
if listener then return end
if next(listeners) ~= nil then return end
modems={}
for a,t in component.list("modem") do
modems[#modems+1] = component.proxy(a)
@ -112,7 +115,7 @@ function start()
return npID
end
local function sendPacket(packetID,packetType,dest,sender,vPort,data)
local function sendPacket(packetID,packetType,dest,sender,vPort,data,repeatingFrom)
if rcache[dest] then
dprint("Cached", rcache[dest][1],"send",rcache[dest][2],cfg.port,packetID,packetType,dest,sender,vPort,data)
if component.type(rcache[dest][1]) == "modem" then
@ -123,6 +126,9 @@ function start()
else
dprint("Not cached", cfg.port,packetID,packetType,dest,sender,vPort,data)
for k,v in pairs(modems) do
-- do not send message back to the wired or linked modem it came from
-- the check for tunnels is for short circuiting `v.isWireless()`, which does not exist for tunnels
if v.address ~= repeatingFrom or (v.type ~= "tunnel" and v.isWireless()) then
if v.type == "modem" then
v.broadcast(cfg.port,packetID,packetType,dest,sender,vPort,data)
elseif v.type == "tunnel" then
@ -131,6 +137,7 @@ function start()
end
end
end
end
local function pruneCache()
for k,v in pairs(rcache) do
@ -177,7 +184,7 @@ function start()
elseif dest:sub(1,1) == "~" then -- broadcasts start with ~
computer.pushSignal("net_broadcast",sender,vPort,data)
elseif cfg.route then -- repeat packets if route is enabled
sendPacket(packetID,packetType,dest,sender,vPort,data)
sendPacket(packetID,packetType,dest,sender,vPort,data,localModem)
end
if not rcache[sender] then -- add the sender to the rcache
dprint("rcache: "..sender..":", localModem,from,computer.uptime())
@ -233,10 +240,12 @@ end
function stop()
for k,v in pairs(listeners) do
event.ignore(k,v)
listeners[k] = nil
print("Stopped listener: "..tostring(v))
end
for k,v in pairs(timers) do
event.cancel(v)
timers[k] = nil
print("Stopped timer: "..tostring(v))
end
end

View File

@ -12,7 +12,7 @@ Upon a node receiving a message addressed to itself, it should:
2. Check if the packet is addressed to the node, and if so, queue it as a net_msg event
3. If the packet is indeed addressed to this node, and the packet type is 1 (reliable), send an acknowledgement packet.
4. Optional: Add the sender to the address cache if it isn't already in the cache
5. Optional: If the packet is addressed to a different node, repeat the packet, preferably respecting the address cache
5. Optional: If the packet is addressed to a different node, repeat the packet via all wireless modems and all wired/linked modems, preferably excluding the one receiving the packet, and preferably respecting the address cache
If the packet is, for some reason invalid, simply drop the packet.