socketTask.lua 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. --- 模块功能:socket长连接功能测试.
  2. -- 与服务器连接成功后
  3. --
  4. -- 接收到的数据,通过串口透传给MCU
  5. --
  6. -- 串口收到的数据,透传到服务器
  7. --
  8. -- 与服务器断开连接后,会自动重连
  9. -- @author openLuat
  10. -- @module socketLongConnectionTrasparent.socketTask
  11. -- @license MIT
  12. -- @copyright openLuat
  13. -- @release 2018.03.27
  14. module(...,package.seeall)
  15. require"socket"
  16. require"socketOutMsg"
  17. require"socketInMsg"
  18. require"mcuUart"
  19. local ready = false
  20. --- socket连接是否处于激活状态
  21. -- @return 激活状态返回true,非激活状态返回false
  22. -- @usage socketTask.isReady()
  23. function isReady()
  24. return ready
  25. end
  26. --启动socket客户端任务
  27. sys.taskInit(
  28. function()
  29. local retryConnectCnt = 0
  30. while true do
  31. if not socket.isReady() then
  32. retryConnectCnt = 0
  33. --等待网络环境准备就绪,超时时间是5分钟
  34. sys.waitUntil("IP_READY_IND",300000)
  35. end
  36. if socket.isReady() then
  37. --创建一个socket tcp客户端
  38. local socketClient = socket.tcp()
  39. --阻塞执行socket connect动作,直至成功
  40. if socketClient:connect("180.97.80.55","12415") then
  41. retryConnectCnt = 0
  42. ready = true
  43. --循环处理接收和发送的数据
  44. while true do
  45. if not socketInMsg.proc(socketClient) then log.error("socketTask.socketInMsg.proc error") break end
  46. if not socketOutMsg.proc(socketClient) then log.error("socketTask.socketOutMsg proc error") break end
  47. end
  48. socketOutMsg.unInit()
  49. ready = false
  50. else
  51. retryConnectCnt = retryConnectCnt+1
  52. end
  53. --断开socket连接
  54. socketClient:close()
  55. if retryConnectCnt>=5 then link.shut() retryConnectCnt=0 end
  56. sys.wait(5000)
  57. else
  58. --进入飞行模式,20秒之后,退出飞行模式
  59. net.switchFly(true)
  60. sys.wait(20000)
  61. net.switchFly(false)
  62. end
  63. end
  64. end
  65. )