Example #1
0
        /// <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);
        }
Example #3
0
        /// <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);
            }
Example #5
0
            /// <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);
        }
Example #7
0
                /// <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);
                }
Example #8
0
                /// <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);
                }
Example #9
0
                /// <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);
                }