local skynet = require "skynet" local socket = require "skynet.socket" local cjson = require "cjson" local tools = require "tools" local websocket = require "http.websocket" local mysqldbx = require "mysqldbx" local closing = false local isRunTask = false --是否在工作 local isActive = false --是否激活 local handle = {} local M = {} local RECV_TASK = {} local AGENT_ID = 0 function handle.connect(id) print("ws connect from: " .. tostring(id)) end function handle.handshake(id, header, url) local addr = websocket.addrinfo(id) print("ws handshake from: " .. tostring(id), "url", url, "addr:", addr) print("----header-----") for k,v in pairs(header) do print(k,v) end print("--------------") end --工人已完成 function M.finish_task(id, msg) skynet.error("工人已完成:",cjson.encode(msg['data'])) isRunTask = false --等待老板发送新任务 end --工人未完成 function M.unfinish_task(id, msg) skynet.error("工人未完成:",msg['data'].error_info) isRunTask = false end --工人准备工作 function M.status_task(id, msg) skynet.error("工人准备工作:",id,msg) AGENT_ID = id isActive = true skynet.fork(function() RECV_TASK.updateAppConfig() -- skynet.sleep(200) RECV_TASK.updateFilterConfig() -- skynet.sleep(200) RECV_TASK.updateMainConfig() -- skynet.sleep(200) RECV_TASK.updatePlatformConfig() RECV_TASK.updateFqKeyList() RECV_TASK.updateFqMfKeyList() RECV_TASK.updateYwKeyList() RECV_TASK.updateBlackBooks() RECV_TASK.getPullDataConfig() end) end function handle.message(id, msg, type) if msg == "ping" then websocket.write(id,"pong") return end msg = cjson.decode(msg) if M[msg.cmd] then M[msg.cmd](id,msg) else skynet.error("no find:",msg) end end function handle.ping(id) print("ws ping from: " .. tostring(id) .. "\n") end function handle.pong(id) print("ws pong from: " .. tostring(id)) end function handle.close(id, code, reason) print("ws close from: " .. tostring(id), code, reason) AGENT_ID = 0 isRunTask = false isActive = false closing = true end function handle.error(id) print("ws error from: " .. tostring(id)) end local connect = function(fd, addr) if closing then return end local protocol = "ws" local ok, err = websocket.accept(fd, handle, protocol, addr) if not ok then skynet.error(err) else print("websocket connect!") end end function RECV_TASK.isActive() return isActive end function RECV_TASK.isRunStak() return isRunTask end function RECV_TASK.startOneTask(msg_body) skynet.error(" 收到老板的任务:",msg_body,AGENT_ID) local body = cjson.decode(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="find_book",dy_url=body.dy_url})) end end function RECV_TASK.updatePullConig(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="updatePullConig"})) end end function RECV_TASK.updatePullConig2(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="updatePullConig2"})) end end function RECV_TASK.getPullDataConfig(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="getPullDataConfig"})) end end function RECV_TASK.updateAppConfig(msg_body) -- local body = cjson.decode(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="updateAppConfig"})) end end function RECV_TASK.updatePlatformConfig(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="updatePlatformConfig"})) end end function RECV_TASK.updateMainConfig(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="updateMainConfig"})) end end function RECV_TASK.updateFilterConfig(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="updateFilterConfig"})) end end function RECV_TASK.addMain(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="addMain",data=msg_body})) end end function RECV_TASK.updateFqKeyList(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="updateFqKeyList",data=msg_body})) end end function RECV_TASK.updateFqMfKeyList(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="updateFqMfKeyList",data=msg_body})) end end function RECV_TASK.updateYwKeyList(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="updateYwKeyList",data=msg_body})) end end function RECV_TASK.updateBlackBooks(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="updateBlackBooks",data=msg_body})) end end function RECV_TASK.syncMain(msg_body) if AGENT_ID~=0 then isRunTask = true --工人进入工作状态 websocket.write(AGENT_ID, cjson.encode({cmd="syncMain",data=msg_body})) end end local dispatch = function(session, address,id, addr,cmd,...) if(cmd=="connect") then connect(id,addr) else local f = assert(RECV_TASK[cmd], cmd .. " not found") skynet.retpack(f(...)) end end skynet.start(function() skynet.dispatch("lua", dispatch) end)