milo wip
This commit is contained in:
@@ -184,6 +184,11 @@ table.sort(Milo.tasks, function(a, b)
|
|||||||
return a.priority < b.priority
|
return a.priority < b.priority
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
debug('Tasks\n-----')
|
||||||
|
for _, task in ipairs(Milo.tasks) do
|
||||||
|
debug('%d: %s', task.priority, task.name)
|
||||||
|
end
|
||||||
|
|
||||||
Milo:clearGrid()
|
Milo:clearGrid()
|
||||||
|
|
||||||
local page = UI:getPage('listing')
|
local page = UI:getPage('listing')
|
||||||
|
|||||||
62
milo/MiloMonitor.lua
Normal file
62
milo/MiloMonitor.lua
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
_G.requireInjector(_ENV)
|
||||||
|
|
||||||
|
local Util = require('util')
|
||||||
|
|
||||||
|
local colors = _G.colors
|
||||||
|
local device = _G.device
|
||||||
|
|
||||||
|
local args = { ... }
|
||||||
|
local mon = device[args[1] or 'monitor'] or error('Syntax: debug <monitor>')
|
||||||
|
local config = Util.readTable('/usr/config/milo') or error('Milo is not configured')
|
||||||
|
|
||||||
|
local row
|
||||||
|
local monWidth, monHeight = mon.getSize()
|
||||||
|
local machines = { }
|
||||||
|
|
||||||
|
local function write(x, y, s, bg, fg)
|
||||||
|
mon.setCursorPos(x, y)
|
||||||
|
mon.setBackgroundColor(bg)
|
||||||
|
if fg then
|
||||||
|
mon.setTextColor(fg)
|
||||||
|
end
|
||||||
|
mon.write(s)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function progress(y, percent)
|
||||||
|
local width = math.ceil(percent / 100 * monWidth)
|
||||||
|
write(2, y, string.rep(' ', monWidth - 2), colors.gray)
|
||||||
|
write(2, y, string.rep(' ', width), colors.lime)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function draw(machine, percent)
|
||||||
|
write(2, row, machine.displayName or machine.name, colors.black, colors.yellow)
|
||||||
|
progress(row + 1, percent)
|
||||||
|
row = row + 3
|
||||||
|
end
|
||||||
|
|
||||||
|
local function redraw()
|
||||||
|
row = 1
|
||||||
|
mon.setBackgroundColor(colors.black)
|
||||||
|
mon.clear()
|
||||||
|
for _,machine in ipairs(machines) do
|
||||||
|
local dev = device[machine.name]
|
||||||
|
if dev then
|
||||||
|
local percent = 50
|
||||||
|
if machine.mtype == 'storage' then
|
||||||
|
percent = Util.size(dev.list()) / dev.size() * 100
|
||||||
|
end
|
||||||
|
draw(machine, percent)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, v in pairs(config.remoteDefaults) do
|
||||||
|
table.insert(machines, v)
|
||||||
|
end
|
||||||
|
|
||||||
|
table.sort(machines, function(a, b)
|
||||||
|
return (a.displayName or a.name) < (b.displayName or b.name)
|
||||||
|
end)
|
||||||
|
|
||||||
|
mon.setTextScale(.5)
|
||||||
|
redraw()
|
||||||
@@ -7,6 +7,27 @@ local Util = require('util')
|
|||||||
local colors = _G.colors
|
local colors = _G.colors
|
||||||
local socket
|
local socket
|
||||||
|
|
||||||
|
local options = {
|
||||||
|
user = { arg = 'u', type = 'string',
|
||||||
|
desc = 'User name associated with bound manipulator' },
|
||||||
|
server = { arg = 's', type = 'number',
|
||||||
|
desc = 'ID of Milo server' },
|
||||||
|
help = { arg = 'h', type = 'flag', value = false,
|
||||||
|
desc = 'Displays the options' },
|
||||||
|
}
|
||||||
|
|
||||||
|
local args = { ... }
|
||||||
|
if not Util.getOptions(options, args) then
|
||||||
|
print()
|
||||||
|
error('Invalid arguments')
|
||||||
|
end
|
||||||
|
|
||||||
|
if not options.user.value or not options.server.value then
|
||||||
|
Util.showOptions(options)
|
||||||
|
print()
|
||||||
|
error('Invalid arguments')
|
||||||
|
end
|
||||||
|
|
||||||
local page = UI.Page {
|
local page = UI.Page {
|
||||||
menuBar = UI.MenuBar {
|
menuBar = UI.MenuBar {
|
||||||
buttons = {
|
buttons = {
|
||||||
@@ -90,7 +111,10 @@ function page:sendRequest(data)
|
|||||||
|
|
||||||
for _ = 1, 2 do
|
for _ = 1, 2 do
|
||||||
if not socket or not socket.connected then
|
if not socket or not socket.connected then
|
||||||
socket, msg = Socket.connect(1, 4242)
|
socket, msg = Socket.connect(options.server.value, 4242)
|
||||||
|
if socket then
|
||||||
|
socket:write(options.user.value)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if socket then
|
if socket then
|
||||||
if socket:write(data) then
|
if socket:write(data) then
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ local Milo = require('milo')
|
|||||||
local Util = require('util')
|
local Util = require('util')
|
||||||
|
|
||||||
local Autocraft = {
|
local Autocraft = {
|
||||||
|
name = 'autocraft',
|
||||||
priority = 100,
|
priority = 100,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -132,7 +132,8 @@ function craftPage:eventHandler(event)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local demandCraftingTask = {
|
local demandCraftingTask = {
|
||||||
priority = 20,
|
name = 'demand crafting',
|
||||||
|
priority = 60,
|
||||||
}
|
}
|
||||||
|
|
||||||
function demandCraftingTask:cycle(context)
|
function demandCraftingTask:cycle(context)
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ local Milo = require('milo')
|
|||||||
local device = _G.device
|
local device = _G.device
|
||||||
|
|
||||||
local ExportTask = {
|
local ExportTask = {
|
||||||
priority = 5,
|
name = 'exporter',
|
||||||
|
priority = 40,
|
||||||
}
|
}
|
||||||
|
|
||||||
function ExportTask:cycle(context)
|
function ExportTask:cycle(context)
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ local Milo = require('milo')
|
|||||||
local device = _G.device
|
local device = _G.device
|
||||||
|
|
||||||
local ImportTask = {
|
local ImportTask = {
|
||||||
priority = 3,
|
name = 'importer',
|
||||||
|
priority = 20,
|
||||||
}
|
}
|
||||||
|
|
||||||
function ImportTask:cycle(context)
|
function ImportTask:cycle(context)
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ local Milo = require('milo')
|
|||||||
local device = _G.device
|
local device = _G.device
|
||||||
|
|
||||||
local InputChest = {
|
local InputChest = {
|
||||||
priority = 1,
|
name = 'input',
|
||||||
|
priority = 10,
|
||||||
}
|
}
|
||||||
|
|
||||||
function InputChest:cycle(context)
|
function InputChest:cycle(context)
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ jobList:draw()
|
|||||||
jobList:sync()
|
jobList:sync()
|
||||||
|
|
||||||
local JobListTask = {
|
local JobListTask = {
|
||||||
|
name = 'job status',
|
||||||
priority = 80,
|
priority = 80,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
local Milo = require('milo')
|
local Milo = require('milo')
|
||||||
|
|
||||||
local LimitTask = {
|
local LimitTask = {
|
||||||
priority = 10,
|
name = 'limiter',
|
||||||
|
priority = 50,
|
||||||
}
|
}
|
||||||
|
|
||||||
function LimitTask:cycle(context)
|
function LimitTask:cycle(context)
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ local Milo = require('milo')
|
|||||||
local device = _G.device
|
local device = _G.device
|
||||||
|
|
||||||
local PotionImportTask = {
|
local PotionImportTask = {
|
||||||
priority = 3,
|
name = 'potions',
|
||||||
|
priority = 30,
|
||||||
}
|
}
|
||||||
|
|
||||||
function PotionImportTask:cycle(context)
|
function PotionImportTask:cycle(context)
|
||||||
|
|||||||
@@ -2,15 +2,32 @@ local Event = require('event')
|
|||||||
local Milo = require('milo')
|
local Milo = require('milo')
|
||||||
local Socket = require('socket')
|
local Socket = require('socket')
|
||||||
|
|
||||||
local device = _G.device
|
local device = _G.device
|
||||||
local manipulator = device.manipulator_1
|
local turtle = _G.turtle
|
||||||
local turtle = _G.turtle
|
|
||||||
|
|
||||||
local context = Milo:getContext()
|
local context = Milo:getContext()
|
||||||
|
|
||||||
|
local function getManipulatorForUser(user)
|
||||||
|
for _,v in pairs(device) do
|
||||||
|
if v.type == 'manipulator' and v.getName and v.getName() == user then
|
||||||
|
return v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local function client(socket)
|
local function client(socket)
|
||||||
debug('connection from ' .. socket.dhost)
|
debug('connection from ' .. socket.dhost)
|
||||||
|
|
||||||
|
local user = socket:read(2)
|
||||||
|
if not user then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local manipulator = getManipulatorForUser(user)
|
||||||
|
if not manipulator then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
repeat
|
repeat
|
||||||
local data = socket:read()
|
local data = socket:read()
|
||||||
if not data then
|
if not data then
|
||||||
@@ -51,6 +68,7 @@ if device.wireless_modem then
|
|||||||
local socket = Socket.server(4242)
|
local socket = Socket.server(4242)
|
||||||
Event.addRoutine(function()
|
Event.addRoutine(function()
|
||||||
client(socket)
|
client(socket)
|
||||||
|
socket:close()
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -2,7 +2,8 @@ local itemDB = require('itemDB')
|
|||||||
local Milo = require('milo')
|
local Milo = require('milo')
|
||||||
|
|
||||||
local ReplenishTask = {
|
local ReplenishTask = {
|
||||||
priority = 30,
|
name = 'replenish',
|
||||||
|
priority = 70,
|
||||||
}
|
}
|
||||||
|
|
||||||
function ReplenishTask:cycle(context)
|
function ReplenishTask:cycle(context)
|
||||||
|
|||||||
Reference in New Issue
Block a user