agent.lua 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  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.updateYwKeyList()
  52. RECV_TASK.updateBlackBooks()
  53. RECV_TASK.getPullDataConfig()
  54. end)
  55. end
  56. function handle.message(id, msg, type)
  57. if msg == "ping" then
  58. websocket.write(id,"pong")
  59. return
  60. end
  61. msg = cjson.decode(msg)
  62. if M[msg.cmd] then
  63. M[msg.cmd](id,msg)
  64. else
  65. skynet.error("no find:",msg)
  66. end
  67. end
  68. function handle.ping(id)
  69. print("ws ping from: " .. tostring(id) .. "\n")
  70. end
  71. function handle.pong(id)
  72. print("ws pong from: " .. tostring(id))
  73. end
  74. function handle.close(id, code, reason)
  75. print("ws close from: " .. tostring(id), code, reason)
  76. AGENT_ID = 0
  77. isRunTask = false
  78. isActive = false
  79. closing = true
  80. end
  81. function handle.error(id)
  82. print("ws error from: " .. tostring(id))
  83. end
  84. local connect = function(fd, addr)
  85. if closing then
  86. return
  87. end
  88. local protocol = "ws"
  89. local ok, err = websocket.accept(fd, handle, protocol, addr)
  90. if not ok then
  91. skynet.error(err)
  92. else
  93. print("websocket connect!")
  94. end
  95. end
  96. function RECV_TASK.isActive()
  97. return isActive
  98. end
  99. function RECV_TASK.isRunStak()
  100. return isRunTask
  101. end
  102. function RECV_TASK.startOneTask(msg_body)
  103. skynet.error(" 收到老板的任务:",msg_body,AGENT_ID)
  104. local body = cjson.decode(msg_body)
  105. if AGENT_ID~=0 then
  106. isRunTask = true --工人进入工作状态
  107. websocket.write(AGENT_ID, cjson.encode({cmd="find_book",dy_url=body.dy_url}))
  108. end
  109. end
  110. function RECV_TASK.updatePullConig(msg_body)
  111. if AGENT_ID~=0 then
  112. isRunTask = true --工人进入工作状态
  113. websocket.write(AGENT_ID, cjson.encode({cmd="updatePullConig"}))
  114. end
  115. end
  116. function RECV_TASK.updatePullConig2(msg_body)
  117. if AGENT_ID~=0 then
  118. isRunTask = true --工人进入工作状态
  119. websocket.write(AGENT_ID, cjson.encode({cmd="updatePullConig2"}))
  120. end
  121. end
  122. function RECV_TASK.getPullDataConfig(msg_body)
  123. if AGENT_ID~=0 then
  124. isRunTask = true --工人进入工作状态
  125. websocket.write(AGENT_ID, cjson.encode({cmd="getPullDataConfig"}))
  126. end
  127. end
  128. function RECV_TASK.updateAppConfig(msg_body)
  129. -- local body = cjson.decode(msg_body)
  130. if AGENT_ID~=0 then
  131. isRunTask = true --工人进入工作状态
  132. websocket.write(AGENT_ID, cjson.encode({cmd="updateAppConfig"}))
  133. end
  134. end
  135. function RECV_TASK.updatePlatformConfig(msg_body)
  136. if AGENT_ID~=0 then
  137. isRunTask = true --工人进入工作状态
  138. websocket.write(AGENT_ID, cjson.encode({cmd="updatePlatformConfig"}))
  139. end
  140. end
  141. function RECV_TASK.updateMainConfig(msg_body)
  142. if AGENT_ID~=0 then
  143. isRunTask = true --工人进入工作状态
  144. websocket.write(AGENT_ID, cjson.encode({cmd="updateMainConfig"}))
  145. end
  146. end
  147. function RECV_TASK.updateFilterConfig(msg_body)
  148. if AGENT_ID~=0 then
  149. isRunTask = true --工人进入工作状态
  150. websocket.write(AGENT_ID, cjson.encode({cmd="updateFilterConfig"}))
  151. end
  152. end
  153. function RECV_TASK.addMain(msg_body)
  154. if AGENT_ID~=0 then
  155. isRunTask = true --工人进入工作状态
  156. websocket.write(AGENT_ID, cjson.encode({cmd="addMain",data=msg_body}))
  157. end
  158. end
  159. function RECV_TASK.updateFqKeyList(msg_body)
  160. if AGENT_ID~=0 then
  161. isRunTask = true --工人进入工作状态
  162. websocket.write(AGENT_ID, cjson.encode({cmd="updateFqKeyList",data=msg_body}))
  163. end
  164. end
  165. function RECV_TASK.updateFqMfKeyList(msg_body)
  166. if AGENT_ID~=0 then
  167. isRunTask = true --工人进入工作状态
  168. websocket.write(AGENT_ID, cjson.encode({cmd="updateFqMfKeyList",data=msg_body}))
  169. end
  170. end
  171. function RECV_TASK.updateYwKeyList(msg_body)
  172. if AGENT_ID~=0 then
  173. isRunTask = true --工人进入工作状态
  174. websocket.write(AGENT_ID, cjson.encode({cmd="updateYwKeyList",data=msg_body}))
  175. end
  176. end
  177. function RECV_TASK.updateBlackBooks(msg_body)
  178. if AGENT_ID~=0 then
  179. isRunTask = true --工人进入工作状态
  180. websocket.write(AGENT_ID, cjson.encode({cmd="updateBlackBooks",data=msg_body}))
  181. end
  182. end
  183. function RECV_TASK.syncMain(msg_body)
  184. if AGENT_ID~=0 then
  185. isRunTask = true --工人进入工作状态
  186. websocket.write(AGENT_ID, cjson.encode({cmd="syncMain",data=msg_body}))
  187. end
  188. end
  189. local dispatch = function(session, address,id, addr,cmd,...)
  190. if(cmd=="connect") then
  191. connect(id,addr)
  192. else
  193. local f = assert(RECV_TASK[cmd], cmd .. " not found")
  194. skynet.retpack(f(...))
  195. end
  196. end
  197. skynet.start(function()
  198. skynet.dispatch("lua", dispatch)
  199. end)