X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FIrc%2Fircmanager.php;h=ebde56a94777fdb27f6eaade91bb50d343e0c753;hb=da61c8567c3cd96bf27462f3ca10cee276473c83;hp=8d9cac885b3998a068036189744f666d74b0a317;hpb=9b9a36e492523a7fa630475a4a3d46c3d58ffd8c;p=quix0rs-gnu-social.git diff --git a/plugins/Irc/ircmanager.php b/plugins/Irc/ircmanager.php index 8d9cac885b..ebde56a947 100644 --- a/plugins/Irc/ircmanager.php +++ b/plugins/Irc/ircmanager.php @@ -23,17 +23,18 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } * IRC background connection manager for IRC-using queue handlers, * allowing them to send outgoing messages on the right connection. * - * Input is handled during socket select loop, keepalive pings during idle. - * Any incoming messages will be handled. + * Input is handled during socket select loop, Any incoming messages will be handled. * * In a multi-site queuedaemon.php run, one connection will be instantiated * for each site being handled by the current process that has IRC enabled. */ class IrcManager extends ImManager { - public $conn = null; - public $regchecks = array(); - public $regchecksLookup = array(); + protected $conn = null; + protected $lastPing = null; + + protected $regChecks = array(); + protected $regChecksLookup = array(); /** * Initialize connection to server. @@ -71,18 +72,15 @@ class IrcManager extends ImManager { * @return void */ public function idle() { - // Call Phergie's doTick methods if necessary - try { - $this->conn->handleEvents(); - } catch (Phergie_Driver_Exception $e) { - $this->conn->reconnect(); + if (empty($this->lastPing) || time() - $this->lastPing > 120) { + $this->sendPing(); } } /** * Process IRC events that have come in over the wire. * - * @param resource $socket + * @param resource $socket Socket to handle input on * @return void */ public function handleInput($socket) { @@ -157,7 +155,6 @@ class IrcManager extends ImManager { /** * Called via a callback when a message is received - * * Passes it back to the queuing system * * @param array $data Data @@ -178,10 +175,10 @@ class IrcManager extends ImManager { public function handle_reg_response($data) { // Retrieve data $screenname = $data['screenname']; - $nickdata = $this->regchecks[$screenname]; + $nickdata = $this->regChecks[$screenname]; $usernick = $nickdata['user']->nickname; - if (isset($this->regchecksLookup[$usernick])) { + if (isset($this->regChecksLookup[$usernick])) { if ($data['registered']) { // Send message $this->plugin->send_confirmation_code($screenname, $nickdata['code'], $nickdata['user'], true); @@ -206,17 +203,17 @@ class IrcManager extends ImManager { } // Unset lookup value - unset($this->regchecksLookup[$usernick]); + unset($this->regChecksLookup[$usernick]); // Unset data - unset($this->regchecks[$screename]); + unset($this->regChecks[$screename]); } } /** * Send a message using the daemon * - * @param $data Message + * @param $data Message data * @return boolean true on success */ public function send_raw_message($data) { @@ -232,20 +229,16 @@ class IrcManager extends ImManager { $screenname = $nickdata['screenname']; // Cancel any existing checks for this user - if (isset($this->regchecksLookup[$usernick])) { - unset($this->regchecks[$this->regchecksLookup[$usernick]]); + if (isset($this->regChecksLookup[$usernick])) { + unset($this->regChecks[$this->regChecksLookup[$usernick]]); } - $this->regchecks[$screenname] = $nickdata; - $this->regchecksLookup[$usernick] = $screenname; + $this->regChecks[$screenname] = $nickdata; + $this->regChecksLookup[$usernick] = $screenname; } - $args = $data['data']['args']; - $lines = explode("\n", $args[1]); try { - foreach ($lines as $line) { - $this->conn->send($data['data']['command'], array($args[0], $line)); - } + $this->conn->send($data['data']['command'], $data['data']['args']); } catch (Phergie_Driver_Exception $e) { $this->conn->reconnect(); return false; @@ -253,4 +246,14 @@ class IrcManager extends ImManager { return true; } + + /** + * Sends a ping + * + * @return void + */ + protected function sendPing() { + $this->lastPing = time(); + $this->conn->send('PING', $this->lastPing); + } }