GeoJam2021/Assets/UserReporting/Scripts/Client/SerializableException.cs
2021-07-23 09:45:12 +02:00

113 lines
3.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace Unity.Cloud
{
/// <summary>
/// Represents a serializable exception.
/// </summary>
public class SerializableException
{
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="SerializableException"/> class.
/// </summary>
public SerializableException()
{
// Empty
}
/// <summary>
/// Creates a new instance of the <see cref="SerializableException"/> class.
/// </summary>
/// <param name="exception">The exception.</param>
public SerializableException(Exception exception)
{
// Message
this.Message = exception.Message;
// Full Text
this.FullText = exception.ToString();
// Type
Type exceptionType = exception.GetType();
this.Type = exceptionType.FullName;
// Stack Trace
this.StackTrace = new List<SerializableStackFrame>();
StackTrace stackTrace = new StackTrace(exception, true);
foreach (StackFrame stackFrame in stackTrace.GetFrames())
{
this.StackTrace.Add(new SerializableStackFrame(stackFrame));
}
// Problem Identifier
if (this.StackTrace.Count > 0)
{
SerializableStackFrame stackFrame = this.StackTrace[0];
this.ProblemIdentifier = string.Format("{0} at {1}.{2}", this.Type, stackFrame.DeclaringType, stackFrame.MethodName);
}
else
{
this.ProblemIdentifier = this.Type;
}
// Detailed Problem Identifier
if (this.StackTrace.Count > 1)
{
SerializableStackFrame stackFrame1 = this.StackTrace[0];
SerializableStackFrame stackFrame2 = this.StackTrace[1];
this.DetailedProblemIdentifier = string.Format("{0} at {1}.{2} from {3}.{4}", this.Type, stackFrame1.DeclaringType, stackFrame1.MethodName, stackFrame2.DeclaringType, stackFrame2.MethodName);
}
// Inner Exception
if (exception.InnerException != null)
{
this.InnerException = new SerializableException(exception.InnerException);
}
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the detailed problem identifier.
/// </summary>
public string DetailedProblemIdentifier { get; set; }
/// <summary>
/// Gets or sets the full text.
/// </summary>
public string FullText { get; set; }
/// <summary>
/// Gets or sets the inner exception.
/// </summary>
public SerializableException InnerException { get; set; }
/// <summary>
/// Gets or sets the message.
/// </summary>
public string Message { get; set; }
/// <summary>
/// Gets or sets the problem identifier.
/// </summary>
public string ProblemIdentifier { get; set; }
/// <summary>
/// Gets or sets the stack trace.
/// </summary>
public List<SerializableStackFrame> StackTrace { get; set; }
/// <summary>
/// Gets or sets the type.
/// </summary>
public string Type { get; set; }
#endregion
}
}