proxy apis over wireless

This commit is contained in:
kepler155c@gmail.com 2017-10-24 23:01:40 -04:00
parent 84b2b8ce63
commit 7fd93e8a8b
7 changed files with 63 additions and 13 deletions

View File

@ -24,6 +24,9 @@ function Routine:terminate()
end end
function Routine:resume(event, ...) function Routine:resume(event, ...)
if coroutine.status(self.co) == 'running' then
return
end
if not self.co then if not self.co then
error('Cannot resume a dead routine') error('Cannot resume a dead routine')

View File

@ -148,7 +148,15 @@ end
function Point.adjacentPoints(pt) function Point.adjacentPoints(pt)
local pts = { } local pts = { }
for _, hi in pairs(_G.turtle.getHeadings()) do local headings = {
[ 0 ] = { xd = 1, zd = 0, yd = 0, heading = 0, direction = 'east' },
[ 1 ] = { xd = 0, zd = 1, yd = 0, heading = 1, direction = 'south' },
[ 2 ] = { xd = -1, zd = 0, yd = 0, heading = 2, direction = 'west' },
[ 3 ] = { xd = 0, zd = -1, yd = 0, heading = 3, direction = 'north' },
[ 4 ] = { xd = 0, zd = 0, yd = 1, heading = 4, direction = 'up' },
[ 5 ] = { xd = 0, zd = 0, yd = -1, heading = 5, direction = 'down' }
}
for _, hi in pairs(headings) do
table.insert(pts, { x = pt.x + hi.xd, y = pt.y + hi.yd, z = pt.z + hi.zd }) table.insert(pts, { x = pt.x + hi.xd, y = pt.y + hi.yd, z = pt.z + hi.zd })
end end

View File

@ -95,9 +95,8 @@ end
if not fs.exists('usr/autorun') then if not fs.exists('usr/autorun') then
fs.makeDir('usr/autorun') fs.makeDir('usr/autorun')
end end
if not fs.exists('usr/etc/fstab') or not fs.exists('usr/etc/fstab.ignore') then if not fs.exists('usr/etc/fstab') then
Util.writeFile('usr/etc/fstab', 'usr gitfs kepler155c/opus-apps/develop') Util.writeFile('usr/etc/fstab', 'usr gitfs kepler155c/opus-apps/develop')
Util.writeFile('usr/etc/fstab.ignore', 'forced fstab overwrite')
end end
if not fs.exists('usr/config/shell') then if not fs.exists('usr/config/shell') then
Util.writeTable('usr/config/shell', { Util.writeTable('usr/config/shell', {

View File

@ -53,6 +53,7 @@ function turtle.resetState()
state.moveCallback = noop state.moveCallback = noop
Pathing.reset() Pathing.reset()
turtle.abort = false
return true return true
end end
@ -60,7 +61,7 @@ function turtle.reset()
turtle.point.x = 0 turtle.point.x = 0
turtle.point.y = 0 turtle.point.y = 0
turtle.point.z = 0 turtle.point.z = 0
turtle.point.heading = 0 turtle.point.heading = 0 -- should be facing
turtle.point.gps = false turtle.point.gps = false
turtle.abort = false -- should be part of state turtle.abort = false -- should be part of state
--turtle.status = 'idle' -- should be part of state --turtle.status = 'idle' -- should be part of state
@ -961,10 +962,10 @@ function turtle.run(fn, ...)
end end
function turtle.abortAction() function turtle.abortAction()
if turtle.status ~= 'idle' then --if turtle.status ~= 'idle' then
turtle.abort = true turtle.abort = true
os.queueEvent('turtle_abort') os.queueEvent('turtle_abort')
end --end
end end
-- [[ Pathing ]] -- -- [[ Pathing ]] --

34
sys/network/proxy.lua Normal file
View File

@ -0,0 +1,34 @@
local Event = require('event')
local Socket = require('socket')
Event.addRoutine(function()
while true do
print('proxy: listening on port 188')
local socket = Socket.server(188)
print('proxy: connection from ' .. socket.dhost)
Event.addRoutine(function()
local api = socket:read(2)
if api then
local proxy = _G[api]
local methods = { }
for k,v in pairs(proxy) do
if type(v) == 'function' then
table.insert(methods, k)
end
end
socket:write(methods)
while true do
local data = socket:read()
if not data then
break
end
socket:write({ proxy[data.fn](unpack(data.args)) })
end
end
end)
end
end)

View File

@ -2,9 +2,12 @@ local Event = require('event')
local Socket = require('socket') local Socket = require('socket')
local Util = require('util') local Util = require('util')
local function telnetHost(socket) local multishell = _ENV.multishell
local os = _G.os
local term = _G.term
requireInjector(getfenv(1)) local function telnetHost(socket)
_G.requireInjector()
local Event = require('event') local Event = require('event')
@ -14,7 +17,7 @@ local function telnetHost(socket)
local termInfo = socket:read(5) local termInfo = socket:read(5)
if not termInfo then if not termInfo then
printtError('read failed') _G.printtError('read failed')
return return
end end
@ -45,7 +48,7 @@ local function telnetHost(socket)
end end
local shellThread = Event.addRoutine(function() local shellThread = Event.addRoutine(function()
os.run(getfenv(1), 'sys/apps/shell') os.run(_ENV, 'sys/apps/shell')
Event.exitPullEvents() Event.exitPullEvents()
end) end)
@ -67,7 +70,6 @@ local function telnetHost(socket)
end end
Event.addRoutine(function() Event.addRoutine(function()
print('telnet: listening on port 23') print('telnet: listening on port 23')
while true do while true do
local socket = Socket.server(23) local socket = Socket.server(23)
@ -77,7 +79,6 @@ Event.addRoutine(function()
multishell.openTab({ multishell.openTab({
fn = telnetHost, fn = telnetHost,
args = { socket }, args = { socket },
env = getfenv(1),
title = 'Telnet Client', title = 'Telnet Client',
hidden = true, hidden = true,
}) })

View File

@ -6,14 +6,18 @@
* background read buffering * background read buffering
]]-- ]]--
local multishell = _ENV.multishell
local os = _G.os
multishell.setTitle(multishell.getCurrent(), 'Net transport') multishell.setTitle(multishell.getCurrent(), 'Net transport')
local computerId = os.getComputerID() local computerId = os.getComputerID()
_G.transport = { local transport = {
timers = { }, timers = { },
sockets = { }, sockets = { },
} }
_G.transport = transport
function transport.open(socket) function transport.open(socket)
transport.sockets[socket.sport] = socket transport.sockets[socket.sport] = socket