移除所有的Channel:demand,因为love.js不支持
整理代码
This commit is contained in:
@@ -17,11 +17,12 @@ local function _sanitize(content)
|
||||
end
|
||||
|
||||
if SYSTEM~='Web' then
|
||||
local get = love.system.getClipboardText
|
||||
local set = love.system.setClipboardText
|
||||
local get=love.system.getClipboardText
|
||||
local set=love.system.setClipboardText
|
||||
return {
|
||||
get=function() return get() or '' end,
|
||||
set=function(content) set(_sanitize(content)) end,
|
||||
setFreshInterval=NULL,
|
||||
_update=NULL,
|
||||
}
|
||||
end
|
||||
@@ -29,7 +30,7 @@ end
|
||||
if WEB_COMPAT_MODE then
|
||||
local _clipboardBuffer=''
|
||||
return {
|
||||
get=function ()
|
||||
get=function()
|
||||
JS.newPromiseRequest(
|
||||
JS.stringFunc(
|
||||
[[
|
||||
@@ -43,13 +44,13 @@ if WEB_COMPAT_MODE then
|
||||
]]
|
||||
),
|
||||
function(data) _clipboardBuffer=data end,
|
||||
function(id, error) print(id, error) end,
|
||||
function(id,error) print(id, error) end,
|
||||
3,
|
||||
'getClipboardText'
|
||||
)
|
||||
return _clipboardBuffer
|
||||
end,
|
||||
set=function (str)
|
||||
set=function(str)
|
||||
JS.callJS(JS.stringFunc(
|
||||
[[
|
||||
window.navigator.clipboard
|
||||
@@ -60,26 +61,30 @@ if WEB_COMPAT_MODE then
|
||||
_sanitize(str)
|
||||
))
|
||||
end,
|
||||
setFreshInterval=NULL,
|
||||
_update=NULL,
|
||||
}
|
||||
end
|
||||
|
||||
local clipboard_thread=love.thread.newThread('Zframework/clipboard_thread.lua')
|
||||
local getCHN=love.thread.newChannel()
|
||||
local setCHN=love.thread.newChannel()
|
||||
local triggerCHN=love.thread.newChannel()
|
||||
local getCHN=love.thread.getChannel('CLIP_get')
|
||||
local setCHN=love.thread.getChannel('CLIP_set')
|
||||
local trigCHN=love.thread.getChannel('CLIP_trig')
|
||||
|
||||
clipboard_thread:start(getCHN,setCHN,triggerCHN)
|
||||
love.thread.newThread('Zframework/clipboard_thread.lua'):start()
|
||||
|
||||
return{
|
||||
local freshInterval=1
|
||||
local timer=0
|
||||
return {
|
||||
get=function() return getCHN:peek() or '' end,
|
||||
set=function(content) setCHN:push(_sanitize(content)) end,
|
||||
_update=function()
|
||||
triggerCHN:push(0)
|
||||
local error = clipboard_thread:getError()
|
||||
if error then
|
||||
MES.new('error',error)
|
||||
MES.traceback()
|
||||
setFreshInterval=function(val)
|
||||
freshInterval=val
|
||||
end,
|
||||
_update=function(dt)
|
||||
timer=timer+dt
|
||||
if timer>freshInterval then
|
||||
timer=0
|
||||
trigCHN:push(0)
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -1,65 +1,45 @@
|
||||
local getCHN,setCHN,triggerCHN=...
|
||||
|
||||
local CHN_demand,CHN_getCount=triggerCHN.demand,triggerCHN.getCount
|
||||
local CHN_push,CHN_pop=triggerCHN.push,triggerCHN.pop
|
||||
local getCHN=love.thread.getChannel('CLIP_get')
|
||||
local setCHN=love.thread.getChannel('CLIP_set')
|
||||
local trigCHN=love.thread.getChannel('CLIP_trig')
|
||||
|
||||
JS=require'Zframework.js'
|
||||
love.timer=require'love.timer'
|
||||
|
||||
local yield=coroutine.yield
|
||||
local setThread=coroutine.wrap(function()
|
||||
while true do
|
||||
JS.callJS(JS.stringFunc(
|
||||
[[
|
||||
window.navigator.clipboard
|
||||
.writeText('%s')
|
||||
.then(() => console.log('Copied to clipboard'))
|
||||
.catch((e) => console.warn(e));
|
||||
]],
|
||||
CHN_pop(setCHN)
|
||||
))
|
||||
yield()
|
||||
end
|
||||
end)
|
||||
|
||||
local getThread=coroutine.wrap(function()
|
||||
while true do
|
||||
JS.newPromiseRequest(
|
||||
JS.stringFunc(
|
||||
while true do
|
||||
if trigCHN:getCount()>0 then
|
||||
trigCHN:pop()
|
||||
if setCHN:getCount()>0 then
|
||||
repeat setCHN:pop() until setCHN:getCount()==1
|
||||
-- Set Clipboard
|
||||
JS.callJS(JS.stringFunc(
|
||||
[[
|
||||
window.navigator.clipboard
|
||||
.readText()
|
||||
.then((text) => _$_(text))
|
||||
.catch((e) => {
|
||||
console.warn(e);
|
||||
_$_('');
|
||||
});
|
||||
]]
|
||||
),
|
||||
function(data)
|
||||
while getCHN:getCount()>0 do
|
||||
CHN_pop(getCHN)
|
||||
end
|
||||
CHN_push(getCHN, data)
|
||||
.writeText('%s')
|
||||
.then(() => console.log('Copied to clipboard'))
|
||||
.catch((e) => console.warn(e));
|
||||
]],
|
||||
setCHN:pop()
|
||||
))
|
||||
end
|
||||
-- Get Clipboard
|
||||
JS.newPromiseRequest(
|
||||
JS.stringFunc[[
|
||||
window.navigator.clipboard
|
||||
.readText()
|
||||
.then((text) => _$_(text))
|
||||
.catch((e) => {
|
||||
console.warn(e);
|
||||
_$_('');
|
||||
});
|
||||
]],
|
||||
function(data)
|
||||
while getCHN:getCount()>0 do getCHN:pop() end
|
||||
getCHN:push(data)
|
||||
end,
|
||||
function(id, error) print(id, error) end,
|
||||
function(id,error) print(id, error) end,
|
||||
2,
|
||||
'getClipboardText'
|
||||
)
|
||||
yield()
|
||||
end
|
||||
end)
|
||||
|
||||
local success,err
|
||||
|
||||
while true do-- Running
|
||||
CHN_demand(triggerCHN)
|
||||
if CHN_getCount(setCHN)>0 then
|
||||
while CHN_getCount(setCHN)>1 do
|
||||
CHN_pop(setCHN)
|
||||
end
|
||||
print('Running setThread')
|
||||
setThread()
|
||||
end
|
||||
print('Running getThread')
|
||||
getThread()
|
||||
love.timer.sleep(.0626)
|
||||
end
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
local sendCHN=love.thread.getChannel('inputChannel')
|
||||
local recvCHN=love.thread.getChannel('outputChannel')
|
||||
local sendCHN=love.thread.getChannel('HTTP_inputChannel')
|
||||
local recvCHN=love.thread.getChannel('HTTP_outputChannel')
|
||||
|
||||
local threads={}
|
||||
local threadCount=0
|
||||
@@ -9,11 +9,15 @@ local threadCode=[[
|
||||
local http=require'socket.http'
|
||||
local ltn12=require'ltn12'
|
||||
|
||||
local sendCHN=love.thread.getChannel('inputChannel')
|
||||
local recvCHN=love.thread.getChannel('outputChannel')
|
||||
local sendCHN=love.thread.getChannel('HTTP_inputChannel')
|
||||
local recvCHN=love.thread.getChannel('HTTP_outputChannel')
|
||||
local sleep=require'love.timer'.sleep
|
||||
|
||||
while true do
|
||||
local arg=sendCHN:demand()
|
||||
-- local arg=sendCHN:demand()
|
||||
-- Warning: workaround for love.js
|
||||
while sendCHN:getCount()==0 do sleep(.0626) end
|
||||
local arg=sendCHN:pop()
|
||||
|
||||
if arg._destroy then
|
||||
recvCHN:push{
|
||||
|
||||
@@ -741,9 +741,9 @@ function love.run()
|
||||
|
||||
-- UPDATE
|
||||
STEP()
|
||||
if JS then
|
||||
if JS then
|
||||
JS.retrieveData(dt)
|
||||
CLIPBOARD._update()
|
||||
CLIPBOARD._update(dt)
|
||||
end
|
||||
if mouseShow then mouse_update(dt) end
|
||||
if next(jsState) then gp_update(jsState[1],dt) end
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
---@type love.Channel,love.Channel,love.Channel
|
||||
local triggerCHN,sendCHN,readCHN=...
|
||||
|
||||
local CHN_demand,CHN_getCount=triggerCHN.demand,triggerCHN.getCount
|
||||
@@ -5,13 +6,16 @@ local CHN_push,CHN_pop=triggerCHN.push,triggerCHN.pop
|
||||
|
||||
local SOCK=require'socket'.tcp()
|
||||
local JSON=require'Zframework.json'
|
||||
local sleep=require'love.timer'.sleep
|
||||
|
||||
do-- Connect
|
||||
local host=CHN_demand(sendCHN)
|
||||
local port=CHN_demand(sendCHN)
|
||||
local path=CHN_demand(sendCHN)
|
||||
local head=CHN_demand(sendCHN)
|
||||
local timeout=CHN_demand(sendCHN)
|
||||
-- Warning: workaround for love.js, used to use CHN_demand instead
|
||||
while CHN_getCount(sendCHN)<5 do sleep(.0626) end
|
||||
local host=CHN_pop(sendCHN)
|
||||
local port=CHN_pop(sendCHN)
|
||||
local path=CHN_pop(sendCHN)
|
||||
local head=CHN_pop(sendCHN)
|
||||
local timeout=CHN_pop(sendCHN)
|
||||
|
||||
SOCK:settimeout(timeout)
|
||||
local res,err=SOCK:connect(host,port)
|
||||
@@ -186,7 +190,8 @@ end)
|
||||
local success,err
|
||||
|
||||
while true do-- Running
|
||||
CHN_demand(triggerCHN)
|
||||
while CHN_getCount(triggerCHN)==0 do sleep(.0626) end
|
||||
CHN_pop(triggerCHN)
|
||||
success,err=pcall(sendThread)
|
||||
if not success or err then break end
|
||||
success,err=pcall(readThread)
|
||||
|
||||
Reference in New Issue
Block a user