public function onReceive($server, $fd, $fromId, $data)
{
/**
* @var \Swoole\Server $server
*/
$tmp = @msgpack_unpack($data);
if ($tmp && is_object($tmp)) {
$data = $tmp;
unset($tmp);
if ($data instanceof \stdClass) {
if ($data->bind) {
# 绑定进程ID
$server->bind($fd, $data->id);
return;
}
if ($key = \MyQEE\Server\Register\Client::$host->key) {
# 需要解密
$data = \MyQEE\Server\RPC\Server::decryption($data, $key);
# 解密失败
if (!$data) {
return;
}
}
$eof = \MyQEE\Server\RPC\Server::$EOF;
switch ($data->type) {
case 'task':
case 'taskWait':
$rs = Server::$workerTask->onTask($server, $data->id, $data->wid, $data->data, $data->sid);
if ($rs !== null || $data->type === 'taskWait') {
# 执行 Finish
$rsData = new \stdClass();
$rsData->id = $data->id;
$rsData->data = $rs;
$rsData->wname = $data->wname;
if ($key) {
# 加密数据
$rsData = \MyQEE\Server\RPC\Server::encrypt($rsData, $key) . $eof;
} else {
# 格式化数据
$rsData = msgpack_pack($rsData) . $eof;
}
$server->send($fd, $rsData, $fromId);
}
break;
}
}
} else {
Server::$instance->warn("task server get error msgpack data length: " . strlen($data));
Server::$instance->debug($data);
$this->server->close($fd);
}
}