You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.2 KiB
Lua
42 lines
1.2 KiB
Lua
3 years ago
|
--[[
|
||
|
|
||
|
Copyright 2016 The Luvit Authors. All Rights Reserved.
|
||
|
|
||
|
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.
|
||
|
|
||
|
--]]
|
||
|
local getContext = require('./context')
|
||
|
local bioWrap = require('./biowrap')
|
||
|
|
||
|
local function assertResume(thread, ...)
|
||
|
local success, err = coroutine.resume(thread, ...)
|
||
|
if not success then
|
||
|
error(debug.traceback(thread, err), 0)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return function (socket, options, callback)
|
||
|
if options == true then options = {} end
|
||
|
local ctx = getContext(options)
|
||
|
local thread
|
||
|
if not callback then
|
||
|
thread = coroutine.running()
|
||
|
end
|
||
|
bioWrap(ctx, options.server, socket, callback or function (err, ssocket)
|
||
|
return assertResume(thread, ssocket, err)
|
||
|
end, options.servername)
|
||
|
if not callback then
|
||
|
return coroutine.yield()
|
||
|
end
|
||
|
end
|