/** * @param ChannelBaseInterface $channel */ protected function applyConsoleController(ChannelBaseInterface $channel) { $router = $channel->input(); $router->addAnchor(new RuleHandler(function ($params) { })); $router = $channel->output(); $router->addAnchor(new RuleHandler(function ($params) use($channel) { $channel->push($params['alias'], $params['protocol'], $params['flags'], $params['success'], $params['failure'], $params['cancel'], $params['timeout']); })); }
/** * @param RuntimeInterface $runtime * @param ChannelCompositeInterface $composite * @param ChannelBaseInterface $console */ private function applyRootRouting(RuntimeInterface $runtime, ChannelCompositeInterface $composite, ChannelBaseInterface $console) { $master = $composite->bus('master'); $slave = $composite->bus('slave'); $router = $composite->input(); $router->addAnchor(new RuleHandler(function ($params) { return true; })); $router = $composite->output(); $router->addAnchor(function ($receiver, ChannelProtocolInterface $protocol, $flags, callable $success = null, callable $failure = null, callable $cancel = null, $timeout = 0.0) use($runtime, $slave, $console) { if ($receiver === Runtime::RESERVED_CONSOLE_CLIENT || $protocol->getDestination() === Runtime::RESERVED_CONSOLE_CLIENT) { $console->push(Runtime::RESERVED_CONSOLE_CLIENT, $protocol, $flags, $success, $failure, $cancel, $timeout); } else { if ($runtime->manager()->existsRuntime($receiver) || $slave->isConnected($receiver)) { $slave->push($receiver, $protocol, $flags, $success, $failure, $cancel, $timeout); } else { $slave->push($slave->getConnected(), $protocol, $flags, $success, $failure, $cancel, $timeout); } } }); $router = $master->input(); $router->addRule(new RuleMatchDestination($master->name()), new RuleHandler(function ($params) use($composite) { $this->executeProtocol($composite, $params['protocol']); })); $router->addAnchor(new RuleHandler(function ($params) use($slave) { $slave->push($slave->getConnected(), $params['protocol'], $params['flags']); })); $router = $slave->input(); $router->addRule(new RuleMatchDestination($slave->name()), new RuleHandler(function ($params) use($composite) { $this->executeProtocol($composite, $params['protocol']); })); $router->addAnchor(new RuleHandler(function ($params) use($runtime, $slave, $console) { $receiver = $params['alias']; $protocol = $params['protocol']; if ($receiver === Runtime::RESERVED_CONSOLE_CLIENT || $protocol->getDestination() === Runtime::RESERVED_CONSOLE_CLIENT) { $console->push(Runtime::RESERVED_CONSOLE_CLIENT, $protocol, $params['flags']); } else { $slave->push($slave->getConnected(), $params['protocol'], $params['flags']); } })); $router = $master->output(); $router->addAnchor(function ($sender, ChannelProtocolInterface $protocol, $flags, callable $success = null, callable $failure = null, callable $cancel = null, $timeout = 0.0) use($master) { $master->push($sender, $protocol, $flags, $success, $failure, $cancel, $timeout); }); $router = $slave->output(); $router->addAnchor(function ($sender, ChannelProtocolInterface $protocol, $flags, callable $success = null, callable $failure = null, callable $cancel = null, $timeout = 0.0) use($slave) { $slave->push($sender, $protocol, $flags, $success, $failure, $cancel, $timeout); }); }