Exemplo n.º 1
0
        public void LoadServices()
        {
            var encodeNames = PluginServiceProvider.GetServiceNamesByType("Encode");

            foreach (var name in encodeNames)
            {
                var item = new ListItem
                {
                    Text = name,
                    Tag  = PluginServiceProvider.GetService(name)
                };
                _encodeItem.Add(item);
            }

            var convertName = PluginServiceProvider.GetServiceNamesByType("Decode");

            foreach (var name in convertName)
            {
                var item = new ListItem
                {
                    Text = name,
                    Tag  = PluginServiceProvider.GetService(name)
                };
                _decodeItem.Add(item);
            }
        }
Exemplo n.º 2
0
        public void LoadServices()
        {
            var names = PluginServiceProvider.GetServiceNames();

            foreach (var name in names)
            {
                var item = new ListItem
                {
                    Text = name,
                    Tag  = PluginServiceProvider.GetServiceStore(name)
                };
                _comboBoxServices.Items.Add(item);
            }
        }
Exemplo n.º 3
0
        public static void RegisterService(IPlugin plugin)
        {
            PluginServiceProvider.RegisterService(plugin, "FromBase64", "Decode", Base64_Decode);
            PluginServiceProvider.RegisterService(plugin, "FromUrlEncode", "Decode", FromUrlEncode);
            PluginServiceProvider.RegisterService(plugin, "FromHex", "Decode", FromHex);

            PluginServiceProvider.RegisterService(plugin, "ToBase64", "Encode", Base64_Encode);
            PluginServiceProvider.RegisterService(plugin, "ToMd5_16", "Encode", ToMd5_16);
            PluginServiceProvider.RegisterService(plugin, "ToMd5_32", "Encode", ToMd5_32);
            PluginServiceProvider.RegisterService(plugin, "ToSha1", "Encode", ToSha1);
            PluginServiceProvider.RegisterService(plugin, "ToUrlEncode", "Encode", ToUrlEncode);
            PluginServiceProvider.RegisterService(plugin, "ToUrlEncodeAll", "Encode", ToUrlEncodeAll);
            PluginServiceProvider.RegisterService(plugin, "ToHex", "Encode", ToHex);
        }
Exemplo n.º 4
0
        private void LoadServicesInUi()
        {
            var serviceNames = PluginServiceProvider.GetServiceNames().ToList();

            if (serviceNames.Any())
            {
                foreach (var name in serviceNames)
                {
                    var serviceType = PluginServiceProvider.GetServiceTypeName(name);
                    var provider    = PluginServiceProvider.GetServiceProvider(name);
                    var text        = string.Format(
                        "[Provider:{0}] [Type:{1}] {2}",
                        provider != null ? provider.PluginInfo.Name : "",
                        serviceType,
                        name);
                    _servicesMenuItem.Items.Add(new ButtonMenuItem {
                        Text = text
                    });
                }
            }
        }
Exemplo n.º 5
0
        void Init()
        {
            var label1 = new Label
            {
                Text = "Welcome to",
                Font = new Font(FontFamilies.Monospace, 30)
            };
            var labelTitle = new Label
            {
                Text = "Altman3",
                Font = new Font(FontFamilies.Monospace, 60)
            };

            var layout = new PixelLayout();

            layout.Add(label1, new Point(70, 50));
            layout.Add(labelTitle, new Point(100, 120));

            var logo = PluginServiceProvider.GetService("ToFingerBinary");

            if (logo != null)
            {
                var rnd = new Random();
                var par = new PluginParameter();
                par.AddParameter("str", rnd.Next(1, 1023));
                var ret = logo(par);
                var tmp = new Label
                {
                    Text = ret,
                    Font = new Font(FontFamilies.Monospace, 10)
                };
                layout.Add(tmp, new Point(300, 220));
            }

            Content = layout;
        }
