예제 #1
0
 public MyEventArgBase(String eventName, IMyPlugin source, Int32 floorPriority = -1, Int32 ceilingPrority = 0)
 {
     EventName       = eventName;
     MyPlugin        = source;
     FloorPriority   = floorPriority;
     CeilingPriority = ceilingPrority;
 }
예제 #2
0
    static void Main(string[] args)
    {
        IMyPlugin plugin1 = CreateFromConfig <IMyPlugin>("PluginType");

        plugin1.DoSomethingPlugInIsh();
        // etc...
    }
예제 #3
0
        private void AttachPlugins(PluginList plugins, Assembly pluginAssembly)
        {
            try
            {
                List <Type> availableTypes = new List <Type>();
                availableTypes.AddRange(pluginAssembly.GetTypes());

                // Get the object that implements the IPluginForm interface
                // and PluginAttribute
                List <Type> pluginForms = availableTypes.FindAll(delegate(Type t)
                {
                    List <Type> interfaceTypes = new List <Type>(t.GetInterfaces());
                    Object[] arr = t.GetCustomAttributes(typeof(MyPluginAttribute), true);

                    return(!(arr == null || arr.Length == 0) && interfaceTypes.Contains(typeof(IMyPlugin)));
                });

                foreach (Type pluginForm in pluginForms)
                {
                    if (typeof(IMyPlugin).IsAssignableFrom(pluginForm))
                    {
                        try
                        {
                            IMyPlugin gsaPlugin = Activator.CreateInstance(pluginForm) as IMyPlugin;
                            if (gsaPlugin != null)
                            {
                                plugins.Add(gsaPlugin);
                            }
                        }
                        catch (MyAppAccessDeniedException ex)
                        {
                            Logger.Instance.WriteLog(ex);
                            // user does not permission to load this
                        }
                        catch (Exception ex)
                        {
                            MyAppAccessDeniedException accessDeniedException = ex.InnerException as MyAppAccessDeniedException;
                            // suppress MyAppAccessDeniedException
                            if (accessDeniedException == null)
                            {
#if DEBUG
                                MessageBox.Show(ex.StackTrace, ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
#endif
                                Logger.Instance.WriteLog(accessDeniedException);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Instance.WriteLog(ex.Message);
            }
        }
예제 #4
0
        public void ActivatePlugins()
        {
            if (_plugins == null)
            {
                RefreshPluginStore();
            }

            foreach (AddInToken addinToken in _plugins)
            {
                try
                {
                    // Activate the add-in
                    IMyPlugin addinInstance = addinToken.Activate <IMyPlugin>(AddInSecurityLevel.FullTrust);
                    addinInstance.Initialize(this);

                    //var d = addinToken.QualificationData[AddInSegmentType.AddIn];
                    // Use the add-in
                    Console.WriteLine($"Add-in {addinToken.Name} Version {addinToken.Version}");
                    Console.WriteLine($"---------------------");

                    Console.WriteLine($"Plugin name: {addinInstance.Name}");
                    Console.WriteLine($"Plugin description: {addinInstance.Description}");
                    Console.WriteLine($"---------------------");
                    Console.WriteLine();


                    Console.WriteLine("Executing Operate: ");
                    Console.WriteLine("Operate(10, 20) = " + addinInstance.Operate(10, 20));
                    Console.WriteLine();

                    Console.WriteLine("Executing SimpleMethod(): ");
                    addinInstance.SimpleMethod();
                    Console.WriteLine();
                    Console.WriteLine("Executing SimpleMethod(\"This is some message from host\"): ");
                    addinInstance.SimpleMethod("This is some message from host");
                    Console.WriteLine();
                    Console.WriteLine("Executing: SimpleMethod(\"Host message1\", \"Host message2\")");
                    Console.WriteLine(addinInstance.SimpleMethod("Host message1", "Host message2"));

                    Console.WriteLine("----------------------------------------------------");
                    Console.WriteLine("''''''''''''''''''''''''''''''''''''''''''''''''''''");
                    Console.WriteLine("Shutting it down.....: ->");
                    AddInController.GetAddInController(addinInstance).Shutdown();
                    Console.WriteLine("Shut down.....: ->");
                }
                catch (TargetInvocationException ex)
                {
                    Console.WriteLine(ex.InnerException);
                }
            }
        }
예제 #5
0
        public void AddSubscriber(String eventName, IMyPlugin plugin)
        {
            lock (s_subscriberLock)
            {
                PluginList pluginList;
                if (!m_Subscribers.TryGetValue(eventName, out pluginList))
                {
                    pluginList = new PluginList();
                    m_Subscribers.Add(eventName, pluginList);
                }

                pluginList.Add(plugin);
            }
        }
예제 #6
0
        public Boolean RemoveSubscriber(String eventName, IMyPlugin plugin)
        {
            Boolean removedSubscriber = false;

            lock (s_subscriberLock)
            {
                PluginList pluginList;
                if (!m_Subscribers.TryGetValue(eventName, out pluginList))
                {
                    throw new Exception(String.Format("{0} is not found!", eventName));
                }

                removedSubscriber = pluginList.Remove(plugin);
            }

            return(removedSubscriber);
        }
예제 #7
0
        // Attach module form to main application panel and
        //  add a menu item dynamically
        private void PrepareAndAttachForm(Form moduleChildForm)
        {
            moduleChildForm.AutoScroll      = true;
            moduleChildForm.AutoSize        = false;
            moduleChildForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            moduleChildForm.MinimizeBox     = false;
            moduleChildForm.ShowIcon        = false;
            moduleChildForm.ShowInTaskbar   = false;
            moduleChildForm.SizeGripStyle   = System.Windows.Forms.SizeGripStyle.Hide;
            moduleChildForm.Dock            = DockStyle.Fill;
            moduleChildForm.TopLevel        = false;
            moduleChildForm.Parent          = this;
            moduleChildForm.Visible         = true;

            this.splitContainer.Panel2.Controls.Add(moduleChildForm);

            // By default add the module form to receive shutdown event
            IMyPlugin plugin = moduleChildForm as IMyPlugin;

            if (plugin != null)
            {
                EventPublisher.Instance.AddSubscriber(Utility.GlobalConstants.APP_SHUTDOWN, plugin);
            }
        }
 public MyPluginViewToContractAdapter(IMyPlugin view)
 {
     _view = view;
 }
예제 #9
0
 public MyEventArg(String eventName, T value, IMyPlugin source = null, Int32 floorPriority = -1, Int32 ceilingPrority = 0) :
     base(eventName, source, floorPriority, ceilingPrority)
 {
     Value = value;
 }