Esempio n. 1
0
        private static void RegisterCustomNodeTypes(PluginInfo pluginInfo)
        {
            Contract.Requires(pluginInfo != null);

            var customNodeTypes = pluginInfo.Interface.GetCustomNodeTypes();

            if (customNodeTypes == null)
            {
                return;
            }

            if (customNodeTypes.NodeTypes == null || customNodeTypes.Serializer == null || customNodeTypes.CodeGenerator == null)
            {
                throw new ArgumentException();                 // TODO
            }

            foreach (var nodeType in customNodeTypes.NodeTypes)
            {
                if (!nodeType.IsSubclassOf(typeof(BaseNode)))
                {
                    throw new ArgumentException($"Type '{nodeType}' is not a valid node.");
                }
            }

            pluginInfo.CustomNodeTypes = customNodeTypes;

            NodeTypesBuilder.AddPluginNodeGroup(pluginInfo.Interface, customNodeTypes.NodeTypes);

            CustomNodeSerializer.Add(customNodeTypes.Serializer);
            CppCodeGenerator.Add(customNodeTypes.CodeGenerator);
        }
Esempio n. 2
0
        private static void DeregisterCustomNodeTypes(PluginInfo pluginInfo)
        {
            Contract.Requires(pluginInfo != null);

            if (pluginInfo.CustomNodeTypes == null)
            {
                return;
            }

            NodeTypesBuilder.RemovePluginNodeGroup(pluginInfo.Interface);

            CustomNodeSerializer.Remove(pluginInfo.CustomNodeTypes.Serializer);
            CppCodeGenerator.Remove(pluginInfo.CustomNodeTypes.CodeGenerator);
        }