Exemplo n.º 6
0
        private PluginResponseMessage RegisterPlugin(
            PluginMessage message,
            IAssemblyLoadContext assemblyLoadContext)
        {
            var registerData = message.Data.ToObject <PluginRegisterData>();
            var response     = new RegisterPluginResponseMessage
            {
                MessageName = RegisterPluginMessageName
            };

            var     pluginId = message.PluginId;
            var     registerDataTypeCacheKey = registerData.GetFullTypeCacheKey();
            IPlugin plugin;
            Type    pluginType;

            if (!_pluginTypeCache.TryGetValue(registerDataTypeCacheKey, out pluginType))
            {
                try
                {
                    Assembly assembly;
                    if (!_assemblyCache.TryGetValue(registerData.AssemblyName, out assembly))
                    {
                        assembly = assemblyLoadContext.Load(registerData.AssemblyName);
                    }

                    pluginType = assembly.GetType(registerData.TypeName);
                }
                catch (Exception exception)
                {
                    response.Error = exception.Message;

                    return(response);
                }
            }

            if (pluginType == null)
            {
                response.Error = Resources.FormatPlugin_TypeCouldNotBeLocatedInAssembly(
                    pluginId,
                    registerData.TypeName,
                    registerData.AssemblyName);

                return(response);
            }
            else
            {
                // We build out a custom plugin service provider to add a PluginMessageBroker and
                // IAssemblyLoadContext to the potential services that can be used to construct an IPlugin.
                var pluginServiceProvider = new PluginServiceProvider(
                    _hostServices,
                    messageBroker: new PluginMessageBroker(pluginId, _sendMessageMethod));

                plugin = ActivatorUtilities.CreateInstance(pluginServiceProvider, pluginType) as IPlugin;

                if (plugin == null)
                {
                    response.Error = Resources.FormatPlugin_CannotProcessMessageInvalidPluginType(
                        pluginId,
                        pluginType.FullName,
                        typeof(IPlugin).FullName);

                    return(response);
                }
            }

            Debug.Assert(plugin != null);

            int resolvedProtocol;

            if (!registerData.Protocol.HasValue)
            {
                // Protocol wasn't provided, use the plugin's protocol.
                resolvedProtocol = plugin.Protocol;
            }
            else
            {
                // Client and plugin protocols are max values; meaning support is <= value. The goal in this method is
                // to return the maximum protocol supported by both parties (client and plugin).
                resolvedProtocol = Math.Min(registerData.Protocol.Value, plugin.Protocol);

                // Update the plugins protocol to be the resolved protocol.
                plugin.Protocol = resolvedProtocol;
            }

            _registeredPlugins[pluginId] = plugin;

            response.Protocol = resolvedProtocol;

            return(response);
        }
Exemplo n.º 7
0
        private PluginResponseMessage RegisterPlugin(
            PluginMessage message,
            IAssemblyLoadContext assemblyLoadContext)
        {
            var registerData = message.Data.ToObject<PluginRegisterData>();
            var response = new RegisterPluginResponseMessage
            {
                MessageName = RegisterPluginMessageName
            };

            var pluginId = message.PluginId;
            var registerDataTypeCacheKey = registerData.GetFullTypeCacheKey();
            IPlugin plugin;
            Type pluginType;

            if (!_pluginTypeCache.TryGetValue(registerDataTypeCacheKey, out pluginType))
            {
                try
                {
                    Assembly assembly;
                    if (!_assemblyCache.TryGetValue(registerData.AssemblyName, out assembly))
                    {
                        assembly = assemblyLoadContext.Load(registerData.AssemblyName);
                    }

                    pluginType = assembly.GetType(registerData.TypeName);
                }
                catch (Exception exception)
                {
                    response.Error = exception.Message;

                    return response;
                }
            }

            if (pluginType == null)
            {
                response.Error = Resources.FormatPlugin_TypeCouldNotBeLocatedInAssembly(
                    pluginId,
                    registerData.TypeName,
                    registerData.AssemblyName);

                return response;
            }
            else
            {
                // We build out a custom plugin service provider to add a PluginMessageBroker and
                // IAssemblyLoadContext to the potential services that can be used to construct an IPlugin.
                var pluginServiceProvider = new PluginServiceProvider(
                    _hostServices,
                    messageBroker: new PluginMessageBroker(pluginId, _sendMessageMethod));

                plugin = ActivatorUtilities.CreateInstance(pluginServiceProvider, pluginType) as IPlugin;

                if (plugin == null)
                {
                    response.Error = Resources.FormatPlugin_CannotProcessMessageInvalidPluginType(
                        pluginId,
                        pluginType.FullName,
                        typeof(IPlugin).FullName);

                    return response;
                }
            }

            Debug.Assert(plugin != null);

            int resolvedProtocol;

            if (!registerData.Protocol.HasValue)
            {
                // Protocol wasn't provided, use the plugin's protocol.
                resolvedProtocol = plugin.Protocol;
            }
            else
            {
                // Client and plugin protocols are max values; meaning support is <= value. The goal in this method is
                // to return the maximum protocol supported by both parties (client and plugin).
                resolvedProtocol = Math.Min(registerData.Protocol.Value, plugin.Protocol);

                // Update the plugins protocol to be the resolved protocol.
                plugin.Protocol = resolvedProtocol;
            }

            _registeredPlugins[pluginId] = plugin;

            response.Protocol = resolvedProtocol;

            return response;
        }
