/// <summary> /// Loads a native with the specified name. /// </summary> /// <param name="name">The name.</param> /// <param name="sizes">The references to the parameter which contains the size of array parameters.</param> /// <param name="parameterTypes">The parameter types.</param> /// <returns> /// The loaded native. /// </returns> public INative Load(string name, int[] sizes, Type[] parameterTypes) { try { if (parameterTypes == null || parameterTypes.Length == 0) { var handle = Interop.LoadNative(name, string.Empty, null); var native = new DefaultNative(name, handle, parameterTypes); _handles[handle] = native; return(native); } else { // Compute the parameter format string. string format; var lengthIndices = ComputeFormatString(parameterTypes, out format); var handle = Interop.LoadNative(name, format, (sizes?.Length ?? 0) == 0 ? lengthIndices : sizes); var native = new DefaultNative(name, handle, parameterTypes); _handles[handle] = native; return(native); } } catch (Exception e) { FrameworkLog.WriteLine(FrameworkMessageLevel.Debug, "Native load failure ({0})", name); return(null); } }
/// <summary> /// Registers the specified command. /// </summary> /// <param name="command">The command.</param> public virtual void Register(ICommand command) { if (command == null) { throw new ArgumentNullException(nameof(command)); } FrameworkLog.WriteLine(FrameworkMessageLevel.Debug, $"Registering command {command}"); _commands.Add(command); }
/// <summary> /// Invokes the native with the specified arguments. /// </summary> /// <param name="arguments">The arguments.</param> /// <returns>The return value of the native.</returns> public int Invoke(params object[] arguments) { if (Sync.IsRequired) { FrameworkLog.WriteLine(FrameworkMessageLevel.Debug, $"Call to native handle {this} is being synchronized."); return(Sync.RunSync(() => CastArgsAndInvoke(arguments))); } return(CastArgsAndInvoke(arguments)); }
/// <summary> /// 增加状态 /// </summary> /// <typeparam name="IS"></typeparam> /// <returns></returns> public IS AddState <IS>() where IS : class, IState <T>, new() { if (HasState <IS>() == true) { FrameworkLog.ErrorFormat("状态已存在,添加状态失败. State:{0}", typeof(IS).Name); } IS state = new IS(); this._stateDic.Add(typeof(IS).Name, state); return(state); }
/// <summary> /// 创建对象池合集 /// </summary> /// <param name="referenceType"></param> /// <returns></returns> private static bool CreateReferenceCollection(Type referenceType) { ReferenceCollection referenceCollection = null; if (_referenceCollections.TryGetValue(referenceType, out referenceCollection) == true) { FrameworkLog.ErrorFormat("对象池已存在. referenceType:" + referenceType); return(false); } referenceCollection = new ReferenceCollection(referenceType.Name); _referenceCollections.Add(referenceType, referenceCollection); return(true); }
/// <summary> /// Adds a <see cref="IController" /> to this collection and remove controllers it overrides. /// </summary> /// <param name="controller">The <see cref="IController" /> to add to this collection.</param> public void Override(IController controller) { var overrides = this.Where(c => c.GetType().IsInstanceOfType(controller)).ToArray(); if (overrides.Any()) { FrameworkLog.WriteLine(FrameworkMessageLevel.Debug, $"{controller} overrides {string.Join(", ", (object[]) overrides)}"); } foreach (var c in overrides) { Remove(c); } _controllers.Add(controller); }
/// <summary> /// 异或解密 /// </summary> /// <param name="content"></param> /// <param name="password"></param> /// <returns></returns> public static byte[] XORDecrypt(byte[] encryptedBytes, string password) { var sourceContent = string.Empty; if (string.IsNullOrEmpty(password)) { FrameworkLog.Error("传入密码为空,无法解密"); return(encryptedBytes); } var passwordArray = Encoding.Default.GetBytes(password); var passwordLength = passwordArray.Length; for (var i = 0; i < encryptedBytes.Length; i++) { var p = passwordArray[i % passwordLength]; encryptedBytes[i] = (byte)(encryptedBytes[i] ^ p); } return(encryptedBytes); }
/// <summary> /// 错误处理 /// </summary> /// <param name="pUWR"></param> /// <returns></returns> private static FrameworkStateCode ErrorHandle(UnityWebRequest pUWR) { var code = FrameworkStateCode.Succeed; if (pUWR.isNetworkError || pUWR.isHttpError) { FrameworkLog.Error( $"HttpGet网络错误\nErrorMsg:{pUWR.error} Type:{pUWR} isNetworkError:{pUWR.isNetworkError} isHttpError:{pUWR.isHttpError}\nurl:{pUWR}"); code = FrameworkStateCode.Error; return(code); } if (!pUWR.isDone) { FrameworkLog.Error($"HttpGet访问超时\nErrorMsg:{pUWR.error} Type:{pUWR} isDone:{pUWR.isDone} \nurl:{pUWR.url}"); code = FrameworkStateCode.TimeOut; return(code); } return(code); }
/// <summary> /// 异或加密 /// </summary> /// <param name="content"></param> /// <param name="password"></param> /// <returns></returns> public static byte[] XOREncrypt(byte[] sourceByte, string password) { var encryptedContent = string.Empty; if (string.IsNullOrEmpty(password)) { FrameworkLog.Error("传入密码为空,无法加密"); return(sourceByte); } var sourceContentArray = sourceByte; var passwordArray = Encoding.Default.GetBytes(password); var passwordLength = passwordArray.Length; for (var i = 0; i < sourceContentArray.Length; i++) { var p = passwordArray[i % passwordLength]; sourceContentArray[i] = (byte)(sourceContentArray[i] ^ p); } return(sourceContentArray); }