Ejemplo n.º 1
0
 /**
  * @param CommandMessageInterface $commandMessage
  * @param SerializerInterface $serializer
  * @param bool $expectReply
  */
 public function __construct(CommandMessageInterface $commandMessage, SerializerInterface $serializer, $expectReply)
 {
     $this->commandMessage = $commandMessage;
     $this->commandIdentifier = $commandMessage->getIdentifier();
     $this->expectReply = $expectReply;
     $messageSerializer = new MessageSerializer($serializer);
     $payload = $messageSerializer->serializePayload($commandMessage);
     $metaData = $messageSerializer->serializeMetaData($commandMessage);
     $this->payloadType = $payload->getType()->getName();
     $this->payloadRevision = $payload->getType()->getRevision();
     $this->serializedPayload = $payload->getData();
     $this->serializedMetaData = $metaData->getData();
     $this->commandName = $commandMessage->getCommandName();
 }
 /**
  * @param EventMessageInterface $event
  * @return mixed
  */
 public function writeEventMessage(EventMessageInterface $event)
 {
     if ($event instanceof DomainEventMessageInterface) {
         $type = 3;
     } else {
         $type = 1;
     }
     $serializedPayload = $this->serializer->serializePayload($event);
     $serializedMetaData = $this->serializer->serializeMetaData($event);
     $data = pack("na36N", $type, $event->getIdentifier(), $event->getTimestamp()->format('U'));
     if ($event instanceof DomainEventMessageInterface) {
         $data .= pack("a36N", $event->getAggregateIdentifier(), $event->getScn());
     }
     $packFormat = sprintf("Na%sNa%sNa%s", strlen($serializedPayload->getType()->getName()), strlen($serializedPayload->getData()), strlen($serializedMetaData->getData()));
     $data .= pack($packFormat, strlen($serializedPayload->getType()->getName()), $serializedPayload->getType()->getName(), strlen($serializedPayload->getData()), $serializedPayload->getData(), strlen($serializedMetaData->getData()), $serializedMetaData->getData());
     return $data;
 }
Ejemplo n.º 3
0
 /**
  * Reads the data and constructs the suitable EventMessageInterface implementation.
  *
  * @param mixed $data Input data.
  * @return GenericDomainEventMessage|GenericEventMessage
  */
 public function readEventMessage($data)
 {
     $raw = unpack("ntype/a36identifier/Ntimestamp", $data);
     $offset = 42;
     if ($raw['type'] === 3) {
         $raw = array_merge($raw, unpack("a36aggregateIdentifier/Nscn", substr($data, $offset)));
         $offset += 40;
     }
     $this->read($raw, $offset, $data, "payloadType");
     $this->read($raw, $offset, $data, "payload");
     $this->read($raw, $offset, $data, "meta");
     $serializedPayload = new SimpleSerializedObject($raw['payload'], new SimpleSerializedType($raw['payloadType']));
     $serializedMetadata = new SimpleSerializedObject($raw['meta'], new SimpleSerializedType(MetaData::class));
     $dateTime = \DateTime::createFromFormat('U', $raw['timestamp']);
     $dateTime->setTimezone(new \DateTimeZone(date_default_timezone_get()));
     if (3 === $raw['type']) {
         return new GenericDomainEventMessage($raw['aggregateIdentifier'], $raw['scn'], $this->serializer->deserialize($serializedPayload), $this->serializer->deserialize($serializedMetadata), $raw['identifier'], $dateTime);
     } else {
         return new GenericEventMessage($this->serializer->deserialize($serializedPayload), $this->serializer->deserialize($serializedMetadata), $raw['identifier'], $dateTime);
     }
 }
Ejemplo n.º 4
0
 public function readEvents($type, $identifier)
 {
     $snapshotScn = -1;
     $snapshotEvent = null;
     $lastSnapshotEvent = $this->entryStore->loadLastSnapshotEvent($type, $identifier, $this->entityManager);
     if (null !== $lastSnapshotEvent) {
         try {
             $snapshotEvent = new GenericDomainEventMessage($identifier, $lastSnapshotEvent->getScn(), $this->serializer->deserialize($lastSnapshotEvent->getPayload()), $this->serializer->deserialize($lastSnapshotEvent->getMetaData()));
             $snapshotScn = $snapshotEvent->getScn();
         } catch (\RuntimeException $ex) {
             $this->logger->warn("Error while reading snapshot event entry. " . "Reconstructing aggregate on entire event stream. Caused by: {class} {message}", array('class' => get_class($ex), 'message' => $ex->getMessage()));
         }
     }
     $entries = $this->entryStore->fetchAggregateStream($type, $identifier, $snapshotScn, $this->batchSize, $this->entityManager);
     if ($snapshotEvent === null && !$entries->valid()) {
         throw new EventStreamNotFoundException($type, $identifier);
     }
     return new OrmDomainEventStream($this->serializer, $entries, $identifier, $snapshotEvent);
 }
Ejemplo n.º 5
0
 /**
  * Creates a new event entry to store in Mongo.
  *
  * @param string $aggregateType String containing the aggregate type of the event
  * @param DomainEventMessageInterface $event The actual DomainEvent to store
  * @param SerializerInterface $serializer Serializer to use for the event to store
  * @return EventEntry
  */
 public static function fromDomainEvent($aggregateType, DomainEventMessageInterface $event, SerializerInterface $serializer)
 {
     /**serializationTarget = String.class;
      * if (serializer.canSerializeTo(DBObject.class)) {
      * serializationTarget = DBObject.class;
      * }*/
     $messageSerializer = new MessageSerializer($serializer);
     $serializedPayloadObject = $messageSerializer->serializePayload($event);
     $serializedMetaDataObject = $messageSerializer->serializeMetaData($event);
     return new self($event->getAggregateIdentifier(), $event->getScn(), $event->getTimestamp()->getTimestamp(), $aggregateType, $serializedPayloadObject->getData(), $serializedPayloadObject->getType()->getName(), $serializedPayloadObject->getType()->getRevision(), $serializedMetaDataObject->getData(), $event->getIdentifier());
 }