MyQEE\Server\Clusters\TaskServer::onReceive PHP Method

onReceive() public method

public onReceive ( $server, $fd, $fromId, $data )
    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);
        }
    }