This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,14 @@
using System;
namespace Kreta.Framework
{
[Serializable]
public class ArchivBelepesException : ServerException
{
[Obsolete("Ezt a konstruktort ne használd!")]
public ArchivBelepesException() { }
public ArchivBelepesException(string message)
: base(message) { }
}
}

View file

@ -0,0 +1,45 @@
using System;
using System.Runtime.Serialization;
using Kreta.Framework.Localization;
using Kreta.Framework.Logging;
namespace Kreta.Framework
{
/// <summary>
/// Sérült adat integritás.
/// </summary>
[FriendlyName(1000021, "Sérült adat integritás, kérjük értesítse az üzemeltetőt.\r\nHivatkozási hiba azonosító: {Id}")]
[ErrorCode(Events.FRAMEWORK_DATAINTEGRITYVIOLATION)]
[Serializable]
public class DataIntegrityException : ServerException
{
/// <summary>
/// Az osztály alapértelmezett konstruktora.
/// </summary>
[Obsolete("Ezt a konstruktort ne használd!")]
public DataIntegrityException() { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="message">A kivétel üzenete</param>
public DataIntegrityException(string message)
: base(message) { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="message">A kivétel üzenete</param>
/// <param name="innerException">A belső kivétel</param>
public DataIntegrityException(string message, Exception innerException)
: base(message, innerException, true) { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="info">Sorosítási adatok</param>
/// <param name="context">Sorosítási adatfolyam</param>
protected DataIntegrityException(SerializationInfo info, StreamingContext context)
: base(info, context) { }
}
}

View file

@ -0,0 +1,62 @@
using System;
using System.Collections;
using System.Text;
namespace Kreta.Framework.Exceptions
{
/// <summary>
/// Kivételek segédosztálya.
/// </summary>
public static class ExceptionUtil
{
/// <summary>
/// Ember számára olvasható karakterlánccá alakít egy kivételt.
/// </summary>
/// <param name="exception">A kivétel</param>
/// <returns>
/// A visszatérési érték tartalmazza a kivétel osztályának a nevét, a kivétel üzenetét, a kivétel vermét, és a belső kivételt.
/// </returns>
public static string ExceptionToString(Exception exception)
{
if (exception == null)
{
return "";
}
StringBuilder builder = new StringBuilder();
builder.Append(exception);
for (Exception innerException = exception; innerException != null; innerException = innerException.InnerException)
{
if (innerException == exception)
{
builder.Append(Environment.NewLine);
builder.AppendLine("Data:");
}
else
{
builder.Append(Environment.NewLine);
builder.Append("Inner exception data:");
}
foreach (DictionaryEntry entry in exception.Data)
{
string key = entry.Key.ToString();
if (key.StartsWith("$", StringComparison.OrdinalIgnoreCase)
||
entry.Value == null)
{
continue;
}
builder.AppendFormat("{0}={1}", key, entry.Value);
builder.AppendLine();
}
}
TypeLoadException typeLoadException = exception as TypeLoadException;
// ReSharper disable once InvertIf
if (typeLoadException != null)
{
builder.AppendFormat("Type: {0}", typeLoadException.TypeName);
builder.AppendLine();
}
return builder.ToString();
}
}
}

View file

@ -0,0 +1,228 @@
using System;
using System.Collections;
using System.Globalization;
using System.Linq;
using System.Runtime.Serialization;
using Kreta.Framework.Localization;
using Kreta.Framework.Logging;
namespace Kreta.Framework
{
/// <summary>
/// A keretrendszer kivételeinek absztrakt ősosztálya.
/// </summary>
[FriendlyName(1000003, "Ismeretlen rendszerhiba történt.")]
[LogLevel(LogLevel.ERROR)]
[ErrorCode(Events.FRAMEWORK_EXCEPTION)]
[Serializable]
public abstract class FrameworkException : Exception
{
/// <summary>
/// Belső osztály a nyelvesítés támogatására.
/// </summary>
sealed class FrameworkExceptionLocalizer : ExceptionLocalizer
{
public override string Localize(Exception exception, CultureInfo cultureInfo)
{
return ReplaceParameters(exception as FrameworkException, base.Localize(exception, cultureInfo), cultureInfo);
}
static string ReplaceParameters(FrameworkException exception, string template, CultureInfo cultureInfo)
{
if (exception == null)
{
return template;
}
if (string.IsNullOrWhiteSpace(template))
{
return exception.Message;
}
string result = template;
foreach (DictionaryEntry entry in exception.Data)
{
string placeholder = "{" + entry.Key + "}";
object value = entry.Value;
result = result.Replace(placeholder, value != null ? Localizer.Localize(value, cultureInfo) : "N/A");
}
result = result.Replace("{InnerException}", exception.InnerException != null ? Localizer.Localize(exception.InnerException, cultureInfo) : "");
result = result.Replace("{Message}", exception.Message);
result = result.Replace("{Id}", exception.Id);
string formattedClientErrorCode = string.Format(CultureInfo.InvariantCulture, "{0} ({1})", exception.ClientErrorCode, (int)exception.ClientErrorCode);
result = result.Replace("{ClientErrorCode}", formattedClientErrorCode);
return result.Trim();
}
}
const string _errorMessage = "Unknown system error occurred.";
/// <summary>
/// Az osztály statikus konstruktora.
/// </summary>
static FrameworkException()
{
Localizer.SetLocalizer(typeof(FrameworkException), new FrameworkExceptionLocalizer());
}
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="message">A kivétel üzenete</param>
/// <param name="innerException">A belső kivétel</param>
protected FrameworkException(string message, Exception innerException)
: base(message, innerException)
{
// ReSharper disable DoNotCallOverridableMethodsInConstructor
Data["$Id"] = Guid.NewGuid().ToString();
Data["$IsLogged"] = false;
// ReSharper restore DoNotCallOverridableMethodsInConstructor
}
/// <summary>
/// Az osztály alapértelmezett konstruktora.
/// </summary>
protected FrameworkException()
: this(_errorMessage, null) { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="message">A kivétel üzenete</param>
protected FrameworkException(string message)
: this(message, null) { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="info">Sorosítási adatok</param>
/// <param name="context">Sorosítási adatfolyam</param>
protected FrameworkException(SerializationInfo info, StreamingContext context)
: base(info, context) { }
/// <summary>
/// Beállítja egy paraméter értékét.
/// </summary>
/// <param name="key">A paraméter neve</param>
/// <param name="value">A paraméter értéke</param>
protected internal void SetValue(string key, object value)
{
if (value != null
&&
key != null
&&
key.Length > 0)
{
Data[key] = value;
}
}
/// <summary>
/// Naplózási szint.
/// </summary>
internal LogLevel LogLevel
{
get
{
LogLevelAttribute attribute =
GetType()
.GetCustomAttributes(typeof(LogLevelAttribute), true)
.OfType<LogLevelAttribute>()
.FirstOrDefault();
return attribute == null ? LogLevel.UNKNOWN : attribute.LogLevel;
}
}
/// <summary>
/// A kivétel üzenete.
/// </summary>
public override string Message
{
get
{
var result = base.Message;
foreach (DictionaryEntry entry in Data)
{
string placeholder = "{" + entry.Key + "}";
object value = entry.Value;
result = result.Replace(placeholder, value != null ? value.ToString() : "N/A");
}
return result;
}
}
/// <summary>
/// A kivétel adattartalma XML-ben.
/// </summary>
public string DataXml
{
get
{
var result = "<data>";
foreach (DictionaryEntry entry in Data.Cast<DictionaryEntry>().Where(entry => entry.Key.ToString() != "RequestXml"))
{
result += "<item name=\"";
result += entry.Key;
result += "\">";
object value = entry.Value;
string valuestring = value != null ? value.ToString() : "N/A";
result += valuestring;
result += "</item>";
}
result += "</data>";
return result;
}
}
/// <summary>
/// A kliensre visszaadott hibakód.
/// </summary>
internal Events ClientErrorCode
{
get
{
ErrorCodeAttribute attribute =
GetType()
.GetCustomAttributes(typeof(ErrorCodeAttribute), true)
.OfType<ErrorCodeAttribute>()
.FirstOrDefault();
return attribute == null ? Events.GENERAL : attribute.ErrorCode;
}
}
/// <summary>
/// A kivétel azonosítója, naplózáshoz használt.
/// </summary>
internal string Id
{
get
{
string result = Data["$Id"] as string;
if (result != null)
{
return result;
}
result = Guid.NewGuid().ToString();
Data["$Id"] = result;
return result;
}
}
/// <summary>
/// A kivétel naplózva lett-e már, vagy sem.
/// </summary>
internal bool IsLogged
{
get
{
return Equals(Data["$IsLogged"], true);
}
}
/// <summary>
/// Naplózottá minősíti a kivételt.
/// </summary>
internal void SetLogged()
{
Data["$IsLogged"] = true;
}
}
}

View file

@ -0,0 +1,54 @@
using System;
using System.Runtime.Serialization;
using Kreta.Framework.Localization;
using Kreta.Framework.Logging;
namespace Kreta.Framework
{
/// <summary>
/// Érvénytelen konfiguráció.
/// </summary>
[FriendlyName(1000023, "Érvénytelen konfiguráció.")]
[ErrorCode(Events.FRAMEWORK_CONFIG_INVALIDCONFIG)]
[Serializable]
public sealed class InvalidConfigurationException : ServerException
{
const string _errorMessage = "Invalid configuration.";
/// <summary>
/// Az osztály alapértelmezett konstruktora.
/// </summary>
public InvalidConfigurationException()
: this(_errorMessage, null) { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="message">A kivétel üzenete</param>
public InvalidConfigurationException(string message)
: this(message, null) { }
/// <summary>
/// Az osztály alapértelmezett konstruktora.
/// </summary>
/// <param name="innerException">A belső kivétel</param>
public InvalidConfigurationException(Exception innerException)
: this(_errorMessage, innerException) { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="message">A kivétel üzenete</param>
/// <param name="innerException">A belső kivétel</param>
public InvalidConfigurationException(string message, Exception innerException)
: base(message, innerException, true) { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="info">Sorosítási adatok</param>
/// <param name="context">Sorosítási adatfolyam</param>
InvalidConfigurationException(SerializationInfo info, StreamingContext context)
: base(info, context) { }
}
}

View file

@ -0,0 +1,52 @@
using System;
using System.Runtime.Serialization;
using Kreta.Framework.Localization;
using Kreta.Framework.Logging;
namespace Kreta.Framework
{
/// <summary>
/// Munkamenet-hibákkal kapcsolatos okok
/// </summary>
public enum SessionReason
{
/// <summary>
/// A munkamenet nem létezik
/// </summary>
NOT_EXISTS,
/// <summary>
/// A munkamenet már létezik
/// </summary>
EXISTS
}
/// <summary>
/// Érvénytelen munkamenet azonosító.
/// </summary>
[FriendlyName(1000043, "Érvénytelen vagy lejárt munkamenet.")]
[ErrorCode(Events.FRAMEWORK_SESSION_INVALID)]
[Serializable]
public sealed class InvalidSessionException : FrameworkException
{
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="sessionid">A munkamenet azonosítója</param>
/// <param name="reason">A kivétel oka</param>
public InvalidSessionException(string sessionid, SessionReason reason)
: base("Érvénytelen vagy lejárt munkamenet.", null)
{
Data.Add(LogParameter.REASON, reason);
Data.Add(LogParameter.SESSIONID, sessionid);
}
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="info">Sorosítási adatok</param>
/// <param name="context">Sorosítási adatfolyam</param>
InvalidSessionException(SerializationInfo info, StreamingContext context)
: base(info, context) { }
}
}

View file

@ -0,0 +1,15 @@
using System;
namespace Kreta.Framework
{
[Serializable]
public class JelszoValtoztatasKotelezoException : ServerException
{
public string Link { get; }
public JelszoValtoztatasKotelezoException(string link) : base()
{
this.Link = link;
}
}
}

View file

@ -0,0 +1,14 @@
using System;
namespace Kreta.Framework
{
[Serializable]
public class NextTanevBelepesException : ServerException
{
[Obsolete("Ezt a konstruktort ne használd!")]
public NextTanevBelepesException() { }
public NextTanevBelepesException(string message)
: base(message) { }
}
}

View file

@ -0,0 +1,21 @@
using System;
using System.Runtime.Serialization;
namespace Kreta.Framework.Exceptions
{
[Serializable]
public sealed class PanicException : Exception
{
const string _defaultMessage = "Don't panic!";
public PanicException() : base(_defaultMessage) { }
public PanicException(string message) : base(message) { }
public PanicException(string message, Exception inner) : base(message, inner) { }
public PanicException(Exception inner) : base(_defaultMessage, inner) { }
PanicException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
}

View file

@ -0,0 +1,68 @@
using System;
using System.Runtime.Serialization;
using Kreta.Framework.Localization;
namespace Kreta.Framework
{
/// <summary>
/// Általános kiszolgáló hiba.
/// </summary>
[FriendlyName(1000000, "Ismeretlen kiszolgálóhiba történt!")]
[Serializable]
public class ServerException : FrameworkException
{
/// <summary>
/// A kivétel végzetes-e, vagy sem.
/// </summary>
public bool IsFatal { get; private set; }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
public ServerException() { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="message">A felhasználónak szánt hibaüzenet</param>
public ServerException(string message)
: this(message, null, false) { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="message">A felhasználónak szánt hibaüzenet</param>
/// <param name="innerException">Az előző kivétel, ami történt</param>
public ServerException(string message, Exception innerException)
: this(message, innerException, false) { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="info">Sorosítási adatok</param>
/// <param name="context">Környezeti információk</param>
protected ServerException(SerializationInfo info, StreamingContext context)
: base(info, context) { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="message">A felhasználónak szánt hibaüzenet</param>
/// <param name="isFatal">A kivétel végzetes-e, vagy sem</param>
public ServerException(string message, bool isFatal)
: this(message, null, isFatal) { }
/// <summary>
/// Az osztály konstruktora.
/// </summary>
/// <param name="message">A felhasználónak szánt hibaüzenet</param>
/// <param name="innerException">Az előző kivétel, ami történt</param>
/// <param name="isFatal">A kivétel végzetes-e, vagy sem</param>
public ServerException(string message, Exception innerException, bool isFatal)
: base(message, innerException)
{
IsFatal = isFatal;
SetValue("IsFatal", isFatal.ToString());
}
}
}

View file

@ -0,0 +1,49 @@
using System;
using System.Runtime.Serialization;
using Kreta.Framework.Localization;
namespace Kreta.Framework
{
/// <summary>
/// A kiszolgáló nem indítható el.
/// </summary>
[FriendlyName(1000002, "Hiba történt a kiszolgáló indítása során. A részleteket lásd a naplóban.")]
[Serializable]
public sealed class ServerStartException : ServerException
{
/// <summary>
/// Az osztály konstruktora
/// </summary>
public ServerStartException() { }
/// <summary>
/// Az osztály konstruktora
/// </summary>
/// <param name="message">A kivétel üzenete</param>
public ServerStartException(string message)
: base(message) { }
/// <summary>
/// Az osztály konstruktora
/// </summary>
/// <param name="message">A kivétel üzenete</param>
/// <param name="innerException">Az előző kivétel, ami történt</param>
public ServerStartException(string message, Exception innerException)
: base(message, innerException) { }
/// <summary>
/// Az osztály konstruktora
/// </summary>
/// <param name="innerException">Az előző kivétel, ami történt</param>
public ServerStartException(Exception innerException)
: base("Error occurred during server startup.", innerException) { }
/// <summary>
/// Az osztály konstruktora
/// </summary>
/// <param name="info">Sorosítási adatok</param>
/// <param name="context">Környezeti információk</param>
ServerStartException(SerializationInfo info, StreamingContext context)
: base(info, context) { }
}
}