agent.lua 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. local skynet = require "skynet"
  2. local socket = require "skynet.socket"
  3. local cjson = require "cjson"
  4. local tools = require "tools"
  5. local websocket = require "http.websocket"
  6. local mysqldbx = require "mysqldbx"
  7. local closing = false
  8. local isRunTask = false --是否在工作
  9. local isActive = false --是否激活
  10. local handle = {}
  11. local M = {}
  12. local RECV_TASK = {}
  13. local AGENT_ID = 0
  14. function handle.connect(id)
  15. print("ws connect from: " .. tostring(id))
  16. end
  17. function handle.handshake(id, header, url)
  18. local addr = websocket.addrinfo(id)
  19. print("ws handshake from: " .. tostring(id), "url", url, "addr:", addr)
  20. print("----header-----")
  21. for k,v in pairs(header) do
  22. print(k,v)
  23. end
  24. print("--------------")
  25. end
  26. --工人已完成
  27. function M.finish_task(id, msg)
  28. skynet.error("工人已完成:",cjson.encode(msg['data']))
  29. isRunTask = false --等待老板发送新任务
  30. end
  31. --工人未完成
  32. function M.unfinish_task(id, msg)
  33. skynet.error("工人未完成:",msg['data'].error_info)
  34. isRunTask = false
  35. end
  36. --工人准备工作
  37. function M.status_task(id, msg)
  38. skynet.error("工人准备工作:",id,msg)
  39. AGENT_ID = id
  40. isActive = true
  41. skynet.fork(function()
  42. RECV_TASK.updateAppConfig()
  43. -- skynet.sleep(200)
  44. RECV_TASK.updateFilterConfig()
  45. -- skynet.sleep(200)
  46. RECV_TASK.updateMainConfig()
  47. -- skynet.sleep(200)
  48. RECV_TASK.updatePlatformConfig()
  49. RECV_TASK.updateFqKeyList()
  50. RECV_TASK.updateFqMfKeyList()
  51. RECV_TASK.updateBlackBooks()
  52. RECV_TASK.getPullDataConfig()
  53. end)
  54. end
  55. function handle.message(id, msg, type)
  56. if msg == "ping" then
  57. websocket.write(id,"pong")
  58. return
  59. end
  60. msg = cjson.decode(msg)
  61. if M[msg.cmd] then
  62. M[msg.cmd](id,msg)
  63. else
  64. skynet.error("no find:",msg)
  65. end
  66. end
  67. function handle.ping(id)
  68. print("ws ping from: " .. tostring(id) .. "\n")
  69. end
  70. function handle.pong(id)
  71. print("ws pong from: " .. tostring(id))
  72. end
  73. function handle.close(id, code, reason)
  74. print("ws close from: " .. tostring(id), code, reason)
  75. AGENT_ID = 0
  76. isRunTask = false
  77. isActive = false
  78. closing = true
  79. end
  80. function handle.error(id)
  81. print("ws error from: " .. tostring(id))
  82. end
  83. local connect = function(fd, addr)
  84. if closing then
  85. return
  86. end
  87. local protocol = "ws"
  88. local ok, err = websocket.accept(fd, handle, protocol, addr)
  89. if not ok then
  90. skynet.error(err)
  91. else
  92. print("websocket connect!")
  93. end
  94. end
  95. function RECV_TASK.isActive()
  96. return isActive
  97. end
  98. function RECV_TASK.isRunStak()
  99. return isRunTask
  100. end
  101. function RECV_TASK.startOneTask(msg_body)
  102. skynet.error(" 收到老板的任务:",msg_body,AGENT_ID)
  103. local body = cjson.decode(msg_body)
  104. if AGENT_ID~=0 then
  105. isRunTask = true --工人进入工作状态
  106. websocket.write(AGENT_ID, cjson.encode({cmd="find_book",dy_url=body.dy_url}))
  107. end
  108. end
  109. function RECV_TASK.updatePullConig(msg_body)
  110. if AGENT_ID~=0 then
  111. isRunTask = true --工人进入工作状态
  112. websocket.write(AGENT_ID, cjson.encode({cmd="updatePullConig"}))
  113. end
  114. end
  115. function RECV_TASK.getPullDataConfig(msg_body)
  116. if AGENT_ID~=0 then
  117. isRunTask = true --工人进入工作状态
  118. websocket.write(AGENT_ID, cjson.encode({cmd="getPullDataConfig"}))
  119. end
  120. end
  121. function RECV_TASK.updateAppConfig(msg_body)
  122. -- local body = cjson.decode(msg_body)
  123. if AGENT_ID~=0 then
  124. isRunTask = true --工人进入工作状态
  125. websocket.write(AGENT_ID, cjson.encode({cmd="updateAppConfig"}))
  126. end
  127. end
  128. function RECV_TASK.updatePlatformConfig(msg_body)
  129. if AGENT_ID~=0 then
  130. isRunTask = true --工人进入工作状态
  131. websocket.write(AGENT_ID, cjson.encode({cmd="updatePlatformConfig"}))
  132. end
  133. end
  134. function RECV_TASK.updateMainConfig(msg_body)
  135. if AGENT_ID~=0 then
  136. isRunTask = true --工人进入工作状态
  137. websocket.write(AGENT_ID, cjson.encode({cmd="updateMainConfig"}))
  138. end
  139. end
  140. function RECV_TASK.updateFilterConfig(msg_body)
  141. if AGENT_ID~=0 then
  142. isRunTask = true --工人进入工作状态
  143. websocket.write(AGENT_ID, cjson.encode({cmd="updateFilterConfig"}))
  144. end
  145. end
  146. function RECV_TASK.addMain(msg_body)
  147. if AGENT_ID~=0 then
  148. isRunTask = true --工人进入工作状态
  149. websocket.write(AGENT_ID, cjson.encode({cmd="addMain",data=msg_body}))
  150. end
  151. end
  152. function RECV_TASK.updateFqKeyList(msg_body)
  153. if AGENT_ID~=0 then
  154. isRunTask = true --工人进入工作状态
  155. websocket.write(AGENT_ID, cjson.encode({cmd="updateFqKeyList",data=msg_body}))
  156. end
  157. end
  158. function RECV_TASK.updateFqMfKeyList(msg_body)
  159. if AGENT_ID~=0 then
  160. isRunTask = true --工人进入工作状态
  161. websocket.write(AGENT_ID, cjson.encode({cmd="updateFqMfKeyList",data=msg_body}))
  162. end
  163. end
  164. function RECV_TASK.updateBlackBooks(msg_body)
  165. if AGENT_ID~=0 then
  166. isRunTask = true --工人进入工作状态
  167. websocket.write(AGENT_ID, cjson.encode({cmd="updateBlackBooks",data=msg_body}))
  168. end
  169. end
  170. function RECV_TASK.syncMain(msg_body)
  171. if AGENT_ID~=0 then
  172. isRunTask = true --工人进入工作状态
  173. websocket.write(AGENT_ID, cjson.encode({cmd="syncMain",data=msg_body}))
  174. end
  175. end
  176. local dispatch = function(session, address,id, addr,cmd,...)
  177. if(cmd=="connect") then
  178. connect(id,addr)
  179. else
  180. local f = assert(RECV_TASK[cmd], cmd .. " not found")
  181. skynet.retpack(f(...))
  182. end
  183. end
  184. skynet.start(function()
  185. skynet.dispatch("lua", dispatch)
  186. end)