예제 #1
0
 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}");
     }
 }
예제 #2
0
 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()]));
 }
예제 #3
0
파일: Invite.php 프로젝트: Room-11/Jeeves
 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);
 }
예제 #4
0
 /**
  * @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;
 }