From d5b0ad73b939747cfa97f0d7c98acf861412e459 Mon Sep 17 00:00:00 2001 From: kepler155c Date: Wed, 24 Oct 2018 19:52:27 -0400 Subject: [PATCH] milo wip --- milo/MiloRemote.lua | 52 ++++++++++++++++++++++++++++++----------- milo/plugins/remote.lua | 11 ++++++--- 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/milo/MiloRemote.lua b/milo/MiloRemote.lua index 8ef6989..a0a555e 100644 --- a/milo/MiloRemote.lua +++ b/milo/MiloRemote.lua @@ -5,11 +5,7 @@ local UI = require('ui') local Util = require('util') local colors = _G.colors - -local socket, msg = Socket.connect(1, 4242) -if not socket then - error(msg) -end +local socket local page = UI.Page { menuBar = UI.MenuBar { @@ -89,6 +85,26 @@ local function filterItems(t, filter, displayMode) return t end +function page:sendRequest(data) + local msg + + for _ = 1, 2 do + if not socket or not socket.connected then + socket, msg = Socket.connect(1, 4242) + end + if socket then + if socket:write(data) then + local response = socket:read(2) + if response then + return response + end + end + socket:close() + end + end + self.notification:error(msg or 'Failed to connect') +end + function page.statusBar:draw() return UI.Window.draw(self) end @@ -122,13 +138,23 @@ function page:eventHandler(event) elseif event.type == 'eject' then local item = self.grid:getSelected() if item then - socket:write({ request = 'transfer', item = item, count = 1 }) + local items = self:sendRequest({ request = 'transfer', item = item, count = 1 }) + if items then + self.items = items + self:applyFilter() + self.grid:draw() + end end elseif event.type == 'eject_stack' then local item = self.grid:getSelected() if item then - socket:write({ request = 'transfer', item = item, count = 64 }) + local items = self:sendRequest({ request = 'transfer', item = item, count = 64 }) + if items then + self.items = items + self:applyFilter() + self.grid:draw() + end end elseif event.type == 'refresh' then @@ -172,12 +198,10 @@ function page:enable() end function page:refresh() - socket:write({ request = 'list' }) - self.items = socket:read() + local items = self:sendRequest({ request = 'list' }) - if not self.items then - UI:exitPullEvents() - else + if items then + self.items = items self:applyFilter() end end @@ -190,4 +214,6 @@ end UI:setPage(page) UI:pullEvents() -socket:close() +if socket then + socket:close() +end diff --git a/milo/plugins/remote.lua b/milo/plugins/remote.lua index ca3c368..e4bfcf5 100644 --- a/milo/plugins/remote.lua +++ b/milo/plugins/remote.lua @@ -9,6 +9,8 @@ local turtle = _G.turtle local context = Milo:getContext() local function client(socket) + debug('connection from ' .. socket.dhost) + repeat local data = socket:read() if not data then @@ -32,8 +34,14 @@ local function client(socket) slot.index, slot.count) end) + + local items = Milo:listItems() + Milo:mergeResources(items) + socket:write(items) end until not socket.connected + + debug('disconnected from ' .. socket.dhost) end if device.wireless_modem then @@ -41,9 +49,6 @@ if device.wireless_modem then debug('Milo: listening on port 4242') while true do local socket = Socket.server(4242) - - debug('connection from ' .. socket.dhost) - Event.addRoutine(function() client(socket) end)