示例#1
0
        public void PublishEvent(string name, object data)
        {
            // Get all plugins with event handlers for the current event
            // or for <all> events.
            var handlers = _pluginEngine.GetAll()
                           .Where(p => p.State == PluginState.Loaded)
                           .Select(p => p.Package.GetManifest())
                           .SelectMany(
                m => m.EventHandlers.Where(e => e.Name == name || e.Name == All))
                           .ToList();

            _logger.Debug("Publishing event {EventName} to {Count} handlers.", name, handlers.Count());

            foreach (var handler in handlers)
            {
                // These are the handlers for our event
                try
                {
                    _logger.Debug("Calling {Target} for event {EventName}.", handler.Target, name);

                    if (handler.Name == All)
                    {
                        _rpcClient.Call(handler.Target, new[] { name, data });
                    }
                    else
                    {
                        _rpcClient.Call(handler.Target, new[] { data });
                    }
                }
                catch (Exception e)
                {
                    _logger.Error(e, "Error when calling event handler {EventHandler}", handler);
                }
            }
        }
示例#2
0
        public PluginsModule(IPluginEngine pluginEngine, IJsonRpcClient rpcClient)
            : base("plugins")
        {
            Get["/{id}/{path*}"] = _ =>
            {
                string id   = _.id;
                string path = _.path;

                var plugin = pluginEngine.Get(id);
                if (plugin == null)
                {
                    return(404);
                }

                var data = rpcClient.Call <byte[]>(string.Format("{0}.resource.get", id), new[] { path });
                if (data == null)
                {
                    return(404);
                }

                var contentType = MimeTypes.GetMimeType(path);
                return(Response.FromStream(() => new MemoryStream(data), contentType));
            };
        }
示例#3
0
        public PluginsModule(IPluginEngine pluginEngine, IJsonRpcClient rpcClient)
            : base("plugins")
        {
            Get["/{id}/{path*}"] = _ =>
            {
                string id = _.id;
                string path = _.path;

                var plugin = pluginEngine.Get(id);
                if (plugin == null)
                {
                    return 404;
                }

                var data = rpcClient.Call<byte[]>(string.Format("{0}.resource.get", id), new[] {path});
                if (data == null)
                {
                    return 404;
                }

                var contentType = MimeTypes.GetMimeType(path);
                return Response.FromStream(() => new MemoryStream(data), contentType);
            };
        }
示例#4
0
 public virtual Task <byte[]> Call(CallParams callParams, DefaultBlockParameter blockParameter)
 {
     return(_proxyClient.Call(callParams, blockParameter));
 }