From 7fd93e8a8b606484c0f56a48f74b91387dd929c5 Mon Sep 17 00:00:00 2001 From: "kepler155c@gmail.com" Date: Tue, 24 Oct 2017 23:01:40 -0400 Subject: [PATCH] proxy apis over wireless --- sys/apis/event.lua | 3 +++ sys/apis/point.lua | 10 +++++++++- sys/boot/multishell.boot | 3 +-- sys/extensions/tl3.lua | 7 ++++--- sys/network/proxy.lua | 34 ++++++++++++++++++++++++++++++++++ sys/network/telnet.lua | 13 +++++++------ sys/services/transort.lua | 6 +++++- 7 files changed, 63 insertions(+), 13 deletions(-) create mode 100644 sys/network/proxy.lua diff --git a/sys/apis/event.lua b/sys/apis/event.lua index 41fab79..26f316c 100644 --- a/sys/apis/event.lua +++ b/sys/apis/event.lua @@ -24,6 +24,9 @@ function Routine:terminate() end function Routine:resume(event, ...) + if coroutine.status(self.co) == 'running' then + return + end if not self.co then error('Cannot resume a dead routine') diff --git a/sys/apis/point.lua b/sys/apis/point.lua index 2f5c835..85122f3 100644 --- a/sys/apis/point.lua +++ b/sys/apis/point.lua @@ -148,7 +148,15 @@ end function Point.adjacentPoints(pt) 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 }) end diff --git a/sys/boot/multishell.boot b/sys/boot/multishell.boot index 1aa5357..dae20a1 100644 --- a/sys/boot/multishell.boot +++ b/sys/boot/multishell.boot @@ -95,9 +95,8 @@ end if not fs.exists('usr/autorun') then fs.makeDir('usr/autorun') 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.ignore', 'forced fstab overwrite') end if not fs.exists('usr/config/shell') then Util.writeTable('usr/config/shell', { diff --git a/sys/extensions/tl3.lua b/sys/extensions/tl3.lua index 30a0270..4fb5f56 100644 --- a/sys/extensions/tl3.lua +++ b/sys/extensions/tl3.lua @@ -53,6 +53,7 @@ function turtle.resetState() state.moveCallback = noop Pathing.reset() +turtle.abort = false return true end @@ -60,7 +61,7 @@ function turtle.reset() turtle.point.x = 0 turtle.point.y = 0 turtle.point.z = 0 - turtle.point.heading = 0 + turtle.point.heading = 0 -- should be facing turtle.point.gps = false turtle.abort = false -- should be part of state --turtle.status = 'idle' -- should be part of state @@ -961,10 +962,10 @@ function turtle.run(fn, ...) end function turtle.abortAction() - if turtle.status ~= 'idle' then + --if turtle.status ~= 'idle' then turtle.abort = true os.queueEvent('turtle_abort') - end + --end end -- [[ Pathing ]] -- diff --git a/sys/network/proxy.lua b/sys/network/proxy.lua new file mode 100644 index 0000000..034f61f --- /dev/null +++ b/sys/network/proxy.lua @@ -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) diff --git a/sys/network/telnet.lua b/sys/network/telnet.lua index 35da61a..2ef4143 100644 --- a/sys/network/telnet.lua +++ b/sys/network/telnet.lua @@ -2,9 +2,12 @@ local Event = require('event') local Socket = require('socket') 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') @@ -14,7 +17,7 @@ local function telnetHost(socket) local termInfo = socket:read(5) if not termInfo then - printtError('read failed') + _G.printtError('read failed') return end @@ -45,7 +48,7 @@ local function telnetHost(socket) end local shellThread = Event.addRoutine(function() - os.run(getfenv(1), 'sys/apps/shell') + os.run(_ENV, 'sys/apps/shell') Event.exitPullEvents() end) @@ -67,7 +70,6 @@ local function telnetHost(socket) end Event.addRoutine(function() - print('telnet: listening on port 23') while true do local socket = Socket.server(23) @@ -77,7 +79,6 @@ Event.addRoutine(function() multishell.openTab({ fn = telnetHost, args = { socket }, - env = getfenv(1), title = 'Telnet Client', hidden = true, }) diff --git a/sys/services/transort.lua b/sys/services/transort.lua index 9bb1273..8855ec3 100644 --- a/sys/services/transort.lua +++ b/sys/services/transort.lua @@ -6,14 +6,18 @@ * background read buffering ]]-- +local multishell = _ENV.multishell +local os = _G.os + multishell.setTitle(multishell.getCurrent(), 'Net transport') local computerId = os.getComputerID() -_G.transport = { +local transport = { timers = { }, sockets = { }, } +_G.transport = transport function transport.open(socket) transport.sockets[socket.sport] = socket