summaryrefslogtreecommitdiff
path: root/xmake/core/base/scheduler.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2019-12-13 00:49:33 +0800
committerruki <[email protected]>2019-12-12 22:57:18 +0800
commit880b3b96f8222a027b0387bd1bfbbd793267d5a6 (patch)
treee3fc074b54c7e75ccaaadb1a64001139adee8b3f /xmake/core/base/scheduler.lua
parent148619a18aea3acbc69523c99468a8315c59d9f2 (diff)
add poller events
Diffstat (limited to 'xmake/core/base/scheduler.lua')
-rw-r--r--xmake/core/base/scheduler.lua38
1 files changed, 29 insertions, 9 deletions
diff --git a/xmake/core/base/scheduler.lua b/xmake/core/base/scheduler.lua
index 597643ae2..187b56599 100644
--- a/xmake/core/base/scheduler.lua
+++ b/xmake/core/base/scheduler.lua
@@ -94,6 +94,21 @@ function scheduler:_timer()
return t
end
+-- get socket events
+function scheduler:_sockevents(csock)
+ return self._SOCKEVENTS and self._SOCKEVENTS[csock] or nil
+end
+
+-- set socket events
+function scheduler:_sockevents_set(csock, data)
+ local sockevents = self._SOCKEVENTS
+ if not sockevents then
+ sockevents = {}
+ self._SOCKEVENTS = sockevents
+ end
+ sockevents[csock] = data
+end
+
-- start a new coroutine task
function scheduler:co_start(cotask, ...)
return self:co_start_named(nil, cotask, ...)
@@ -147,18 +162,23 @@ function scheduler:waitsock(sock, events, timeout)
end
-- the socket events callback
- local function sockevents_cb(sockevents)
+ local function sockevents_cb(events)
+
-- TODO
- self:co_resume(running, sockevents)
+ self:co_resume(running, events)
end
- -- add socket events to poller
- -- TODO
-
- -- insert socket to poller for waiting events
- local ok, errors = poller:insert(poller.OT_SOCK, sock, events, sockevents_cb)
- if not ok then
- return -1, errors
+ -- get the previous socket events
+ local events_prev = self:_sockevents(sock:csock())
+ if events_prev then
+ -- TODO
+ print("not impl")
+ else
+ -- insert socket to poller for waiting events
+ local ok, errors = poller:insert(poller.OT_SOCK, sock, events, sockevents_cb)
+ if not ok then
+ return -1, errors
+ end
end
-- register timeout task to timer