[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/includes/rcfeed/ -> RedisPubSubFeedEngine.php (source)

   1  <?php
   2  
   3  /**
   4   * This program is free software; you can redistribute it and/or modify
   5   * it under the terms of the GNU General Public License as published by
   6   * the Free Software Foundation; either version 2 of the License, or
   7   * (at your option) any later version.
   8   *
   9   * This program is distributed in the hope that it will be useful,
  10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12   * GNU General Public License for more details.
  13   *
  14   * You should have received a copy of the GNU General Public License along
  15   * with this program; if not, write to the Free Software Foundation, Inc.,
  16   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  17   * http://www.gnu.org/copyleft/gpl.html
  18   *
  19   * @file
  20   */
  21  
  22  /**
  23   * Emit a recent change notification via Redis Pub/Sub
  24   *
  25   * If the feed URI contains a path component, it will be used to generate a
  26   * channel name by stripping the leading slash and replacing any remaining
  27   * slashes with '.'. If no path component is present, the channel is set to
  28   * 'rc'. If the URI contains a query string, its parameters will be parsed
  29   * as RedisConnectionPool options.
  30   *
  31   * @example
  32   * $wgRCFeeds['redis'] = array(
  33   *      'formatter' => 'JSONRCFeedFormatter',
  34   *      'uri'       => "redis://127.0.0.1:6379/rc.$wgDBname",
  35   * );
  36   *
  37   * @since 1.22
  38   */
  39  class RedisPubSubFeedEngine implements RCFeedEngine {
  40  
  41      /**
  42       * @see RCFeedEngine::send
  43       */
  44  	public function send( array $feed, $line ) {
  45          $parsed = wfParseUrl( $feed['uri'] );
  46          $server = $parsed['host'];
  47          $options = array( 'serializer' => 'none' );
  48          $channel = 'rc';
  49  
  50          if ( isset( $parsed['port'] ) ) {
  51              $server .= ":{$parsed['port']}";
  52          }
  53          if ( isset( $parsed['query'] ) ) {
  54              parse_str( $parsed['query'], $options );
  55          }
  56          if ( isset( $parsed['pass'] ) ) {
  57              $options['password'] = $parsed['pass'];
  58          }
  59          if ( isset( $parsed['path'] ) ) {
  60              $channel = str_replace( '/', '.', ltrim( $parsed['path'], '/' ) );
  61          }
  62          $pool = RedisConnectionPool::singleton( $options );
  63          $conn = $pool->getConnection( $server );
  64          if ( $conn !== false ) {
  65              $conn->publish( $channel, $line );
  66              return true;
  67          } else {
  68              return false;
  69          }
  70      }
  71  }


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1