/// <summary> /// Exception occurs. /// </summary> protected void OnException ( [NotNull] ExecutionContext context ) { Sure.NotNull(context, nameof(context)); Log.Trace(nameof(AbstractEngine) + "::" + nameof(OnException)); // TODO Implement properly! if (context.Exception is ArsMagnaException exception && context.Connection is IrbisConnection connection) { if (!ReferenceEquals(connection.RawClientRequest, null)) { BinaryAttachment request = new BinaryAttachment ( "request", connection.RawClientRequest ); exception.Attach(request); } if (!ReferenceEquals(connection.RawServerResponse, null)) { BinaryAttachment response = new BinaryAttachment ( "response", connection.RawServerResponse ); exception.Attach(response); } } ExceptionOccurs?.Invoke(this, new ExecutionEventArgs(context)); }
private void _Resolve ( int count, Exception ex ) { Log.Error ( "RetryManager::_Resolve: " + "catch exception: " + ex.GetType().Name + ": " + ex.Message + ", count=" + count ); if (count >= RetryLimit) { Log.Error ( "RetryManager::_Resolve: " + "count exceeded limit=" + RetryLimit ); throw ex; } ExceptionEventArgs eventArgs = new ExceptionEventArgs(ex); ExceptionOccurs.Raise(this, eventArgs); if (ReferenceEquals(_resolver, null)) { return; } bool result = _resolver(ex); if (!result) { Log.Error ( "RetryManager::_Resolve: " + "couldn't resolve: " + ex.GetType().Name ); throw new ArsMagnaException ( "RetryManager failed", ex ); } Resolved.Raise(this); _Delay(); }