summaryrefslogtreecommitdiff
path: root/script/pub
diff options
context:
space:
mode:
Diffstat (limited to 'script/pub')
-rw-r--r--script/pub/pub.lua36
1 files changed, 24 insertions, 12 deletions
diff --git a/script/pub/pub.lua b/script/pub/pub.lua
index 5bbb381c..e8be65cd 100644
--- a/script/pub/pub.lua
+++ b/script/pub/pub.lua
@@ -1,13 +1,27 @@
local thread = require 'bee.thread'
+local channel = require 'bee.channel'
+local select = require 'bee.select'
local utility = require 'utility'
local await = require 'await'
-thread.newchannel 'taskpad'
-thread.newchannel 'waiter'
+local function channel_init(chan)
+ local selector = select.create()
+ selector:event_add(chan:fd(), select.SELECT_READ)
+ return { selector, chan }
+end
+
+local function channel_bpop(ctx)
+ local selector, chan = ctx[1], ctx[2]
+ for _ in selector:wait() do
+ local r = table.pack(chan:pop())
+ if r[1] == true then
+ return table.unpack(r, 2)
+ end
+ end
+end
-local errLog = thread.channel 'errlog'
-local taskPad = thread.channel 'taskpad'
-local waiter = thread.channel 'waiter'
+local taskPad = channel.create 'taskpad'
+local waiter = channel_init(channel.create 'waiter')
local type = type
local counter = utility.counter()
@@ -66,11 +80,9 @@ function m.recruitBraves(num, privatePad)
}
end
if privatePad and not m.prvtPad[privatePad] then
- thread.newchannel('req:' .. privatePad)
- thread.newchannel('res:' .. privatePad)
m.prvtPad[privatePad] = {
- req = thread.channel('req:' .. privatePad),
- res = thread.channel('res:' .. privatePad),
+ req = channel.create('req:' .. privatePad),
+ res = channel.create('res:' .. privatePad),
}
end
end
@@ -166,7 +178,7 @@ end
--- 接收反馈
function m.recieve(block)
if block then
- local id, name, result = waiter:bpop()
+ local id, name, result = channel_bpop(waiter)
if type(name) == 'string' then
m.popReport(m.braves[id], name, result)
else
@@ -175,7 +187,7 @@ function m.recieve(block)
else
while true do
local ok
- if m.reciveFromPad(waiter) then
+ if m.reciveFromPad(waiter[2]) then
ok = true
end
for _, pad in pairs(m.prvtPad) do
@@ -194,7 +206,7 @@ end
--- 检查伤亡情况
function m.checkDead()
while true do
- local suc, err = errLog:pop()
+ local suc, err = thread.errlog()
if not suc then
break
end