コード例 #1
0
        /// <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));
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        /// <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);
        }