public async Task<CloudAppendBlob> GetBlobReference(String shardingKey, String containerName, String streamId, CancellationToken token, StreamOptions streamOptions) { var client = _hydra.CreateBlobClient(shardingKey); var account = client.Credentials.AccountName; var container = client.GetContainerReference(containerName); var semaphore = GetSemaphore(account, containerName, streamId); if (await semaphore.WaitAsync(TimeSpan.FromSeconds(5), token)) { try { if (streamOptions.CreateContainer && !GetContainerExists(account, containerName)) { await container.CreateIfNotExistsAsync(token); SetContainerExists(account, containerName); } var blob = container.GetAppendBlobReference(streamId); if (streamOptions.CreateBlob && !GetStreamExists(account, containerName, streamId) && !await blob.ExistsAsync(token)) { await blob.CreateOrReplaceAsync(token); SetStreamExists(account, containerName, streamId); } return blob; } finally { semaphore.Release(); } } throw new TimeoutException("Unable to get blob reference"); }
public async Task<String[]> ReadEventsAsync(String shardingKey, String streamId, StreamOptions options = default(StreamOptions), CancellationToken token = default(CancellationToken)) { var streamOptions = options ?? new StreamOptions(); var blob = await _streamContainer.GetBlobReference(shardingKey, Container, streamId, token, streamOptions); var content = await blob.DownloadTextAsync(Encoding.UTF8, null, null, null, token); return content.Split(new[] { DelimiterString }, StringSplitOptions.None); }
public async Task WriteEventAsync(String shardingKey, String streamId, String eventData, StreamOptions options = default(StreamOptions), CancellationToken token = default(CancellationToken)) { var dataBuilder = new StringBuilder(eventData); var streamOptions = options ?? new StreamOptions(); var blob = await _streamContainer.GetBlobReference(shardingKey, Container, streamId, token, streamOptions); if (streamOptions.AppendDelimeter) { dataBuilder.Append(DelimiterString); } using (var dataStream = new MemoryStream(Encoding.UTF8.GetBytes(dataBuilder.ToString()))) { await blob.AppendBlockAsync(dataStream, null, token); } }
public async Task <CloudAppendBlob> GetBlobReference(string shardingKey, string containerName, string streamId, CancellationToken token, StreamOptions streamOptions) { var client = _hydra.CreateBlobClient(shardingKey); var account = client.Credentials.AccountName; var container = client.GetContainerReference(containerName); var semaphore = GetSemaphore(account, containerName, streamId); if (await semaphore.WaitAsync(TimeSpan.FromSeconds(5), token)) { try { if (streamOptions.CreateContainer && !GetContainerExists(account, containerName)) { await container.CreateIfNotExistsAsync(BlobContainerPublicAccessType.Off, null, null, token); SetContainerExists(account, containerName); } var blob = container.GetAppendBlobReference(streamId); if (streamOptions.CreateBlob && !GetStreamExists(account, containerName, streamId) && !await blob.ExistsAsync(null, null, token)) { await blob.CreateOrReplaceAsync(null, null, null, token); SetStreamExists(account, containerName, streamId); } return(blob); } finally { semaphore.Release(); } } throw new TimeoutException("Unable to get blob reference"); }
public async Task <string[]> ReadEventsAsync(string shardingKey, string streamId, StreamOptions options = default(StreamOptions), CancellationToken token = default(CancellationToken)) { var streamOptions = options ?? new StreamOptions(); var blob = await _streamContainer.GetBlobReference(shardingKey, Container, streamId, token, streamOptions); var content = await blob.DownloadTextAsync(Encoding.UTF8, null, null, null, token); return(content.Split(new[] { DelimiterString }, StringSplitOptions.None)); }
public async Task WriteEventAsync(string shardingKey, string streamId, string eventData, StreamOptions options = default(StreamOptions), CancellationToken token = default(CancellationToken)) { var dataBuilder = new StringBuilder(eventData); var streamOptions = options ?? new StreamOptions(); var blob = await _streamContainer.GetBlobReference(shardingKey, Container, streamId, token, streamOptions); if (streamOptions.AppendDelimeter) { dataBuilder.Append(DelimiterString); } using (var dataStream = new MemoryStream(Encoding.UTF8.GetBytes(dataBuilder.ToString()))) { await blob.AppendBlockAsync(dataStream, null, null, null, null, token); } }