. */ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } /** * AIM background connection manager for AIM-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. * * In a multi-site queuedaemon.php run, one connection will be instantiated * for each site being handled by the current process that has XMPP enabled. */ class MsnManager extends ImManager { public $conn = null; protected $lastping = null; private $pingInterval; /** * Initialize connection to server. * @return boolean true on success */ public function start($master) { if(parent::start($master)) { $this->connect(); return true; }else{ return false; } } public function getSockets() { $this->connect(); if($this->conn){ return $this->conn->getSockets(); }else{ return array(); } } /** * Idle processing for io manager's execution loop. * Send keepalive pings to server. */ public function idle($timeout=0) { $now = time(); if (empty($this->lastping) || $now - $this->lastping > $pingInterval) { $this->send_ping(); } } /** * Process MSN events that have come in over the wire. * @param resource $socket */ public function handleInput($socket) { common_log(LOG_DEBUG, "Servicing the MSN queue."); $this->stats('msn_process'); $this->conn->receive(); } function connect() { if (!$this->conn) { $this->conn=new MSN(array( 'user' => $this->plugin->user, 'password' => $this->plugin->password, 'alias' => $this->plugin->nickname, 'psm' => 'Send me a message to post a notice', 'debug' => true ) ); $this->conn->registerHandler("IMIn", array($this, 'handle_msn_message')); $this->conn->registerHandler('Pong', array($this, 'update_ping_time')); $this->conn->signon(); $this->lastping = time(); } return $this->conn; } function send_ping() { $this->connect(); if (!$this->conn) { return false; } $now = time(); $this->conn->send_ping(); $this->lastping = $now; return true; } /** * Update the time till the next ping * @param $data Time till next ping */ function update_ping_time($data) { $pingInterval = $data; } function handle_msn_message($data) { $this->plugin->enqueue_incoming_raw($data); return true; } function send_raw_message($data) { $this->connect(); if (!$this->conn) { return false; } $this->conn->sflapSend($data[0],$data[1],$data[2],$data[3]); // Sending a command updates the time till next ping $this->lastping = time(); $this->pingInterval = 50; return true; } }