/// <summary> /// Creates a cloud queue message from stream event data. /// </summary> public string ToQueueMessage <T>(StreamId streamId, IEnumerable <T> events, StreamSequenceToken token, Dictionary <string, object> requestContext) { var azureQueueBatchMessage = new AzureQueueBatchContainerV2(streamId, events.Cast <object>().ToList(), requestContext); var rawBytes = this.serializationManager.SerializeToByteArray(azureQueueBatchMessage); return(Convert.ToBase64String(rawBytes)); }
/// <summary> /// Creates a deep copy of an object /// </summary> /// <param name="original">The object to create a copy of</param> /// <param name="context">The copy context.</param> /// <returns>The copy.</returns> public static object DeepCopy(object original, ICopyContext context) { var source = original as AzureQueueBatchContainerV2; if (source == null) { throw new ArgumentNullException(nameof(original)); } var copy = new AzureQueueBatchContainerV2(); context.RecordCopy(original, copy); var token = source.sequenceToken == null ? null : new EventSequenceTokenV2(source.sequenceToken.SequenceNumber, source.sequenceToken.EventIndex); List <object> events = null; if (source.events != null) { events = new List <object>(source.events.Count); foreach (var item in source.events) { events.Add(SerializationManager.DeepCopyInner(item, context)); } } var ctx = source.requestContext?.ToDictionary(kv => kv.Key, kv => SerializationManager.DeepCopyInner(kv.Value, context)); copy.SetValues(source.StreamGuid, source.StreamNamespace, events, ctx, token); return(copy); }
internal static CloudQueueMessage ToCloudQueueMessage <T>(Guid streamGuid, String streamNamespace, IEnumerable <T> events, Dictionary <string, object> requestContext) { var azureQueueBatchMessage = new AzureQueueBatchContainerV2(streamGuid, streamNamespace, events.Cast <object>().ToList(), requestContext); var rawBytes = SerializationManager.SerializeToByteArray(azureQueueBatchMessage); return(new CloudQueueMessage(rawBytes)); }
/// <summary> /// Creates a cloud queue message from stream event data. /// </summary> public CloudQueueMessage ToCloudQueueMessage <T>(Guid streamGuid, string streamNamespace, IEnumerable <T> events, Dictionary <string, object> requestContext) { var azureQueueBatchMessage = new AzureQueueBatchContainerV2(streamGuid, streamNamespace, events.Cast <object>().ToList(), requestContext); var rawBytes = this.serializationManager.SerializeToByteArray(azureQueueBatchMessage); //new CloudQueueMessage(byte[]) not supported in netstandard, taking a detour to set it var cloudQueueMessage = new CloudQueueMessage(null as string); cloudQueueMessage.SetMessageContent(rawBytes); return(cloudQueueMessage); }
/// <summary> /// Deserializes the container from the data stream. /// </summary> /// <param name="expected">The expected type</param> /// <param name="reader">The stream reader</param> /// <returns>The deserialized value</returns> public static object Deserialize(Type expected, BinaryTokenStreamReader reader) { var deserialized = new AzureQueueBatchContainerV2(); DeserializationContext.Current.RecordObject(deserialized); var guid = reader.ReadGuid(); var ns = reader.ReadString(); var eventToken = SerializationManager.DeserializeInner <EventSequenceTokenV2>(reader); var events = SerializationManager.DeserializeInner <List <object> >(reader); var context = SerializationManager.DeserializeInner <Dictionary <string, object> >(reader); deserialized.SetValues(guid, ns, events, context, eventToken); return(deserialized); }
/// <summary> /// Creates a deep copy of an object /// </summary> /// <param name="original">The object to create a copy of</param> /// <returns>The copy.</returns> public static object DeepCopy(object original) { var source = original as AzureQueueBatchContainerV2; if (source == null) { throw new ArgumentNullException(nameof(original)); } var copy = new AzureQueueBatchContainerV2(); SerializationContext.Current.RecordObject(original, copy); var token = source.sequenceToken == null ? null : new EventSequenceTokenV2(source.sequenceToken.SequenceNumber, source.sequenceToken.EventIndex); var events = source.events?.Select(SerializationManager.DeepCopyInner).ToList(); var context = source.requestContext?.ToDictionary(kv => kv.Key, kv => SerializationManager.DeepCopyInner(kv.Value)); copy.SetValues(source.StreamGuid, source.StreamNamespace, events, context, token); return(copy); }