|
@@ -0,0 +1,144 @@
|
|
|
|
|
+local libnet = {}
|
|
|
|
|
+
|
|
|
|
|
+--- 阻塞等待网卡的网络连接上,只能用于任务函数中
|
|
|
|
|
+-- @string 任务标志
|
|
|
|
|
+-- @int 超时时间,如果==0或者空,则没有超时一致等待
|
|
|
|
|
+-- @... 其他参数和socket.linkup一致
|
|
|
|
|
+-- @return 失败或者超时返回false 成功返回true
|
|
|
|
|
+function libnet.waitLink(taskName, timeout, ...)
|
|
|
|
|
+ local is_err, result = socket.linkup(...)
|
|
|
|
|
+ if is_err then
|
|
|
|
|
+ return false
|
|
|
|
|
+ end
|
|
|
|
|
+ if not result then
|
|
|
|
|
+ result = sys_wait(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或者域名连接上,如果加密连接还要等握手完成,只能用于任务函数中
|
|
|
|
|
+-- @string 任务标志
|
|
|
|
|
+-- @int 超时时间,如果==0或者空,则没有超时一致等待
|
|
|
|
|
+-- @... 其他参数和socket.connect一致
|
|
|
|
|
+-- @return 失败或者超时返回false 成功返回true
|
|
|
|
|
+function libnet.connect(taskName,timeout, ... )
|
|
|
|
|
+ local is_err, result = socket.connect(...)
|
|
|
|
|
+ if is_err then
|
|
|
|
|
+ return false
|
|
|
|
|
+ end
|
|
|
|
|
+ if not result then
|
|
|
|
|
+ result = sys_wait(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
|
|
|
|
|
+
|
|
|
|
|
+--- 阻塞等待客户端连接上,只能用于任务函数中
|
|
|
|
|
+-- @string 任务标志
|
|
|
|
|
+-- @int 超时时间,如果==0或者空,则没有超时一致等待
|
|
|
|
|
+-- @... 其他参数和socket.listen一致
|
|
|
|
|
+-- @return 失败或者超时返回false 成功返回true
|
|
|
|
|
+function libnet.listen(taskName,timeout, ... )
|
|
|
|
|
+ local is_err, result = socket.listen(...)
|
|
|
|
|
+ if is_err then
|
|
|
|
|
+ return false
|
|
|
|
|
+ end
|
|
|
|
|
+ if not result then
|
|
|
|
|
+ result = sys_wait(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
|
|
|
|
|
+
|
|
|
|
|
+--- 阻塞等待数据发送完成,只能用于任务函数中
|
|
|
|
|
+-- @string 任务标志
|
|
|
|
|
+-- @int 超时时间,如果==0或者空,则没有超时一致等待
|
|
|
|
|
+-- @... 其他参数和socket.tx一致
|
|
|
|
|
+-- @return
|
|
|
|
|
+-- @boolean 失败或者超时返回false,缓冲区满了或者成功返回true
|
|
|
|
|
+-- @boolean 缓存区是否满了
|
|
|
|
|
+function libnet.tx(taskName,timeout, ...)
|
|
|
|
|
+ local is_err, is_full, result = socket.tx(...)
|
|
|
|
|
+ if is_err then
|
|
|
|
|
+ return false, is_full
|
|
|
|
|
+ end
|
|
|
|
|
+ if is_full then
|
|
|
|
|
+ return true, true
|
|
|
|
|
+ end
|
|
|
|
|
+ if not result then
|
|
|
|
|
+ result = sys_wait(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
|
|
|
|
|
+
|
|
|
|
|
+--- 阻塞等待新的网络事件或者特定事件,只能用于任务函数中
|
|
|
|
|
+-- @string 任务标志
|
|
|
|
|
+-- @int 超时时间,如果==0或者空,则没有超时一致等待
|
|
|
|
|
+-- @... 其他参数和socket.wait一致
|
|
|
|
|
+-- @return
|
|
|
|
|
+-- @boolean 网络异常返回false,其他返回true
|
|
|
|
|
+-- @table or boolean 超时返回false,有新的数据到返回true,被其他事件退出的,返回接收到的事件
|
|
|
|
|
+function libnet.wait(taskName,timeout, netc)
|
|
|
|
|
+ local is_err, result = socket.wait(netc)
|
|
|
|
|
+ if is_err then
|
|
|
|
|
+ return false,false
|
|
|
|
|
+ end
|
|
|
|
|
+ if not result then
|
|
|
|
|
+ result = sys_wait(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
|
|
|
|
|
+
|
|
|
|
|
+--- 阻塞等待网络断开连接,只能用于任务函数中
|
|
|
|
|
+-- @string 任务标志
|
|
|
|
|
+-- @int 超时时间,如果==0或者空,则没有超时一致等待
|
|
|
|
|
+-- @... 其他参数和socket.close一致
|
|
|
|
|
+-- @return 无
|
|
|
|
|
+function libnet.close(taskName,timeout, netc)
|
|
|
|
|
+ local is_err, result = socket.discon(netc)
|
|
|
|
|
+ if is_err then
|
|
|
|
|
+ socket.close(netc)
|
|
|
|
|
+ return
|
|
|
|
|
+ end
|
|
|
|
|
+ if not result then
|
|
|
|
|
+ result = sys_wait(taskName, socket.CLOSED, timeout)
|
|
|
|
|
+ else
|
|
|
|
|
+ socket.close(netc)
|
|
|
|
|
+ return
|
|
|
|
|
+ end
|
|
|
|
|
+ socket.close(netc)
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+return libnet
|