socketTask.lua 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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 "link"
  16. require "socket"
  17. require "socketOutMsg"
  18. require "socketInMsg"
  19. local ready = false
  20. --- socket连接是否处于激活状态
  21. -- @return 激活状态返回true,非激活状态返回false
  22. -- @usage socketTask.isReady()
  23. function isReady()
  24. return ready
  25. end
  26. local date = {
  27. mode = 1, -- 1表示客户端;2表示服务器;默认为1
  28. intPin = pio.P0_22, -- 以太网芯片中断通知引脚
  29. rstPin = pio.P0_21, -- 复位以太网芯片引脚
  30. powerFunc=function ( state )
  31. if state then
  32. local setGpioFnc_TX = pins.setup(pio.P0_7, 0)
  33. pmd.ldoset(15, pmd.LDO_VMMC)
  34. else
  35. pmd.ldoset(0, pmd.LDO_VMMC)
  36. local setGpioFnc_TX = pins.setup(pio.P0_7, 1)
  37. end
  38. end,
  39. spi = {spi.SPI_1, 0, 0, 8, 800000} -- SPI通道参数,id,cpha,cpol,dataBits,clock,默认spi.SPI_1,0,0,8,800000
  40. }
  41. -- 启动socket客户端任务
  42. local sign = true
  43. sys.taskInit(function()
  44. local retryConnectCnt = 0
  45. -- 打开链路层网络类型
  46. sys.wait(5000)
  47. link.openNetwork(link.CH395, date)
  48. while true do
  49. if not socket.isReady() then
  50. retryConnectCnt = 0
  51. -- 等待网络环境准备就绪,超时时间是5分钟
  52. sys.waitUntil("IP_READY_IND", 300000)
  53. end
  54. if socket.isReady() then
  55. -- 创建一个socket tcp客户端
  56. local socketClient = socket.tcp()
  57. -- 阻塞执行socket connect动作,直至成功
  58. if socketClient:connect("112.125.89.8", "35648") then
  59. retryConnectCnt = 0
  60. ready = true
  61. socketOutMsg.init()
  62. -- 循环处理接收和发送的数据
  63. while true do
  64. if not socketInMsg.proc(socketClient) then
  65. log.error("socketTask.socketInMsg.proc error")
  66. break
  67. end
  68. if not socketOutMsg.proc(socketClient) then
  69. log.error("socketTask.socketOutMsg proc error")
  70. break
  71. end
  72. end
  73. socketOutMsg.unInit()
  74. ready = false
  75. else
  76. retryConnectCnt = retryConnectCnt + 1
  77. end
  78. -- 断开socket连接
  79. socketClient:close()
  80. if retryConnectCnt >= 5 then
  81. link.shut()
  82. retryConnectCnt = 0
  83. end
  84. sys.wait(5000)
  85. else
  86. link.closeNetWork()
  87. sys.wait(20000)
  88. link.openNetwork(link.CH395, date)
  89. end
  90. end
  91. end)
  92. ---测试关闭模块后再开启效果
  93. -- sys.taskInit(function ()
  94. -- sys.wait(30000)
  95. -- link.closeNetWork(true)
  96. -- -- 打开链路层网络类型
  97. -- sys.wait(20000)
  98. -- link.closeNetWork(false)
  99. -- end)
  100. --以太网模式切换4G模式
  101. sys.taskInit(function ( )
  102. local num=false
  103. while true do
  104. sys.wait(120000)
  105. if num then
  106. log.info('CH395')
  107. link.openNetwork(link.CH395, date)
  108. num=false
  109. else
  110. log.info('4G')
  111. link.openNetwork(link.CELLULAR)
  112. num=true
  113. end
  114. end
  115. end)