/// <summary> /// record a connection issue, filling in timestamps etc. /// and notify the listener /// </summary> /// <param name="newIssue">the connection issue to be recorded</param> /// <param name="listener">the listener for connection issues</param> /// <param name="services">for reporting exceptions in listener</param> public void Record(ConnectionIssue newIssue, IConnectionIssueListener listener, ILogConsistencyProtocolServices services) { newIssue.TimeStamp = DateTime.UtcNow; if (Issue != null) { newIssue.TimeOfFirstFailure = Issue.TimeOfFirstFailure; newIssue.NumberOfConsecutiveFailures = Issue.NumberOfConsecutiveFailures + 1; newIssue.RetryDelay = newIssue.ComputeRetryDelay(Issue.RetryDelay); } else { newIssue.TimeOfFirstFailure = newIssue.TimeStamp; newIssue.NumberOfConsecutiveFailures = 1; newIssue.RetryDelay = newIssue.ComputeRetryDelay(null); } Issue = newIssue; try { listener.OnConnectionIssue(newIssue); } catch (Exception e) { services.CaughtUserCodeException("OnConnectionIssue", nameof(Record), e); } }
protected override void OnConnectionIssueResolved(ConnectionIssue issue) { Console.WriteLine("测试 OnConnectionIssueResolved"); Console.WriteLine($"NumberOfConsecutiveFailures:{issue.NumberOfConsecutiveFailures}"); Console.WriteLine($"RetryDelay(s):{issue.RetryDelay.TotalSeconds}"); Console.WriteLine($"TimeOfFirstFailure:{issue.TimeOfFirstFailure}"); Console.WriteLine($"TimeStamp:{issue.TimeStamp}"); base.OnConnectionIssueResolved(issue); }
/// <summary> /// if there is a recorded issue, notify listener and clear it. /// </summary> /// <param name="listener">the listener for connection issues</param> /// <param name="services">for reporting exceptions in listener</param> public void Resolve(IConnectionIssueListener listener, ILogConsistencyProtocolServices services) { if (Issue != null) { try { listener.OnConnectionIssueResolved(Issue); } catch (Exception e) { services.CaughtUserCodeException("OnConnectionIssueResolved", nameof(Record), e); } Issue = null; } }
protected override void OnConnectionIssueResolved(ConnectionIssue issue) { Console.WriteLine("OnConnectionIssueResolved"); base.OnConnectionIssueResolved(issue); }
protected override void OnConnectionIssueResolved(ConnectionIssue issue) { /// handle the resolution of a previously reported issue Logger.Error($"OnConnectionIssueResolved {issue.ToString()}"); }
protected override void OnConnectionIssue(ConnectionIssue issue) { Logger.Error($"OnConnectionIssue {issue.ToString()}"); }