/** * @param InputInterface $input * @param OutputInterface $output * @return int|null|void Script exit code */ protected function execute(InputInterface $input, OutputInterface $output) { $brainName = $input->getArgument('brain'); $host = $input->getArgument('server'); $brain = $this->brainFactory->build($brainName); $responseInterpreter = new \Connect4\Client\ResponseInterpreter(); $client = new \Connect4\Client\Client($brain); $loop = \React\EventLoop\Factory::create(); $dnsResolverFactory = new \React\Dns\Resolver\Factory(); $dns = $dnsResolverFactory->createCached('8.8.8.8', $loop); $connector = new \React\SocketClient\Connector($loop, $dns); $connector->create($host, 1337)->then(function (\React\Stream\Stream $stream) use($brain, $responseInterpreter, $client) { $stream->write($brain->getName()); $stream->on('data', function ($data) use($stream, $client, $responseInterpreter) { if (!$data) { die('CONNECTION TERMINATED'); } $response = $responseInterpreter->buildResponse($data); $move = $client->handle($response); if ($move) { $stream->write($move->getColumn()->getValue()); } }); }); $loop->run(); }