X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/rcfeed/RedisPubSubFeedEngine.php diff --git a/includes/rcfeed/RedisPubSubFeedEngine.php b/includes/rcfeed/RedisPubSubFeedEngine.php new file mode 100644 index 00000000..8a3aa0c1 --- /dev/null +++ b/includes/rcfeed/RedisPubSubFeedEngine.php @@ -0,0 +1,75 @@ + 'JSONRCFeedFormatter', + * 'uri' => "redis://127.0.0.1:6379/rc.$wgDBname", + * ); + * @endcode + * + * @since 1.22 + */ +class RedisPubSubFeedEngine extends RCFeedEngine { + + /** + * @see FormattedRCFeed::send + * @param array $feed + * @param string $line + * @return bool + */ + public function send( array $feed, $line ) { + $parsed = wfParseUrl( $feed['uri'] ); + $server = $parsed['host']; + $options = [ 'serializer' => 'none' ]; + $channel = 'rc'; + + if ( isset( $parsed['port'] ) ) { + $server .= ":{$parsed['port']}"; + } + if ( isset( $parsed['query'] ) ) { + parse_str( $parsed['query'], $options ); + } + if ( isset( $parsed['pass'] ) ) { + $options['password'] = $parsed['pass']; + } + if ( isset( $parsed['path'] ) ) { + $channel = str_replace( '/', '.', ltrim( $parsed['path'], '/' ) ); + } + $pool = RedisConnectionPool::singleton( $options ); + $conn = $pool->getConnection( $server ); + if ( $conn !== false ) { + $conn->publish( $channel, $line ); + return true; + } else { + return false; + } + } +}