X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FMeteor%2FMeteorPlugin.php;h=a48c52b5691acab1d703acf53882cf0168c60828;hb=b5cfcba4712809cb17eabba299ce5ff04f4d7d70;hp=d54d565bda255f275f03f96e39b01b74a1451af9;hpb=81e6500cb95dd43bd0bb8c0a97b59266b82ef2a0;p=quix0rs-gnu-social.git diff --git a/plugins/Meteor/MeteorPlugin.php b/plugins/Meteor/MeteorPlugin.php index d54d565bda..a48c52b569 100644 --- a/plugins/Meteor/MeteorPlugin.php +++ b/plugins/Meteor/MeteorPlugin.php @@ -1,6 +1,6 @@ . * * @category Plugin - * @package Laconica - * @author Evan Prodromou - * @copyright 2009 Control Yourself, Inc. + * @package StatusNet + * @author Evan Prodromou + * @copyright 2009 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 - * @link http://laconi.ca/ + * @link http://status.net/ */ -if (!defined('LACONICA')) { +if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } @@ -37,12 +37,11 @@ require_once INSTALLDIR.'/plugins/Realtime/RealtimePlugin.php'; * Plugin to do realtime updates using Meteor * * @category Plugin - * @package Laconica - * @author Evan Prodromou + * @package StatusNet + * @author Evan Prodromou * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 - * @link http://laconi.ca/ + * @link http://status.net/ */ - class MeteorPlugin extends RealtimePlugin { public $webserver = null; @@ -50,6 +49,7 @@ class MeteorPlugin extends RealtimePlugin public $controlport = null; public $controlserver = null; public $channelbase = null; + public $persistent = true; protected $_socket = null; function __construct($webserver=null, $webport=4670, $controlport=4671, $controlserver=null, $channelbase='') @@ -65,6 +65,26 @@ class MeteorPlugin extends RealtimePlugin parent::__construct(); } + /** + * Pull settings from config file/database if set. + */ + function initialize() + { + $settings = array('webserver', + 'webport', + 'controlport', + 'controlserver', + 'channelbase'); + foreach ($settings as $name) { + $val = common_config('meteor', $name); + if ($val !== false) { + $this->$name = $val; + } + } + + return parent::initialize(); + } + function _getScripts() { $scripts = parent::_getScripts(); @@ -82,10 +102,17 @@ class MeteorPlugin extends RealtimePlugin function _connect() { $controlserver = (empty($this->controlserver)) ? $this->webserver : $this->controlserver; + + $errno = $errstr = null; + $timeout = 5; + $flags = STREAM_CLIENT_CONNECT; + if ($this->persistent) $flags |= STREAM_CLIENT_PERSISTENT; + // May throw an exception. - $this->_socket = stream_socket_client("tcp://{$controlserver}:{$this->controlport}"); + $this->_socket = stream_socket_client("tcp://{$controlserver}:{$this->controlport}", $errno, $errstr, $timeout, $flags); if (!$this->_socket) { - throw new Exception("Couldn't connect to {$controlserver} on {$this->controlport}"); + // TRANS: Exception. %1$s is the control server, %2$s is the control port. + throw new Exception(sprintf(_m('Couldn\'t connect to %1$s on %2$s.'),$controlserver,$this->controlport)); } } @@ -97,15 +124,18 @@ class MeteorPlugin extends RealtimePlugin $cnt = fwrite($this->_socket, $cmd); $result = fgets($this->_socket); if (preg_match('/^ERR (.*)$/', $result, $matches)) { - throw new Exception('Error adding meteor message "'.$matches[1].'"'); + // TRANS: Exception. %s is the Meteor message that could not be added. + throw new Exception(sprintf(_m('Error adding meteor message "%s"'),$matches[1])); } // TODO: parse and deal with result } function _disconnect() { - $cnt = fwrite($this->_socket, "QUIT\n"); - @fclose($this->_socket); + if (!$this->persistent) { + $cnt = fwrite($this->_socket, "QUIT\n"); + @fclose($this->_socket); + } } // Meteord flips out with default '/' separator @@ -117,4 +147,15 @@ class MeteorPlugin extends RealtimePlugin } return implode('-', $path); } + + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'Meteor', + 'version' => STATUSNET_VERSION, + 'author' => 'Evan Prodromou', + 'homepage' => 'http://status.net/wiki/Plugin:Meteor', + 'rawdescription' => + _m('Plugin to do "real time" updates using Comet/Bayeux.')); + return true; + } }