/** * @param StreamName $streamName * @param Iterator $streamEvents * @throws Exception\RuntimeException * @return void */ public function appendTo(StreamName $streamName, Iterator $streamEvents) { $argv = ['streamName' => $streamName, 'streamEvents' => $streamEvents]; $event = $this->actionEventEmitter->getNewActionEvent(__FUNCTION__ . '.pre', $this, $argv); $this->getActionEventEmitter()->dispatch($event); if ($event->propagationIsStopped()) { return; } if (!$this->inTransaction) { throw new RuntimeException('Append events to stream failed. EventStore is not in an active transaction'); } $streamName = $event->getParam('streamName'); $streamEvents = $event->getParam('streamEvents'); $this->adapter->appendTo($streamName, $streamEvents); $this->recordedEvents->append($streamEvents); $event->setName(__FUNCTION__ . '.post'); $this->getActionEventEmitter()->dispatch($event); }
/** * @param StreamName $streamName * @param Message[] $streamEvents * @throws Exception\RuntimeException * @return void */ public function appendTo(StreamName $streamName, array $streamEvents) { foreach ($streamEvents as $streamEvent) { Assertion::isInstanceOf($streamEvent, Message::class); } $argv = ['streamName' => $streamName, 'streamEvents' => $streamEvents]; $event = $this->actionEventEmitter->getNewActionEvent(__FUNCTION__ . '.pre', $this, $argv); $this->getActionEventEmitter()->dispatch($event); if ($event->propagationIsStopped()) { return; } if ($this->transactionLevel === 0) { throw new RuntimeException('Append events to stream failed. EventStore is not in an active transaction'); } $streamName = $event->getParam('streamName'); $streamEvents = $event->getParam('streamEvents'); $this->adapter->appendTo($streamName, $streamEvents); $this->recordedEvents = array_merge($this->recordedEvents, $streamEvents); $event->setName(__FUNCTION__, '.post'); $this->getActionEventEmitter()->dispatch($event); }