/** * @param Events $events */ public function play(Events $events) { /* @var $event \Apha\Message\Event */ foreach ($events->getIterator() as $event) { $this->eventBus->publish($event); } }
/** */ public final function onTick() { foreach ($this->schedule as $id => $task) { /* @var $task array */ if (key($task) < time()) { $event = reset($task); unset($this->schedule[$id]); $this->eventBus->publish($event); } } }
/** * @param Identity $aggregateId * @param string $aggregateType * @param Events $events * @param int $expectedPlayHead * @throws ConcurrencyException */ public function save(Identity $aggregateId, string $aggregateType, Events $events, int $expectedPlayHead) { if (!$this->isValidPlayHead($aggregateId, $expectedPlayHead)) { throw new ConcurrencyException($expectedPlayHead, $this->current[$aggregateId->getValue()]); } $playHead = $expectedPlayHead; foreach ($events->getIterator() as $event) { /* @var $event Event */ $playHead++; $event->setVersion($playHead); $this->saveEvent($aggregateId, $aggregateType, $event); $this->eventBus->publish($event); } }