| 
									
										
										
										
											2010-07-09 04:04:45 -07:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * StatusNet - the distributed open-source microblogging tool | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Extends the bot class (Phergie_Bot) to allow connection and access to | 
					
						
							|  |  |  |  * sockets and to allow StatusNet to 'drive' the bot | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  Phergie | 
					
						
							| 
									
										
										
										
											2010-07-21 07:33:43 -07:00
										 |  |  |  * @package   Phergie_StatusnetBot | 
					
						
							| 
									
										
										
										
											2010-07-09 16:29:42 -07:00
										 |  |  |  * @author    Luke Fitzgerald <lw.fitzgerald@googlemail.com> | 
					
						
							| 
									
										
										
										
											2010-07-09 04:04:45 -07:00
										 |  |  |  * @copyright 2010 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 | 
					
						
							|  |  |  |  * @link      http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2010-07-21 07:33:43 -07:00
										 |  |  | class Phergie_StatusnetBot extends Phergie_Bot { | 
					
						
							| 
									
										
										
										
											2010-07-09 04:04:45 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |     * Set up bot and connect to servers | 
					
						
							|  |  |  |     * | 
					
						
							|  |  |  |     * @return void | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     public function connect() { | 
					
						
							|  |  |  |         $ui = $this->getUi(); | 
					
						
							|  |  |  |         $ui->setEnabled($this->getConfig('ui.enabled')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->loadPlugins(); | 
					
						
							|  |  |  |         $this->loadConnections(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 12:40:07 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |     * Transmit raw command to server using driver | 
					
						
							|  |  |  |     * | 
					
						
							|  |  |  |     * Handles construction of command strings and their transmission to the | 
					
						
							|  |  |  |     * server. | 
					
						
							|  |  |  |     * | 
					
						
							|  |  |  |     * @param string       $command Command to send | 
					
						
							|  |  |  |     * @param string|array $args    Optional string or array of sequential | 
					
						
							|  |  |  |     *        arguments | 
					
						
							|  |  |  |     * | 
					
						
							|  |  |  |     * @return string Command string that was sent | 
					
						
							|  |  |  |     * @throws Phergie_Driver_Exception | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     public function send($command, $args = '') { | 
					
						
							| 
									
										
										
										
											2010-07-20 11:16:59 -07:00
										 |  |  |         return $this->getDriver()->send($command, $args); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |     * Handle incoming data on the socket using the handleEvents | 
					
						
							|  |  |  |     * method of the Processor | 
					
						
							|  |  |  |     * | 
					
						
							|  |  |  |     * @return void | 
					
						
							|  |  |  |     */ | 
					
						
							| 
									
										
										
										
											2010-07-26 11:13:00 -07:00
										 |  |  |     public function handleEvents() { | 
					
						
							| 
									
										
										
										
											2010-07-20 11:16:59 -07:00
										 |  |  |         $this->getProcessor()->handleEvents(); | 
					
						
							| 
									
										
										
										
											2010-07-18 12:40:07 -07:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-23 13:33:41 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |     * Close the current connection and reconnect to the server | 
					
						
							|  |  |  |     * | 
					
						
							|  |  |  |     * @return void | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     public function reconnect() { | 
					
						
							|  |  |  |         $driver = $this->getDriver(); | 
					
						
							|  |  |  |         $sockets = $driver->getSockets(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Close any existing connections
 | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             $driver->forceQuit(); | 
					
						
							|  |  |  |         } catch (Phergie_Driver_Exception $e){} | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             $driver->doConnect(); | 
					
						
							|  |  |  |         } catch (Phergie_Driver_Exception $e){ | 
					
						
							|  |  |  |             $driver->forceQuit(); | 
					
						
							|  |  |  |             throw $e; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-09 04:04:45 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |     * Get the sockets used by the bot | 
					
						
							|  |  |  |     * | 
					
						
							|  |  |  |     * @return array Array of socket resources | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     public function getSockets() { | 
					
						
							|  |  |  |         return $this->getDriver()->getSockets(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |