コード例 #1
0
        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();
            }
        }
コード例 #2
0
ファイル: StorageS3.cs プロジェクト: yy520a/dotnet-wechaty
        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;
            }
        }
コード例 #3
0
 public override Task Save(MemoryCardPayload payload)
 {
     if (Logger.IsEnabled(LogLevel.Trace))
     {
         Logger.LogTrace($"save()");
     }
     return(PutObject(payload));
 }
コード例 #4
0
ファイル: StorageNop.cs プロジェクト: yy520a/dotnet-wechaty
 public override Task Save(MemoryCardPayload payload)
 {
     if (Logger.IsEnabled(LogLevel.Trace))
     {
         Logger.LogTrace($"save()");
     }
     return(Task.CompletedTask);
 }
コード例 #5
0
 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);
 }
コード例 #6
0
        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);
        }
コード例 #7
0
 public abstract Task Save(MemoryCardPayload payload);