X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FMeteor%2FMeteorPlugin.php;h=ec44eef17b3829ed26cf684df12db4d2747e06ef;hb=e1791525e818d7d4276da0fe7e7c526fe8794e7c;hp=f3cbc3eeae44660788c7402412c3a76bb5b6f7ac;hpb=0ab17f382b9993ada3d12d4cdace72cca53fb545;p=quix0rs-gnu-social.git diff --git a/plugins/Meteor/MeteorPlugin.php b/plugins/Meteor/MeteorPlugin.php index f3cbc3eeae..ec44eef17b 100644 --- a/plugins/Meteor/MeteorPlugin.php +++ b/plugins/Meteor/MeteorPlugin.php @@ -42,7 +42,6 @@ require_once INSTALLDIR.'/plugins/Realtime/RealtimePlugin.php'; * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @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,11 +65,31 @@ 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(); $scripts[] = 'http://'.$this->webserver.(($this->webport == 80) ? '':':'.$this->webport).'/meteor.js'; - $scripts[] = common_path('plugins/Meteor/meteorupdater.js'); + $scripts[] = $this->path('meteorupdater.min.js'); return $scripts; } @@ -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("Could not 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('Could not 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,16 @@ 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' => + // TRANS: Plugin description. + _m('Plugin to do "real time" updates using Comet/Bayeux.')); + return true; + } }