summaryrefslogtreecommitdiff
path: root/xmake/modules/private/service/server/server.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2022-04-10 21:15:25 +0800
committerruki <[email protected]>2022-04-10 21:15:25 +0800
commit2bf71798ce8355a66868628cfe5b85c52c592366 (patch)
tree29e643ae6dd0b08083a32abf29caa7848ed16e6c /xmake/modules/private/service/server/server.lua
parent5a67db08a505b68118d3eeeb89d32f04724261ef (diff)
move server and client files
Diffstat (limited to 'xmake/modules/private/service/server/server.lua')
-rw-r--r--xmake/modules/private/service/server/server.lua145
1 files changed, 0 insertions, 145 deletions
diff --git a/xmake/modules/private/service/server/server.lua b/xmake/modules/private/service/server/server.lua
deleted file mode 100644
index 2acc230f6..000000000
--- a/xmake/modules/private/service/server/server.lua
+++ /dev/null
@@ -1,145 +0,0 @@
---!A cross-platform build utility based on Lua
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
--- http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--- Copyright (C) 2015-present, TBOOX Open Source Group.
---
--- @author ruki
--- @file server.lua
---
-
--- imports
-import("core.base.object")
-import("core.base.bytes")
-import("core.base.socket")
-import("core.base.scheduler")
-import("private.service.socket_stream")
-import("private.service.message")
-
--- define module
-local server = server or object()
-
--- init server
-function server:init(daemon)
- self._DAEMON = daemon
-end
-
--- is daemon?
-function server:daemon()
- return self._DAEMON
-end
-
--- set handler
-function server:handler_set(handler)
- self._HANDLER = handler
-end
-
--- set the given listen address
-function server:address_set(address)
- local splitinfo = address:split(':', {plain = true})
- if #splitinfo == 2 then
- self._ADDR = splitinfo[1]
- self._PORT = splitinfo[2]
- else
- self._ADDR = "127.0.0.1"
- self._PORT = splitinfo[1]
- end
- assert(self._ADDR and self._PORT, "invalid listen address!")
-end
-
--- get the listen address
-function server:addr()
- return self._ADDR
-end
-
--- get the listen port
-function server:port()
- return self._PORT
-end
-
--- run main loop
-function server:runloop()
- assert(self._HANDLER, "no handler found!")
-
- -- ensure only one server process
- local lock = io.openlock(self:lockfile())
- if not lock:trylock() then
- raise("%s: has been started!", self)
- end
-
- -- save the current pid for stopping service
- io.writefile(self:pidfile(), os.getpid())
-
- -- run loop
- local sock = socket.bind(self:addr(), self:port())
- sock:listen(100)
- print("%s: listening %s:%d ..", self, self:addr(), self:port())
- io.flush()
- while true do
- local sock_client = sock:accept()
- if sock_client then
- scheduler.co_start(function (sock)
- self:_handle_session(sock)
- sock:close()
- end, sock_client)
- end
- end
- io.flush()
- sock:close()
-end
-
--- get class
-function server:class()
- return server
-end
-
--- get pid file
-function server:pidfile()
- return path.join(self:workdir(), "server.pid")
-end
-
--- get lock file
-function server:lockfile()
- return path.join(self:workdir(), "server.lock")
-end
-
--- get working directory
-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 stream = socket_stream(sock)
- while true do
- local msg = stream:recv_object()
- if msg then
- self:_HANDLER(stream, message(msg))
- else
- break
- end
- end
- print("%s: %s: session end", self, sock)
-end
-
-function server:__tostring()
- return "<server>"
-end
-
-function main()
- local instance = server()
- instance:init()
- return instance
-end
-