Kraken\Runtime\Container\Manager\ProcessManagerBase::createProcess PHP Метод

createProcess() публичный Метод

public createProcess ( $alias, $name, $flags = Runtime::CREATE_DEFAULT, $params = [] )
    public function createProcess($alias, $name, $flags = Runtime::CREATE_DEFAULT, $params = [])
    {
        if (isset($this->processes[$alias])) {
            if ($name === null || $name === 'null') {
                $name = $this->processes[$alias]['name'];
            }
            $manager = $this;
            if ($flags === Runtime::CREATE_DEFAULT && $this->processes[$alias]['verified'] === false) {
                $req = $this->createRequest($this->channel, $alias, new RuntimeCommand('cmd:ping', $params));
                return $req->call()->then(function () {
                    return 'Process has been created.';
                }, function () use($manager, $alias, $name, $params) {
                    return $manager->createProcess($alias, $name, Runtime::CREATE_FORCE_HARD, $params);
                });
            } else {
                if ($flags === Runtime::CREATE_FORCE_SOFT) {
                    return $this->destroyProcess($alias, Runtime::DESTROY_FORCE_SOFT, $params)->then(function () use($manager, $alias, $name, $params) {
                        return $manager->createProcess($alias, $name, $params);
                    });
                } else {
                    if ($flags === Runtime::CREATE_FORCE_HARD) {
                        return $this->destroyProcess($alias, Runtime::DESTROY_FORCE_HARD, $params)->then(function () use($manager, $alias, $name, $params) {
                            return $manager->createProcess($alias, $name, $params);
                        });
                    } else {
                        if ($flags === Runtime::CREATE_FORCE) {
                            return $this->destroyProcess($alias, Runtime::DESTROY_FORCE, $params)->then(function () use($manager, $alias, $name, $params) {
                                return $manager->createProcess($alias, $name, $params);
                            });
                        } else {
                            return Promise::doReject(new ResourceOccupiedException('Process with such alias already exists.'));
                        }
                    }
                }
            }
        } else {
            if ($name === null) {
                return Promise::doReject(new InvalidArgumentException('Name of new process cannot be null.'));
            }
        }
        $pid = $this->system->run($this->phpCommand('kraken.process', [$this->runtime->getAlias(), $alias, $name], $this->context));
        if (!$this->system->existsPid($pid)) {
            return Promise::doReject(new ResourceOccupiedException('Process could not be created.'));
        }
        if (!$this->allocateProcess($alias, $name, $pid)) {
            return Promise::doReject(new ResourceOccupiedException('Process could not be created because of storage failure.'));
        }
        $req = $this->createRequest($this->channel, $alias, new RuntimeCommand('cmd:ping', $params));
        return $req->call()->then(function () {
            return 'Process has been created.';
        }, function ($reason) use($alias) {
            $this->freeProcess($alias);
            throw $reason;
        }, function ($reason) use($alias) {
            $this->freeProcess($alias);
            return $reason;
        });
    }