工程提交
This commit is contained in:
168
4G/tools/resource/soc_script/v2025.12.31.22/lib/libnet.lua
Normal file
168
4G/tools/resource/soc_script/v2025.12.31.22/lib/libnet.lua
Normal file
@@ -0,0 +1,168 @@
|
||||
--[[
|
||||
@module libnet
|
||||
@summary libnet 在socket库基础上的同步阻塞api,socket库本身是异步非阻塞api
|
||||
@version 1.0
|
||||
@date 2023.03.16
|
||||
@author lisiqi
|
||||
]]
|
||||
|
||||
local libnet = {}
|
||||
|
||||
--[[
|
||||
阻塞等待网卡的网络连接上,只能用于sysplus.taskInitEx创建的任务函数中
|
||||
@api libnet.waitLink(taskName,timeout,...)
|
||||
@string 任务标志
|
||||
@int 超时时间,如果==0或者空,则没有超时一致等待
|
||||
@... 其他参数和socket.linkup一致
|
||||
@return boolean 失败或者超时返回false 成功返回true
|
||||
]]
|
||||
function libnet.waitLink(taskName, timeout, ...)
|
||||
local succ, result = socket.linkup(...)
|
||||
if not succ then
|
||||
return false
|
||||
end
|
||||
if not result then
|
||||
result = sysplus.waitMsg(taskName, socket.LINK, timeout)
|
||||
else
|
||||
return true
|
||||
end
|
||||
if type(result) == 'table' and result[2] == 0 then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--[[
|
||||
阻塞等待IP或者域名连接上,如果加密连接还要等握手完成,只能用于sysplus.taskInitEx创建的任务函数中
|
||||
@api libnet.connect(taskName,timeout,...)
|
||||
@string 任务标志
|
||||
@int 超时时间,如果==0或者空,则没有超时一致等待
|
||||
@... 其他参数和socket.connect一致
|
||||
@return boolean 失败或者超时返回false 成功返回true
|
||||
]]
|
||||
function libnet.connect(taskName,timeout, ... )
|
||||
local succ, result = socket.connect(...)
|
||||
if not succ then
|
||||
return false
|
||||
end
|
||||
if not result then
|
||||
result = sysplus.waitMsg(taskName, socket.ON_LINE, timeout)
|
||||
else
|
||||
return true
|
||||
end
|
||||
if type(result) == 'table' and result[2] == 0 then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
阻塞等待客户端连接上,只能用于sysplus.taskInitEx创建的任务函数中
|
||||
@api libnet.listen(taskName,timeout,...)
|
||||
@string 任务标志
|
||||
@int 超时时间,如果==0或者空,则没有超时一致等待
|
||||
@... 其他参数和socket.listen一致
|
||||
@return boolean 失败或者超时返回false 成功返回true
|
||||
]]
|
||||
function libnet.listen(taskName,timeout, ... )
|
||||
local succ, result = socket.listen(...)
|
||||
if not succ then
|
||||
return false
|
||||
end
|
||||
if not result then
|
||||
result = sysplus.waitMsg(taskName, socket.ON_LINE, timeout)
|
||||
else
|
||||
return true
|
||||
end
|
||||
if type(result) == 'table' and result[2] == 0 then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
阻塞等待数据发送完成,只能用于sysplus.taskInitEx创建的任务函数中
|
||||
@api libnet.tx(taskName,timeout,...)
|
||||
@string 任务标志
|
||||
@int 超时时间,如果==0或者空,则没有超时一直等待
|
||||
@... 其他参数和socket.tx一致
|
||||
@return boolean 失败或者超时返回false,缓冲区满了或者成功返回true
|
||||
@return boolean 缓存区是否满了
|
||||
]]
|
||||
function libnet.tx(taskName,timeout, ...)
|
||||
local succ, is_full, result = socket.tx(...)
|
||||
if not succ then
|
||||
return false, is_full
|
||||
end
|
||||
if is_full then
|
||||
return true, true
|
||||
end
|
||||
if not result then
|
||||
result = sysplus.waitMsg(taskName, socket.TX_OK, timeout)
|
||||
else
|
||||
return true, is_full
|
||||
end
|
||||
if type(result) == 'table' and result[2] == 0 then
|
||||
return true, false
|
||||
else
|
||||
return false, is_full
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
阻塞等待新的网络事件,只能用于sysplus.taskInitEx创建的任务函数中,可以通过sysplus.sendMsg(taskName,socket.EVENT,0)或者sys_send(taskName,socket.EVENT,0)强制退出
|
||||
@api libnet.wait(taskName,timeout, netc)
|
||||
@string 任务标志
|
||||
@int 超时时间,如果==0或者空,则没有超时一致等待
|
||||
@userdata socket.create返回的netc
|
||||
@return boolean 网络异常返回false,其他返回true
|
||||
@return boolean 超时返回false,有新的网络事件到返回true
|
||||
]]
|
||||
function libnet.wait(taskName,timeout, netc)
|
||||
local succ, result = socket.wait(netc)
|
||||
if not succ then
|
||||
return false,false
|
||||
end
|
||||
if not result then
|
||||
result = sysplus.waitMsg(taskName, socket.EVENT, timeout)
|
||||
else
|
||||
return true,true
|
||||
end
|
||||
if type(result) == 'table' then
|
||||
if result[2] == 0 then
|
||||
return true, true
|
||||
else
|
||||
return false, false
|
||||
end
|
||||
else
|
||||
return true, false
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
阻塞等待网络断开连接,只能用于sysplus.taskInitEx创建的任务函数中
|
||||
@api libnet.close(taskName,timeout, netc)
|
||||
@string 任务标志
|
||||
@int 超时时间,如果==0或者空,则没有超时一致等待
|
||||
@userdata socket.create返回的netc
|
||||
]]
|
||||
function libnet.close(taskName,timeout, netc)
|
||||
local succ, result = socket.discon(netc)
|
||||
if not succ then
|
||||
socket.close(netc)
|
||||
return
|
||||
end
|
||||
if not result then
|
||||
result = sysplus.waitMsg(taskName, socket.CLOSED, timeout)
|
||||
else
|
||||
socket.close(netc)
|
||||
return
|
||||
end
|
||||
socket.close(netc)
|
||||
end
|
||||
|
||||
return libnet
|
||||
Reference in New Issue
Block a user