Ejemplo n.º 1
0
ServerFunctionBase *ServerConnection::findFunction(color_ostream &out, const std::string &plugin, const std::string &name)
{
    RPCService *svc;

    if (plugin.empty())
        svc = core_service;
    else
    {
        svc = plugin_services[plugin];

        if (!svc)
        {
            Plugin *plug = Core::getInstance().plug_mgr->getPluginByName(plugin);
            if (!plug)
            {
                out.printerr("No such plugin: %s\n", plugin.c_str());
                return NULL;
            }

            svc = plug->rpc_connect(out);
            if (!svc)
            {
                out.printerr("Plugin %s doesn't export any RPC methods.\n", plugin.c_str());
                return NULL;
            }

            svc->finalize(this, &functions);
            plugin_services[plugin] = svc;
        }
    }

    return svc->getFunction(name);
}