Client.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <?php
  2. /*
  3. * This file is part of the php-phantomjs.
  4. *
  5. * For the full copyright and license information, please view the LICENSE
  6. * file that was distributed with this source code.
  7. */
  8. namespace JonnyW\PhantomJs;
  9. use JonnyW\PhantomJs\Procedure\ProcedureLoaderInterface;
  10. use JonnyW\PhantomJs\Procedure\ProcedureCompilerInterface;
  11. use JonnyW\PhantomJs\IO\InputInterface;
  12. use JonnyW\PhantomJs\IO\OutputInterface;
  13. /**
  14. * PHP PhantomJs.
  15. *
  16. * @author Jon Wenmoth <contact@jonnyw.me>
  17. */
  18. class Client implements ClientInterface
  19. {
  20. /**
  21. * Client.
  22. *
  23. * @var \JonnyW\PhantomJs\Client\ClientInterface
  24. */
  25. protected static $instance;
  26. /**
  27. * PhantomJs engine.
  28. *
  29. * @var \JonnyW\PhantomJs\Engine
  30. */
  31. protected $engine;
  32. /**
  33. * Procedure loader.
  34. *
  35. * @var \JonnyW\PhantomJs\Procedure\ProcedureLoaderInterface
  36. */
  37. protected $procedureLoader;
  38. /**
  39. * Procedure validator.
  40. *
  41. * @var \JonnyW\PhantomJs\Procedure\ProcedureCompilerInterface
  42. */
  43. protected $procedureCompiler;
  44. /**
  45. * Procedure template.
  46. *
  47. * @var string
  48. */
  49. protected $procedure;
  50. /**
  51. * Internal constructor.
  52. *
  53. * @param \JonnyW\PhantomJs\Engine $engine
  54. * @param \JonnyW\PhantomJs\Procedure\ProcedureLoaderInterface $procedureLoader
  55. * @param \JonnyW\PhantomJs\Procedure\ProcedureCompilerInterface $procedureCompiler
  56. */
  57. public function __construct(Engine $engine, ProcedureLoaderInterface $procedureLoader, ProcedureCompilerInterface $procedureCompiler)
  58. {
  59. $this->engine = $engine;
  60. $this->procedureLoader = $procedureLoader;
  61. $this->procedureCompiler = $procedureCompiler;
  62. $this->procedure = 'default';
  63. }
  64. /**
  65. * Get singleton instance.
  66. *
  67. * @return \JonnyW\PhantomJs\Client\ClientInterface
  68. */
  69. public static function getInstance()
  70. {
  71. if (!self::$instance instanceof ClientInterface) {
  72. $serviceContainer = ServiceContainer::getInstance();
  73. self::$instance = new static(
  74. $serviceContainer->get('engine'),
  75. $serviceContainer->get('procedure_loader'),
  76. $serviceContainer->get('procedure_compiler')
  77. );
  78. }
  79. return self::$instance;
  80. }
  81. /**
  82. * Run client.
  83. *
  84. * @param \JonnyW\PhantomJs\IO\InputInterface $input
  85. * @param \JonnyW\PhantomJs\IO\OutputInterface $output
  86. *
  87. * @return \JonnyW\PhantomJs\IO\OutputInterface
  88. */
  89. public function run(InputInterface $input, OutputInterface $output)
  90. {
  91. $procedure = $this->procedureLoader->load($this->procedure);
  92. $this->procedureCompiler->compile($procedure, $input);
  93. $procedure->run($input, $output);
  94. return $output;
  95. }
  96. /**
  97. * Get PhantomJs engine.
  98. *
  99. * @return \JonnyW\PhantomJs\Engine
  100. */
  101. public function getEngine()
  102. {
  103. return $this->engine;
  104. }
  105. /**
  106. * Get procedure loader instance.
  107. *
  108. * @return \JonnyW\PhantomJs\Procedure\ProcedureLoaderInterface
  109. */
  110. public function getProcedureLoader()
  111. {
  112. return $this->procedureLoader;
  113. }
  114. /**
  115. * Get procedure compiler.
  116. *
  117. * @return \JonnyW\PhantomJs\Procedure\ProcedureCompilerInterface
  118. */
  119. public function getProcedureCompiler()
  120. {
  121. return $this->procedureCompiler;
  122. }
  123. /**
  124. * Set procedure template.
  125. *
  126. * @param string $procedure
  127. */
  128. public function setProcedure($procedure)
  129. {
  130. $this->procedure = $procedure;
  131. }
  132. /**
  133. * Get procedure template.
  134. *
  135. * @return string
  136. */
  137. public function getProcedure()
  138. {
  139. return $this->procedure;
  140. }
  141. /**
  142. * Get log.
  143. *
  144. * @return string
  145. */
  146. public function getLog()
  147. {
  148. return $this->getEngine()->getLog();
  149. }
  150. }