EventRelayerGroup.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. /**
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation; either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License along
  14. * with this program; if not, write to the Free Software Foundation, Inc.,
  15. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  16. * http://www.gnu.org/copyleft/gpl.html
  17. *
  18. * @file
  19. */
  20. use MediaWiki\MediaWikiServices;
  21. /**
  22. * Factory class for spawning EventRelayer objects using configuration
  23. *
  24. * @since 1.27
  25. */
  26. class EventRelayerGroup {
  27. /** @var array[] */
  28. protected $configByChannel = [];
  29. /** @var EventRelayer[] */
  30. protected $relayers = [];
  31. /**
  32. * @param array[] $config Channel configuration
  33. */
  34. public function __construct( array $config ) {
  35. $this->configByChannel = $config;
  36. }
  37. /**
  38. * @deprecated since 1.27 Use MediaWikiServices::getInstance()->getEventRelayerGroup()
  39. * @return EventRelayerGroup
  40. */
  41. public static function singleton() {
  42. return MediaWikiServices::getInstance()->getEventRelayerGroup();
  43. }
  44. /**
  45. * @param string $channel
  46. * @return EventRelayer Relayer instance that handles the given channel
  47. */
  48. public function getRelayer( $channel ) {
  49. $channelKey = isset( $this->configByChannel[$channel] )
  50. ? $channel
  51. : 'default';
  52. if ( !isset( $this->relayers[$channelKey] ) ) {
  53. if ( !isset( $this->configByChannel[$channelKey] ) ) {
  54. throw new UnexpectedValueException( "No config for '$channelKey'" );
  55. }
  56. $config = $this->configByChannel[$channelKey];
  57. $class = $config['class'];
  58. $this->relayers[$channelKey] = new $class( $config );
  59. }
  60. return $this->relayers[$channelKey];
  61. }
  62. }