public final function onReceive(\swoole_server $serv, $fd, $from_id, $data)
{
$requestInfo = Packet::packDecode($data);
#decode error
if ($requestInfo["code"] != 0) {
$pack["guid"] = $requestInfo["guid"];
$req = Packet::packEncode($requestInfo);
$serv->send($fd, $req);
return true;
} else {
$requestInfo = $requestInfo["data"];
}
#api was not set will fail
if (!is_array($requestInfo["api"]) && count($requestInfo["api"])) {
$pack = Packet::packFormat("param api is empty", 100003);
$pack["guid"] = $requestInfo["guid"];
$pack = Packet::packEncode($pack);
$serv->send($fd, $pack);
return true;
}
$guid = $requestInfo["guid"];
//prepare the task parameter
$task = array("type" => $requestInfo["type"], "guid" => $requestInfo["guid"], "fd" => $fd, "protocol" => "tcp");
//different task type process
switch ($requestInfo["type"]) {
case DoraConst::SW_MODE_WAITRESULT_SINGLE:
$task["api"] = $requestInfo["api"]["one"];
$taskid = $serv->task($task);
//result with task key
$this->taskInfo[$fd][$guid]["taskkey"][$taskid] = "one";
return true;
break;
case DoraConst::SW_MODE_NORESULT_SINGLE:
$task["api"] = $requestInfo["api"]["one"];
$serv->task($task);
//return success deploy
$pack = Packet::packFormat("transfer success.已经成功投递", 100001);
$pack["guid"] = $task["guid"];
$pack = Packet::packEncode($pack);
$serv->send($fd, $pack);
return true;
break;
case DoraConst::SW_MODE_WAITRESULT_MULTI:
foreach ($requestInfo["api"] as $k => $v) {
$task["api"] = $requestInfo["api"][$k];
$taskid = $serv->task($task);
$this->taskInfo[$fd][$guid]["taskkey"][$taskid] = $k;
}
return true;
break;
case DoraConst::SW_MODE_NORESULT_MULTI:
foreach ($requestInfo["api"] as $k => $v) {
$task["api"] = $requestInfo["api"][$k];
$serv->task($task);
}
$pack = Packet::packFormat("transfer success.已经成功投递", 100001);
$pack["guid"] = $task["guid"];
$pack = Packet::packEncode($pack);
$serv->send($fd, $pack);
return true;
break;
case DoraConst::SW_CONTROL_CMD:
switch ($requestInfo["api"]["cmd"]["name"]) {
case "getStat":
$pack = Packet::packFormat("OK", 0, array("server" => $serv->stats()));
$pack["guid"] = $task["guid"];
$pack = Packet::packEncode($pack);
$serv->send($fd, $pack);
return true;
break;
case "reloadTask":
$pack = Packet::packFormat("OK", 0, array("server" => $serv->stats()));
$pack["guid"] = $task["guid"];
$pack = Packet::packEncode($pack);
$serv->send($fd, $pack);
$serv->reload(true);
return true;
break;
default:
$pack = Packet::packFormat("unknow cmd", 100011);
$pack = Packet::packEncode($pack);
$serv->send($fd, $pack);
unset($this->taskInfo[$fd]);
break;
}
break;
case DoraConst::SW_MODE_ASYNCRESULT_SINGLE:
$task["api"] = $requestInfo["api"]["one"];
$taskid = $serv->task($task);
$this->taskInfo[$fd][$guid]["taskkey"][$taskid] = "one";
//return success
$pack = Packet::packFormat("transfer success.已经成功投递", 100001);
$pack["guid"] = $task["guid"];
$pack = Packet::packEncode($pack);
$serv->send($fd, $pack);
return true;
break;
case DoraConst::SW_MODE_ASYNCRESULT_MULTI:
foreach ($requestInfo["api"] as $k => $v) {
$task["api"] = $requestInfo["api"][$k];
$taskid = $serv->task($task);
$this->taskInfo[$fd][$guid]["taskkey"][$taskid] = $k;
}
//return success
$pack = Packet::packFormat("transfer success.已经成功投递", 100001);
$pack["guid"] = $task["guid"];
$pack = Packet::packEncode($pack);
$serv->send($fd, $pack);
break;
default:
$pack = Packet::packFormat("unknow task type.未知类型任务", 100002);
$pack = Packet::packEncode($pack);
$serv->send($fd, $pack);
//unset($this->taskInfo[$fd]);
return true;
}
return true;
}