/// <summary> /// Saves reference to message envelope as array of bytes. /// </summary> /// <param name="reference">The reference to to message envelope.</param> /// <returns>byte array that could be used to rebuild reference</returns> public static byte[] SaveEnvelopeReference(EnvelopeReference reference) { // important to use \r\n var builder = new StringBuilder(); builder .Append("[cqrs-ref-r1]\r\n") .Append(reference.StorageContainer).Append("\r\n") .Append(reference.StorageReference); return(Encoding.Unicode.GetBytes(builder.ToString())); }
public static bool TryReadAsEnvelopeReference(byte[] buffer, out EnvelopeReference reference) { if (BytesStart(buffer, Reference)) { var text = Encoding.Unicode.GetString(buffer); var args = text.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); reference = new EnvelopeReference(args[1], args[2]); return(true); } reference = null; return(false); }
CloudQueueMessage PrepareCloudMessage(ImmutableEnvelope builder) { var buffer = _streamer.SaveEnvelopeData(builder); if (buffer.Length < CloudQueueLimit) { // write message to queue return new CloudQueueMessage(buffer); } // ok, we didn't fit, so create reference message var referenceId = DateTimeOffset.UtcNow.ToString(DateFormatInBlobName) + "-" + builder.EnvelopeId; _cloudBlob.GetBlobReference(referenceId).UploadByteArray(buffer); var reference = new EnvelopeReference(builder.EnvelopeId, _cloudBlob.Uri.ToString(), referenceId); var blob = _streamer.SaveEnvelopeReference(reference); return new CloudQueueMessage(blob); }
private CloudQueueMessage PrepareCloudMessage(byte[] buffer) { if (buffer.Length < AzureMessageOverflows.CloudQueueLimit) { // write queue to queue return(new CloudQueueMessage(buffer)); } // ok, we didn't fit, so create reference queue var referenceId = DateTimeOffset.UtcNow.ToString(DateFormatInBlobName) + "-" + Guid.NewGuid().ToString().ToLowerInvariant(); this._cloudBlob.GetBlockBlobReference(referenceId).UploadFromByteArray(buffer, 0, buffer.Length); var reference = new EnvelopeReference(this._cloudBlob.Uri.ToString(), referenceId); var blob = AzureMessageOverflows.SaveEnvelopeReference(reference); return(new CloudQueueMessage(blob)); }
CloudQueueMessage PrepareCloudMessage(ImmutableEnvelope builder) { var buffer = _streamer.SaveEnvelopeData(builder); if (buffer.Length < CloudQueueLimit) { // write message to queue return(new CloudQueueMessage(buffer)); } // ok, we didn't fit, so create reference message var referenceId = DateTimeOffset.UtcNow.ToString(DateFormatInBlobName) + "-" + builder.EnvelopeId; _cloudBlob.GetBlobReference(referenceId).UploadByteArray(buffer); var reference = new EnvelopeReference(builder.EnvelopeId, _cloudBlob.Uri.ToString(), referenceId); var blob = _streamer.SaveEnvelopeReference(reference); return(new CloudQueueMessage(blob)); }
public bool TryReadAsEnvelopeReference(byte[] buffer, out EnvelopeReference reference) { if (BytesStart(buffer, Reference)) { var text = Encoding.Unicode.GetString(buffer); var args = text.Split(new[] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries); reference = new EnvelopeReference(args[1], args[2], args[3]); return true; } reference = null; return false; }
public byte[] SaveEnvelopeReference(EnvelopeReference reference) { // important to use \r\n var builder = new StringBuilder(); builder .Append("[cqrs-ref-r1]\r\n") .Append(reference.EnvelopeId).Append("\r\n") .Append(reference.StorageContainer).Append("\r\n") .Append(reference.StorageReference); return Encoding.Unicode.GetBytes(builder.ToString()); }