private function processRoomEvent(Event $event) { $eventId = $event->getId(); $this->logger->log(Level::EVENT, "Processing room event #{$eventId}", $event); try { $this->logger->log(Level::DEBUG, "Processing room event #{$eventId} for built in event handlers"); (yield $this->builtInActionManager->handleEvent($event)); $this->logger->log(Level::DEBUG, "Event #{$eventId} processed for built in event handlers"); $chatMessage = null; if ($event instanceof MessageEvent && ($this->devMode || $event->getUserId() !== $event->getRoom()->getSession()->getUser()->getId())) { $chatMessage = $this->messageFactory->build($event); if ($chatMessage instanceof Command) { $this->logger->log(Level::DEBUG, "Processing room event #{$eventId} for built in commands"); (yield $this->builtInActionManager->handleCommand($chatMessage)); $this->logger->log(Level::DEBUG, "Event #{$eventId} processed for built in commands"); } else { $this->logger->log(Level::DEBUG, "Event #{$eventId} is not a command, it's a " . get_class($chatMessage)); } } if (!$event instanceof RoomSourcedEvent) { // probably an Unknown event return; } $this->logger->log(Level::DEBUG, "Processing room event #{$eventId} for plugins"); (yield $this->pluginManager->handleRoomEvent($event, $chatMessage)); $this->logger->log(Level::DEBUG, "Event #{$eventId} processed for plugins"); } catch (\Throwable $e) { $this->logger->log(Level::DEBUG, "Something went wrong while processing event #{$eventId}: {$e}"); } }
public function handleEvent(Event $event) : Promise { if (!isset($this->eventHandlers[$event->getTypeId()])) { return new Success(); } return all(array_map(function (BuiltInEventHandler $handler) use($event) { return $handler->handleEvent($event); }, $this->eventHandlers[$event->getTypeId()])); }
public function handleEvent(Event $event) : Promise { /** @var Invitation $event */ $userId = $event->getUserId(); $userName = $event->getUserName(); $identifier = $this->identifierFactory->create($event->getRoomId(), $event->getHost()); $this->logger->log(Level::DEBUG, "Invited to {$identifier} by {$userName} (#{$userId})"); return $this->presenceManager->addRoom($identifier, $userId); }
/** * @param Event $event * @return Promise[] */ private function invokeHandlersForEvent(Event $event) : array { $room = $event instanceof RoomSourcedEvent ? $event->getRoom() : null; $filters = array_merge($this->typeFilteredEventHandlers[$event->getTypeId()] ?? [], $room ? $this->roomFilteredEventHandlers[$room->getIdentifier()->getIdentString()] ?? [] : [], $this->filteredEventHandlers); $promises = []; foreach ($filters as list($plugin, $filter)) { /** @var Filter $filter */ if (($room === null || $this->isPluginEnabledForRoom($plugin, $room)) && ($promise = $filter->executeForEvent($event))) { $promises[] = $promise; } } return $promises; }