diff options
| author | ruki <[email protected]> | 2019-12-13 00:49:33 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2019-12-12 22:57:18 +0800 |
| commit | 880b3b96f8222a027b0387bd1bfbbd793267d5a6 (patch) | |
| tree | e3fc074b54c7e75ccaaadb1a64001139adee8b3f /xmake/core/base/scheduler.lua | |
| parent | 148619a18aea3acbc69523c99468a8315c59d9f2 (diff) | |
add poller events
Diffstat (limited to 'xmake/core/base/scheduler.lua')
| -rw-r--r-- | xmake/core/base/scheduler.lua | 38 |
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 |
