summaryrefslogtreecommitdiff
path: root/xmake/modules/private/service/server/server.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2022-04-06 00:48:28 +0800
committerruki <[email protected]>2022-04-06 00:48:28 +0800
commit377a96ae751d162901c573f3800b891ccb3eba7c (patch)
tree3eea18ce86cd6875c14dea8908db06b3cf6adb3b /xmake/modules/private/service/server/server.lua
parent979d106b38f86a6c4aedf3cfa666f2c45ddb2548 (diff)
handle session
Diffstat (limited to 'xmake/modules/private/service/server/server.lua')
-rw-r--r--xmake/modules/private/service/server/server.lua30
1 files changed, 29 insertions, 1 deletions
diff --git a/xmake/modules/private/service/server/server.lua b/xmake/modules/private/service/server/server.lua
index 8c4615bab..45dcc15df 100644
--- a/xmake/modules/private/service/server/server.lua
+++ b/xmake/modules/private/service/server/server.lua
@@ -86,7 +86,7 @@ function server:runloop()
local sock_client = sock:accept()
if sock_client then
scheduler.co_start(function (sock)
- self._HANDLER(self, sock)
+ self:_handle_session(sock)
sock:close()
end, sock_client)
end
@@ -115,6 +115,33 @@ function server:workdir()
return os.tmpfile(tostring(self)) .. ".dir"
end
+-- handle session
+function server:_handle_session(sock)
+ print("%s: %s session connected", self, sock)
+ local real = 0
+ local recv = 0
+ local data = nil
+ local wait = false
+ local results = {}
+ while true do
+ real, data = sock:recv(8192)
+ print(real, data)
+ if real > 0 then
+ recv = recv + real
+ wait = false
+ elseif real == 0 and not wait then
+ if sock:wait(socket.EV_RECV, -1) == socket.EV_RECV then
+ wait = true
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ print("%s: %s session end", self, sock)
+end
+
function server:__tostring()
return "<server>"
end
@@ -124,3 +151,4 @@ function main()
instance:init()
return instance
end
+