async Task ListenAsync(ISMTPImpostorHubClient client) { try { while (client.State == WebSocketState.Open) { try { var data = await client.ReceiveAsync(); if (!string.IsNullOrWhiteSpace(data)) { var message = Newtonsoft.Json.JsonConvert .DeserializeObject <SMTPImpostorHubMessage>(data); _messages.OnNext(message); try { var result = await _executor.ExecuteAsync(message.Type, message.Data); if (result != null && result != ActionNull.Instance) { await client.SendAsync( _serialization.Serialize( CreateMessageFrom(result) )); } } catch (Exception ex) { _logger.LogError(ex, $"Executor failed\n{data}"); } } } catch (WebSocketException ex) { _logger.LogError(ex, "ListenAsync"); } } } catch (Exception ex) { if (client.State == WebSocketState.Open) { _logger.LogError(ex, $"Could not receive message"); await client.CloseAsync(); } } }
async Task ISMTPImpostorHostSettingsStore .SaveAsync(IEnumerable <SMTPImpostorHostSettings> value) { var json = _serialization.Serialize(value); if (_cancel != null) { _cancel.Cancel(); } _cancel = new CancellationTokenSource(); try { await Task.Delay(500, _cancel.Token); await Delegates.RetryAsync( async() => await File.WriteAllTextAsync(FilePath, json), _logger); } catch (TaskCanceledException) { } _cancel = null; }