added some embedded stuff, still WIP and probably buggy

This commit is contained in:
Izaya 2018-03-12 01:25:50 +11:00
parent 46509f0da0
commit bce7d5d30f
3 changed files with 161 additions and 0 deletions

108
Embedded/microtel-3.lua Normal file
View File

@ -0,0 +1,108 @@
_G.net = {}
net.port = 4096
net.hostname = computer.address():sub(1,8)
net.hostname = "micro"
net.debug = false
net.rctime = 30
net.pctime = 30
net.retry = 30
do
local rcpe, pcache, rcache, pqueue, modems = computer.pullSignal, {}, {}, {}, {}
--subhere
for a,t in component.list("modem") do
modems[#modems+1] = component.proxy(a)
modems[#modems].open(net.port)
end
local function genPacketID()
local npID = ""
for i = 1, 16 do
npID = npID .. string.char(math.random(32,126))
end
return npID
end
local function sendPacket(packetID,packetType,dest,sender,vport,data)
if rcache[dest] then
component.invoke(rcache[dest][1],"send",rcache[dest][2],net.port,packetID,packetType,dest,sender,vport,data)
else
for k,v in pairs(modems) do
v.broadcast(net.port,packetID,packetType,dest,sender,vport,data)
end
end
end
local function pruneCache()
for k,v in pairs(rcache) do
if v[3] < computer.uptime() then
rcache[k] = nil
end
end
for k,v in pairs(pcache) do
if v < computer.uptime() then
pcache[k] = nil
end
end
end
local function checkPCache(packetID)
for k,v in pairs(pcache) do
if k == packetID then return true end
end
return false
end
local function packetPusher()
for k,v in pairs(pqueue) do
if v[5] < computer.uptime() then
sendPacket(k,v[1],v[2],net.hostname,v[3],v[4])
if v[1] ~= 1 or v[6] == 255 then
pqueue[k] = nil
else
pqueue[k][5]=computer.uptime()+net.retry
pqueue[k][6]=pqueue[k][6]+1
end
end
end
end
function computer.pullSignal(t)
pruneCache()
packetPusher()
local tev = {rcpe(t)}
if tev[1] == "modem_message" and tev[4] == net.port and not checkPCache(tev[6]) then
if tev[8] == net.hostname then
if tev[7] == 1 then
sendPacket(genPacketID(),2,tev[9],net.hostname,tev[10],tev[6])
end
if tev[7] == 2 then
pqueue[tev[11]] = nil
computer.pushSignal("net_ack",data)
end
if packetType ~= 2 then
computer.pushSignal("net_msg",tev[9],tev[10],tev[11])
end
else
sendPacket(tev[6],tev[7],tev[8],tev[9],tev[10],tev[11])
end
if not rcache[tev[9]] then
rcache[tev[9]] = {tev[2],tev[3],computer.uptime()+net.rctime}
end
if not pcache[tev[6]] then
pcache[tev[6]] = computer.uptime()+net.pctime
end
end
end
function net.send(ptype,to,vport,data,npID)
npID = npID or genPacketID()
pqueue[npID] = {ptype,to,vport,data,0,0}
end
end
while true do
computer.pullSignal()
end

15
Embedded/minify.sh Executable file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env bash
cp $1 $2
sed -i -e 's/pcache/PC/g' $2
sed -i -e 's/rcache/RC/g' $2
sed -i -e 's/pqueue/pQ/g' $2
sed -i -e 's/modems/M/g' $2
sed -i -e 's/genPacketID/gP/g' $2
sed -i -e 's/sendPacket/sP/g' $2
sed -i -e 's/pruneCache/pC/g' $2
sed -i -e 's/checkPCache/cPC/g' $2
sed -i -e 's/packetPusher/pP/g' $2
sed -i -e 's/component.invoke/cI/g' $2
sed -i -e 's/computer.uptime/cU/g' $2
sed -i -e 's/--subhere/local cI,cU = component.invoke,computer.uptime/g' $2
lua strip.lua $2 $2

38
Embedded/strip.lua Normal file
View File

@ -0,0 +1,38 @@
tA={...}
f=io.open(tA[1])
ss=f:read("*a")
f:close()
print("Optimising source")
sl=tostring(ss:len())
no=0
replacements={
{" "," "},
{"\n ","\n"},
{"\n\n","\n"},
{" == ","=="},
{" ~= ","~="},
{" >= ",">="},
{" <= ","<="},
{" > ",">"},
{" < ","<"},
{" = ","="},
{", ",","},
{" %+ ","+"},
{" %- ","-"},
{" %/ ","/"},
{" %* ","*"},
{" \n","\n"},
{"%-%-.-\n",""},
}
for k,v in ipairs(replacements) do
while ss:find(v[1]) ~= nil do
ss=ss:gsub(v[1],v[2])
io.write(".")
no=no+1
end
end
print("\nBefore: "..sl.."\nAfter: "..tostring(ss:len()).."\nDelta: "..tostring(sl-ss:len()))
f=io.open(tA[2],"wb")
f:write(ss)
f:close()