예제 #1
0
 /**
  * @param Events $events
  */
 public function play(Events $events)
 {
     /* @var $event \Apha\Message\Event */
     foreach ($events->getIterator() as $event) {
         $this->eventBus->publish($event);
     }
 }
예제 #2
0
 /**
  * @param Events $history
  */
 public function loadFromHistory(Events $history)
 {
     if ($history->size() == 0) {
         return;
     }
     foreach ($history->getIterator() as $event) {
         $this->internalApplyChange($event, false);
     }
     $historyCopy = $history->getArrayCopy();
     /* @var $lastEvent Event */
     $lastEvent = end($historyCopy);
     $this->version = $lastEvent->getVersion();
 }
예제 #3
0
 /**
  * @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);
     }
 }