Added stuff.
This commit is contained in:
parent
1f13436282
commit
50d8feba29
32
router.lua
32
router.lua
|
@ -4,6 +4,26 @@ modem, to act as a routing beacon in conjunction with managed switches.
|
|||
]]--
|
||||
local modem = peripheral.wrap("back") or error("Missing modem.")
|
||||
|
||||
local STATION_CHANNEL = 1
|
||||
|
||||
local function broadcastRoute(route)
|
||||
while true do
|
||||
modem.transmit(0, 42, route)
|
||||
os.sleep(0.5)
|
||||
end
|
||||
end
|
||||
|
||||
-- Repeats until we are within range of a station that's sending out its info.
|
||||
local function waitForStation(stationName)
|
||||
while true do
|
||||
local event, side, channel, replyChannel, msg, dist = os.pullEvent("modem_message")
|
||||
if channel == STATION_CHANNEL and msg == stationName and dist <= 16 then
|
||||
print("Arrived at station " .. stationName)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local args = {...}
|
||||
|
||||
local route = args
|
||||
|
@ -12,11 +32,7 @@ for _, branch in pairs(route) do
|
|||
print(" "..branch)
|
||||
end
|
||||
|
||||
local function sendRoute(route)
|
||||
modem.transmit(0, 42, route)
|
||||
end
|
||||
|
||||
while true do
|
||||
sendRoute(route)
|
||||
os.sleep(1)
|
||||
end
|
||||
parallel.waitForAny(
|
||||
function() broadcastRoute(route) end
|
||||
function() waitForStation(route[#route]) end
|
||||
)
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
--[[
|
||||
Stations are kiosks where users can configure their portable computer for a
|
||||
particular route to another station.
|
||||
]]--
|
||||
|
||||
local modem = peripheral.wrap("top") or error("Missing top modem")
|
||||
local CHANNEL = 1
|
||||
local STATION_NAME = "Test Station"
|
||||
|
||||
local function broadcastName()
|
||||
while true do
|
||||
modem.transmit(CHANNEL, CHANNEL, STATION_NAME)
|
||||
os.sleep(1)
|
||||
end
|
||||
end
|
||||
|
||||
parallel.waitForAll(
|
||||
broadcastName
|
||||
)
|
16
switcher.lua
16
switcher.lua
|
@ -1,16 +1,15 @@
|
|||
--[[
|
||||
This program is to be installed on a computer that controls a single rail
|
||||
junction. As a player with a portable computer approaches, that portable
|
||||
computer will be sending out a signal indicating their preferred switching
|
||||
configuration (the branch they're coming from, and the one they want to go to),
|
||||
and the junction's computer will then send a success reply.
|
||||
computer will be sending out a signal containing their route, and this switch
|
||||
will decode it and make any adjustments it needs to.
|
||||
]]--
|
||||
|
||||
local CONFIG_FILE = "switch_config.tbl"
|
||||
local CHANNEL = 0
|
||||
local config = nil
|
||||
|
||||
local modem = peripheral.wrap("top") or error("Missing modem")
|
||||
local modem = peripheral.wrap("top") or error("Missing top modem")
|
||||
if not modem.isWireless() then error("Wireless modem required") end
|
||||
modem.open(CHANNEL)
|
||||
|
||||
|
@ -33,6 +32,7 @@ local function configSetupWizard()
|
|||
print("Invalid range value. Should be a positive integer number. Got "..rangeStr)
|
||||
return nil
|
||||
end
|
||||
cfg.range = rangeInt
|
||||
end
|
||||
print("How many switch configurations are there? Usually 1 for each possible path of travel.")
|
||||
local switchCountStr = io.read()
|
||||
|
@ -103,8 +103,8 @@ local function loadConfig()
|
|||
local cfg = textutils.unserialize(f:read("*a"))
|
||||
f:close()
|
||||
print("Loaded configuration from file:")
|
||||
print(" "..tostring(#config.switches).." switch configurations.")
|
||||
print(" "..tostring(config.range).." block range.")
|
||||
print(" "..tostring(#cfg.switches).." switch configurations.")
|
||||
print(" "..tostring(cfg.range).." block range.")
|
||||
return cfg
|
||||
else
|
||||
print("File "..CONFIG_FILE.." doesn't exist. Start setup wizard? [y/n]")
|
||||
|
@ -156,6 +156,10 @@ end
|
|||
-- Handles incoming rail messages that consist of a list of branch names
|
||||
-- that the user would like to traverse.
|
||||
local function handleModemMsg(replyChannel, msg)
|
||||
if type(msg) == "string" and msg == "PING" then
|
||||
modem.transmit(replyChannel, CHANNEL, "PONG")
|
||||
return
|
||||
end
|
||||
-- Ignore invalid messages.
|
||||
if not msg or #msg < 2 then return end
|
||||
-- Find the switch configuration(s) that pertain to this route.
|
||||
|
|
Loading…
Reference in New Issue