/// <summary> /// Convert an exception thrown by an RPC into an error message. /// </summary> internal Error HandleException(System.Exception exn) { if (exn is RPCException && exn.InnerException != null) { exn = exn.InnerException; } var message = exn.Message; var verboseErrors = Configuration.Instance.VerboseErrors; var stackTrace = verboseErrors ? exn.StackTrace : string.Empty; if (Logger.ShouldLog(Logger.Severity.Debug)) { Logger.WriteLine(message, Logger.Severity.Debug); if (verboseErrors) { Logger.WriteLine(stackTrace, Logger.Severity.Debug); } } var mappedType = GetMappedExceptionType(exn.GetType()); var type = mappedType ?? exn.GetType(); Error error; if (Reflection.HasAttribute <KRPCExceptionAttribute>(type)) { error = new Error(TypeUtils.GetExceptionServiceName(type), type.Name, message, stackTrace); } else { error = new Error(message, stackTrace); } return(error); }