using System; using Fort23.UTool; namespace Core.Utility { public struct EncryptionLong : EncryptionBasic, IFormattable { public static Random random = new Random(123); private long _key; private long _value; // private event System.Action _callBack; public long Value { get { return Decrypt(_value); } set { _value = Encryption(value); // try // { // _callBack?.Invoke(value); // } // catch (Exception e) // { // LogTool.Exception(e); // } } } public long Decrypt(long v) { return v ^ _key; } // public void AddCallBack(Action callBack) // { // _callBack += callBack; // } // // public void RemoveCallBack(Action callBack) // { // _callBack -= callBack; // } public long Encryption(long v) { _key = (long)random.Next(1, int.MaxValue); return v ^ _key; } public static explicit operator EncryptionLong(long value) { EncryptionLong encryptionLong = new EncryptionLong(); encryptionLong.Value = value; return encryptionLong; } public static explicit operator EncryptionLong(int value) { EncryptionLong encryptionLong = new EncryptionLong(); encryptionLong.Value = value; return encryptionLong; } public static bool operator ==(EncryptionLong x, EncryptionLong y) { return x.Value == y.Value; } public static bool operator !=(EncryptionLong x, EncryptionLong y) { return x.Value != y.Value; } public static bool operator >(EncryptionLong x, float y) { return x.Value > y; } public static bool operator <(EncryptionLong x, float y) { return x.Value < y; } public static bool operator >(float x, EncryptionLong y) { return x > y.Value; } public static bool operator <(float x, EncryptionLong y) { return x < y.Value; } public static bool operator >(EncryptionLong x, EncryptionLong y) { return x.Value > y.Value; } public static bool operator <(EncryptionLong x, EncryptionLong y) { return x.Value < y.Value; } public static bool operator >=(int x, EncryptionLong y) { return x >= y.Value; } public static bool operator <=(int x, EncryptionLong y) { return x <= y.Value; } public static bool operator >=(float x, EncryptionLong y) { return x >= y.Value; } public static bool operator <=(float x, EncryptionLong y) { return x <= y.Value; } public static bool operator >=(EncryptionLong x, int y) { return x.Value >= y; } public static bool operator <=(EncryptionLong x, int y) { return x.Value <= y; } public static bool operator >=(EncryptionLong x, float y) { return x.Value >= y; } public static bool operator <=(EncryptionLong x, float y) { return x.Value <= y; } public static bool operator >=(EncryptionLong x, EncryptionLong y) { return x.Value >= y.Value; } public static bool operator <=(EncryptionLong x, EncryptionLong y) { return x.Value <= y.Value; } public static EncryptionLong operator /(EncryptionLong x, int y) { return (EncryptionLong)(x.Value / y); } public static EncryptionLong operator /(int x, EncryptionLong y) { return (EncryptionLong)(x / y.Value); } #if !COMBAT_SERVER #endif public static EncryptionLong operator /(EncryptionLong x, EncryptionLong y) { return (EncryptionLong)(x.Value / y.Value); } public static EncryptionLong operator *(int x, EncryptionLong y) { return (EncryptionLong)(x * y.Value); } public static EncryptionLong operator *(EncryptionLong x, int y) { return (EncryptionLong)(x.Value * y); } public static EncryptionLong operator *(long x, EncryptionLong y) { return (EncryptionLong)(x * y.Value); } public static EncryptionLong operator *(EncryptionLong x, long y) { return (EncryptionLong)(x.Value * y); } public static EncryptionLong operator *(EncryptionLong x, EncryptionLong y) { return (EncryptionLong)(x.Value * y.Value); } public static EncryptionLong operator +(int x, EncryptionLong y) { return (EncryptionLong)(x + y.Value); } public static EncryptionLong operator +(EncryptionLong x, int y) { return (EncryptionLong)(x.Value + y); } public static EncryptionLong operator +(long x, EncryptionLong y) { return (EncryptionLong)(x + y.Value); } public static EncryptionLong operator +(EncryptionLong x, long y) { return (EncryptionLong)(x.Value + y); } public static EncryptionLong operator +(EncryptionLong x, EncryptionLong y) { return (EncryptionLong)(x.Value + y.Value); } public static string operator +(EncryptionLong x, string y) { return (x.Value + y); } public static string operator +(string x, EncryptionLong y) { return (x + y.Value); } public static EncryptionLong operator -(int x, EncryptionLong y) { return (EncryptionLong)(x - y.Value); } public static EncryptionLong operator -(EncryptionLong x, int y) { return (EncryptionLong)(x.Value - y); } public static EncryptionLong operator -(long x, EncryptionLong y) { return (EncryptionLong)(x - y.Value); } public static EncryptionLong operator -(EncryptionLong x, long y) { return (EncryptionLong)(x.Value - y); } public static EncryptionLong operator -(EncryptionLong x, EncryptionLong y) { return (EncryptionLong)(x.Value - y.Value); } // public static long operator -(int x, EncryptionLong y) // { // return x - y.Value; // } // // public static long operator -(EncryptionLong x, int y) // { // return x.Value - y; // } // public static long operator -(long x, EncryptionLong y) // { // return x - y.Value; // } // // public static long operator -(EncryptionLong x, long y) // { // return x.Value - y; // } public string ToString(string format, IFormatProvider formatProvider) { return Value.ToString(); } } }