* @copyright 2014 Fabian Grutschus. All rights reserved. * @license BSD * @link http://github.com/fabiang/xmpp */ namespace Fabiang\Xmpp\Protocol; use Fabiang\Xmpp\Options; use Fabiang\Xmpp\EventListener\EventListenerInterface; use Fabiang\Xmpp\Event\EventManagerInterface; use Fabiang\Xmpp\Event\EventManager; use Fabiang\Xmpp\EventListener\Stream\Stream; use Fabiang\Xmpp\EventListener\Stream\StreamError; use Fabiang\Xmpp\EventListener\Stream\StartTls; use Fabiang\Xmpp\EventListener\Stream\Authentication; use Fabiang\Xmpp\EventListener\Stream\Bind; use Fabiang\Xmpp\EventListener\Stream\Session; use Fabiang\Xmpp\EventListener\Stream\Roster as RosterListener; use Fabiang\Xmpp\EventListener\Stream\Register as RegisterListener; use Fabiang\Xmpp\EventListener\Stream\BlockedUsers as BlockedUsersListener; /** * Default Protocol implementation. * * @package Xmpp\Protocol */ class DefaultImplementation implements ImplementationInterface { /** * Options. * * @var Options */ protected $options; /** * Eventmanager. * * @var EventManagerInterface */ protected $events; /** * {@inheritDoc} */ public function register() { $this->registerListener(new Stream); $this->registerListener(new StreamError); $this->registerListener(new StartTls); $this->registerListener(new Authentication); $this->registerListener(new Bind); $this->registerListener(new Session); $this->registerListener(new RosterListener); $this->registerListener(new RegisterListener); $this->registerListener(new BlockedUsersListener); } /** * {@inheritDoc} */ public function registerListener(EventListenerInterface $eventListener) { $connection = $this->getOptions()->getConnection(); $eventListener->setEventManager($this->getEventManager()) ->setOptions($this->getOptions()) ->attachEvents(); $connection->addListener($eventListener); } /** * {@inheritDoc} */ public function getOptions() { return $this->options; } /** * {@inheritDoc} */ public function setOptions(Options $options) { $this->options = $options; return $this; } /** * {@inheritDoc} */ public function getEventManager() { if (null === $this->events) { $this->setEventManager(new EventManager()); } return $this->events; } /** * {@inheritDoc} */ public function setEventManager(EventManagerInterface $events) { $this->events = $events; return $this; } }