socketTask.lua 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. --- 模块功能:socket长连接功能测试.
  2. -- 与服务器连接成功后
  3. --
  4. -- 每隔10秒钟发送一次"heart data\r\n"字符串到服务器
  5. --
  6. -- 每隔20秒钟发送一次"location data\r\n"字符串到服务器
  7. --
  8. -- 与服务器断开连接后,会自动重连
  9. -- @author openLuat
  10. -- @module socketLongConnection.testSocket1
  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. local ready = false
  19. --- socket连接是否处于激活状态
  20. -- @return 激活状态返回true,非激活状态返回false
  21. -- @usage socketTask.isReady()
  22. function isReady()
  23. return ready
  24. end
  25. -- demo使用的供电函数,测试时请根据自己的供电方式设置
  26. local function power(enable)
  27. if enable then
  28. pmd.ldoset(15, pmd.LDO_VMMC)
  29. else
  30. pmd.ldoset(0, pmd.LDO_VMMC)
  31. end
  32. end
  33. local para = {
  34. powerFunc = power
  35. }
  36. -- 启动socket客户端任务
  37. sys.taskInit(function()
  38. local retryConnectCnt = 0
  39. while true do
  40. link.openNetwork(link.ESP8266, para)
  41. if not socket.isReady() then
  42. retryConnectCnt = 0
  43. -- 等待网络环境准备就绪,超时时间是5分钟
  44. sys.waitUntil("IP_READY_IND", 300000)
  45. end
  46. if socket.isReady() then
  47. -- 创建一个socket tcp客户端
  48. local socketClient = socket.tcp()
  49. -- 阻塞执行socket connect动作,直至成功
  50. if socketClient:connect("112.125.89.8", "33871") then
  51. retryConnectCnt = 0
  52. ready = true
  53. socketOutMsg.init()
  54. -- 循环处理接收和发送的数据
  55. while true do
  56. if not socketInMsg.proc(socketClient) then
  57. log.error("socketTask.socketInMsg.proc error")
  58. break
  59. end
  60. if not socketOutMsg.proc(socketClient) then
  61. log.error("socketTask.socketOutMsg proc error")
  62. break
  63. end
  64. end
  65. socketOutMsg.unInit()
  66. ready = false
  67. else
  68. retryConnectCnt = retryConnectCnt + 1
  69. end
  70. -- 断开socket连接
  71. socketClient:close()
  72. if retryConnectCnt >= 5 then
  73. link.shut()
  74. retryConnectCnt = 0
  75. end
  76. sys.wait(5000)
  77. else
  78. -- 进入飞行模式,20秒之后,退出飞行模式
  79. net.switchFly(true)
  80. sys.wait(20000)
  81. net.switchFly(false)
  82. end
  83. end
  84. end)