Exemplo n.º 8
0
        private PluginResponseMessage RegisterPlugin(
            PluginMessage message,
            IAssemblyLoadContext assemblyLoadContext)
        {
            var registerData = message.Data.ToObject<PluginRegisterData>();
            var response = new PluginResponseMessage
            {
                MessageName = RegisterPluginMessageName
            };

            var pluginId = message.PluginId;
            var registerDataTypeCacheKey = registerData.GetFullTypeCacheKey();
            IPlugin plugin;
            Type pluginType;

            if (!_pluginTypeCache.TryGetValue(registerDataTypeCacheKey, out pluginType))
            {
                try
                {
                    Assembly assembly;
                    if (!_assemblyCache.TryGetValue(registerData.AssemblyName, out assembly))
                    {
                        assembly = assemblyLoadContext.Load(registerData.AssemblyName);
                    }

                    pluginType = assembly.GetType(registerData.TypeName);
                }
                catch (Exception exception)
                {
                    response.Error = exception.Message;

                    return response;
                }
            }

            if (pluginType == null)
            {
                response.Error = Resources.FormatPlugin_TypeCouldNotBeLocatedInAssembly(
                    pluginId,
                    registerData.TypeName,
                    registerData.AssemblyName);

                return response;
            }
            else
            {
                // We build out a custom plugin service provider to add a PluginMessageBroker and
                // IAssemblyLoadContext to the potential services that can be used to construct an IPlugin.
                var pluginServiceProvider = new PluginServiceProvider(
                    _hostServices,
                    messageBroker: new PluginMessageBroker(pluginId, _sendMessageMethod));

                plugin = ActivatorUtilities.CreateInstance(pluginServiceProvider, pluginType) as IPlugin;

                if (plugin == null)
                {
                    response.Error = Resources.FormatPlugin_CannotProcessMessageInvalidPluginType(
                        pluginId,
                        pluginType.FullName,
                        typeof(IPlugin).FullName);

                    return response;
                }
            }

            Debug.Assert(plugin != null);

            _registeredPlugins[pluginId] = plugin;

            response.Success = true;

            return response;
        }
Exemplo n.º 9
0
        private PluginResponseMessage RegisterPlugin(
            PluginMessage message,
            IAssemblyLoadContext assemblyLoadContext)
        {
            var registerData = message.Data.ToObject <PluginRegisterData>();
            var response     = new PluginResponseMessage
            {
                MessageName = RegisterPluginMessageName
            };

            var     pluginId = message.PluginId;
            var     registerDataTypeCacheKey = registerData.GetFullTypeCacheKey();
            IPlugin plugin;
            Type    pluginType;

            if (!_pluginTypeCache.TryGetValue(registerDataTypeCacheKey, out pluginType))
            {
                try
                {
                    Assembly assembly;
                    if (!_assemblyCache.TryGetValue(registerData.AssemblyName, out assembly))
                    {
                        assembly = assemblyLoadContext.Load(registerData.AssemblyName);
                    }

                    pluginType = assembly.GetType(registerData.TypeName);
                }
                catch (Exception exception)
                {
                    response.Error = exception.Message;

                    return(response);
                }
            }

            if (pluginType == null)
            {
                response.Error = Resources.FormatPlugin_TypeCouldNotBeLocatedInAssembly(
                    pluginId,
                    registerData.TypeName,
                    registerData.AssemblyName);

                return(response);
            }
            else
            {
                // We build out a custom plugin service provider to add a PluginMessageBroker and
                // IAssemblyLoadContext to the potential services that can be used to construct an IPlugin.
                var pluginServiceProvider = new PluginServiceProvider(
                    _hostServices,
                    messageBroker: new PluginMessageBroker(pluginId, _sendMessageMethod));

                plugin = ActivatorUtilities.CreateInstance(pluginServiceProvider, pluginType) as IPlugin;

                if (plugin == null)
                {
                    response.Error = Resources.FormatPlugin_CannotProcessMessageInvalidPluginType(
                        pluginId,
                        pluginType.FullName,
                        typeof(IPlugin).FullName);

                    return(response);
                }
            }

            Debug.Assert(plugin != null);

            _registeredPlugins[pluginId] = plugin;

            response.Success = true;

            return(response);
        }