Пример #1
0
        /// <summary>
        /// Removes all linkage from the OMNI Framework for the passed in Assembly.
        /// </summary>
        /// <param name="iResult"></param>
        internal void DeIndexClass(IndexingResult iResult)
        {
            if (iResult == null)
                return;
            lock (tick)
                {
                foreach (string c in iResult.ClassesFound)
                    {
                    for (int i = 0; i < SimDictSize; i++)
                        {
                        if (_msimdict[i] == null)
                            continue;
                        if (_msimdict[i].GetType().FullName.ToLower() != c)
                            continue;

                        self.Error(">>csFactory::INFO: Deleting Proxy Object for class '" + _msimdict[i].GetType().FullName.ToLower() + "'. ID: " + _msimdict[i].GetID() + " Name: " + _msimdict[i].getName());
                        _msimdict[i].delete();
                        _msimdict[i] = null;
                        }
                    MObjectCreateDefs.Remove(c);
                    MCustomClassDef.Remove(c);
                    }
                foreach (string g in iResult.GlobalFunctsFound)
                    _mGlobalFuncts.Remove(g);
                }
        }
Пример #2
0
        /// <summary>
        /// This function reads the passed in Assembly and parses all of the Omni Decorations out and makes them available in the engine.
        /// Used mainly for internal purposes.
        /// </summary>
        /// <param name="mAssembly"></param>
        /// <returns></returns>
        internal IndexingResult IndexAssembly(Assembly mAssembly)
        {
            IndexingResult iResult = new IndexingResult();
            List<Type> classlist = mAssembly.GetTypes().ToList();
            classlist.Sort((x, y) => String.CompareOrdinal(x.FullName, y.FullName));
            List<CustomClassFunctDef> staticfunctions = new List<CustomClassFunctDef>();

            foreach (Type c in classlist)
                {
                if (c.FullName != null && c.FullName.StartsWith(_mNameSpace + ".Models.User"))
                    {
                    CustomClassDef ccd = new CustomClassDef {mType = c, mClassName = c.FullName.ToLower(), mCtor = c.GetConstructor(new Type[] {})};

                    #region Constructor check

#if DEBUG
                    ConstructorInfo ci;

                    try
                        {
                        ci = c.GetConstructor(new Type[] {});
                        }
                    catch (Exception)
                        {
                        throw new Exception("Class " + c.FullName + " does not have a empty constructor.");
                        }
                    ccd.mCtor = ci;
#endif

                    #endregion

                    List<MethodInfo> miList = c.GetMethods(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance).ToList();
                    miList.Sort((x, y) => String.CompareOrdinal(x.Name, y.Name));
                    foreach (MethodInfo mi in miList)
                        {
                        #region Process MethodInfo

                        if (mi.IsStatic && !mi.IsSpecialName && isExposedFunction(mi))
                            {
                            if (getAlias(mi) != "")
                                {
                                CustomClassFunctDef ccfd = new CustomClassFunctDef {mFunctName = getAlias(mi).ToLower(), mFunctPtr = mi};
                                staticfunctions.Add(ccfd);
                                }
                            else
                                {
                                CustomClassFunctDef ccfd = new CustomClassFunctDef {mFunctName = mi.Name.ToLower(), mFunctPtr = mi};
                                staticfunctions.Add(ccfd);
                                }
                            }
                        else if (!mi.IsSpecialName && isExposedFunction(mi))
                            {
                            if ((mi.GetBaseDefinition().DeclaringType != mi.DeclaringType) || (mi.GetBaseDefinition().DeclaringType.Namespace.StartsWith(_mNameSpace + ".Models.User")))
                                {
                                if (getAlias(mi) != "")
                                    {
                                    CustomClassFunctDef ccfd = new CustomClassFunctDef {mFunctName = getAlias(mi).ToLower(), mFunctPtr = mi};
                                    ccd.mFuncts.Add(getAlias(mi), ccfd);
                                    }
                                else
                                    {
                                    CustomClassFunctDef ccfd = new CustomClassFunctDef {mFunctName = mi.Name.ToLower(), mFunctPtr = mi};
                                    ccd.mFuncts.Add(ccfd.mFunctName, ccfd);
                                    }
                                }
                            }
                        else if (!mi.IsSpecialName && isExposedSystemFunction(mi))
                            {
                            if (!ccd.Allowedcallbacks.Contains(mi.Name.ToLower()))
                                ccd.Allowedcallbacks.Add(mi.Name.ToLower());
                            }

                        #endregion
                        }

                    //Don't add any empty classes to the dictionary.
                    if (!ccd.mFuncts.Any() && !ccd.Allowedcallbacks.Any())
                        continue;
                    MCustomClassDef.Add(ccd.mClassName, ccd);
                    iResult.ClassesFound.Add(ccd.mClassName);
                    }
#if DEBUG
                else if (!c.FullName.StartsWith(_mNameSpace + ".Models.Base"))
                    Console.WriteLine("!!!WARNING!!!!  Skipping C# Type : '" + c.FullName + "'.");
#endif
                }

            //});
            //We are going to sort them to improve performance.
            staticfunctions.Sort((x, y) => String.CompareOrdinal(x.mFunctName, y.mFunctName));
            foreach (CustomClassFunctDef ccfd in staticfunctions)
                {
                _mGlobalFuncts.Add(ccfd.mFunctName, ccfd);
                iResult.GlobalFunctsFound.Add(ccfd.mFunctName);
                }

            return iResult;
        }