コード例 #1
0
ファイル: DataTranslate.cs プロジェクト: zxsean/puerts
        private GeneralGetter MakeTranslateFunc(Type type)
        {
            GeneralGetter fixTypeGetter = (IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef) =>
            {
                if (getValueApi.GetJsValueType(isolate, value, isByRef) == JsValueType.NativeObject)
                {
                    var objPtr = getValueApi.GetObject(isolate, value, isByRef);
                    var obj    = objectPool.Get(objPtr.ToInt32());
                    return((obj != null && type.IsAssignableFrom(obj.GetType())) ? obj : null);
                }
                return(null);
            };

            if (typeof(Delegate).IsAssignableFrom(type))
            {
                return((IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef) =>
                {
                    var jsValueType = getValueApi.GetJsValueType(isolate, value, isByRef);
                    if (jsValueType == JsValueType.Function)
                    {
                        var nativePtr = getValueApi.GetFunction(isolate, value, isByRef);
                        var result = genericDelegateFactory.Create(type, nativePtr);
                        if (result == null)
                        {
                            throw new Exception("can not find delegate bridge for " + type.GetFriendlyName());
                        }
                        return result;
                    }
                    else
                    {
                        return fixTypeGetter(isolate, getValueApi, value, isByRef);
                    }
                });
            }

            return(fixTypeGetter);
        }