public async Task Load() { if (_logger.IsEnabled(LogLevel.Trace)) { _logger.LogTrace($"load() from storage: {Storage?.ToString() ?? "N/A"}"); } if (IsMultiplex) { if (_logger.IsEnabled(LogLevel.Trace)) { _logger.LogTrace($"load() should not be called on a multiplex MemoryCard. NOOP"); } return; } if (Payload != null) { throw new InvalidOperationException("memory had already loaded before."); } if (Storage != null) { Payload = await Storage.Load(); } else { if (_logger.IsEnabled(LogLevel.Trace)) { _logger.LogTrace($"load() no storage"); } Payload = new MemoryCardPayload(); } }
public override async Task Save(MemoryCardPayload payload) { if (Logger.IsEnabled(LogLevel.Trace)) { Logger.LogTrace($"save()"); } var request = new PutObjectRequest { BucketName = _options.Bucket, Key = Name }; var stream = new MemoryStream(); var writer = new StreamWriter(stream, Encoding.UTF8, 512, true); var serializer = new JsonSerializer(); serializer.Serialize(new JsonTextWriter(writer), payload); stream.Seek(0, SeekOrigin.Begin); request.InputStream = stream; var response = await _s3.PutObjectAsync(request); if (response.HttpStatusCode < HttpStatusCode.OK || response.HttpStatusCode >= HttpStatusCode.Ambiguous) { Logger.LogError($"save() failed. status code is {response.HttpStatusCode}"); var exception = new Exception("save() failed"); exception.Data.Add("request", request); exception.Data.Add("response", response); throw exception; } }
public override Task Save(MemoryCardPayload payload) { if (Logger.IsEnabled(LogLevel.Trace)) { Logger.LogTrace($"save()"); } return(PutObject(payload)); }
public override Task Save(MemoryCardPayload payload) { if (Logger.IsEnabled(LogLevel.Trace)) { Logger.LogTrace($"save()"); } return(Task.CompletedTask); }
public override async Task Save(MemoryCardPayload payload) { if (Logger.IsEnabled(LogLevel.Trace)) { Logger.LogTrace($"save() to {_absFileName}"); } var text = JsonConvert.SerializeObject(payload); await File.WriteAllTextAsync(_absFileName, text); }
private Task PutObject(MemoryCardPayload payload) { var source = new TaskCompletionSource <object>(); _ = Task.Run(() => { try { using var stream = new MemoryStream(); using var writer = new StreamWriter(stream, Encoding.UTF8, 512, true); var serializer = new JsonSerializer(); serializer.Serialize(writer, payload); _ = stream.Seek(0, SeekOrigin.Begin); var request = new PutObjectRequest { InputStream = stream, BucketName = _options.Bucket, ObjectKey = Name }; var response = _obs.PutObject(request); if (response.StatusCode >= HttpStatusCode.OK && response.StatusCode < HttpStatusCode.Ambiguous) { source.SetResult(VoidResult); } else { var exception = new Exception($"put object failed, response status is {response.StatusCode}"); exception.Data.Add("request", request); exception.Data.Add("response", response); source.SetException(exception); } } catch (Exception exception) { source.SetException(exception); } }); return(source.Task); }
public abstract Task Save(MemoryCardPayload payload);