示例#1
0
/*************** MAIN *********************/
int main (int argc, char *argv[])
{
    QApplication q_app (argc, argv);
    PacmanVision pacv_app;

    QObject::connect(&q_app, SIGNAL( aboutToQuit() ), &pacv_app, SLOT( onShutdown()));
    if (pacv_app.init(argc, argv))
        return q_app.exec();
    else
        return 1;
}
示例#2
0
文件: main.cpp 项目: thortiede/unipax
int main(int argC, char** argV)
{
	QCoreApplication q_app(argC, argV);

	UniPAX::SERVER::RESTServer server;

	QDir pluginsDir = QDir(qApp->applicationDirPath());
	pluginsDir.cdUp();
	pluginsDir.cd("plugins");
	server.addPluginsDirectory(pluginsDir.absolutePath().toStdString());

	server.loadPlugins();

	std::string help, service_name;

	std::string unipax_arg;
	std::string unipax_pw;

	int port = 8888;
	std::string interface = std::string("*");

	boost::program_options::options_description general("General options");
	general.add_options()
			("help", "produce this help messages")
			("help-plugin", boost::program_options::value< std::string >(&help), "produces help for given plugin name")
			("help-plugins", "produces help for all plugins")
			("port,P", boost::program_options::value< int >(&port)->default_value(8888), "port of the REST server")
			("interface,I", boost::program_options::value< std::string >(&interface), "ip address of the REST server")
			("rebuild-query-index", "Rebuild query engine index")
			("disable-caching,d", "disables caching of loaded objects")
			("password", boost::program_options::value< std::string >(&unipax_pw), "Password for UniPAX database connection")
#ifdef ODB_MYSQL
			("unipax,u", boost::program_options::value< std::string >(&unipax_arg), "UniPAX database connection in format: username@hostname[:port]/dbname")
#elif defined ODB_ORACLE
			("unipax,u", boost::program_options::value< std::string >(&unipax_arg), "UniPAX database connection in format: username@hostname[:port]/sid")
			("db-service-name,s", boost::program_options::value< std::string >(&service_name)->default_value(""), "Service name of the UniPAX database, if different from SID")
#endif
		;

	boost::program_options::positional_options_description general_pod;
	general_pod.add("unipax", 1);
	general_pod.add("port", 2);

	boost::program_options::options_description all("Allowed options");

	all.add(general);

	for (std::vector<UniPAX::SERVER::RESTServerHandler*>::const_iterator it = server.getPlugins().begin(); it != server.getPlugins().end(); ++it)
	{
		all.add((*it)->options());
	}

	boost::program_options::variables_map vm;
	boost::program_options::store(boost::program_options::command_line_parser(argC, argV).options(all).positional(general_pod).run(), vm);
	boost::program_options::notify(vm);

	if (vm.count("help-plugins"))
	{
		std::cout << all << std::endl;
		return 0;
	}

	if (vm.count("help-plugin"))
	{

		for (std::vector<UniPAX::SERVER::RESTServerHandler*>::const_iterator it = server.getPlugins().begin(); it != server.getPlugins().end(); ++it)
		{
			if ((*it)->name() == QString::fromStdString(help))
			{
				std::cout << (*it)->options() << std::endl;
				return 0;
			}
		}

		std::cout << "Unknown plugin " << help << std::endl;
		return 0;
	}

	if (vm.count("help") || !vm.count("unipax") || !vm.count("port"))
	{
		std::cout << general << std::endl;
		return 0;
	}

	std::string unipax_host;
	std::string unipax_user;
	std::string unipax_database;

#ifdef ODB_MYSQL
	int unipax_port = 3306;
#elif defined ODB_ORACLE
	int unipax_port = 1521;
#endif

	std::size_t pos = 0;
	if ( (pos = unipax_arg.find_first_of('@')) != unipax_arg.npos)
	{
		unipax_user = unipax_arg.substr(0, pos);
		unipax_arg = unipax_arg.substr(pos + 1);
	} else
	{
		std::cerr << "UniPAX username not found" << std::endl;
		return -1;
	}

	if ( (pos = unipax_arg.find_first_of(':')) != unipax_arg.npos)
	{
		unipax_host = unipax_arg.substr(0, pos);
		unipax_arg = unipax_arg.substr(pos + 1);

		if ( (pos = unipax_arg.find_first_of('/')) != unipax_arg.npos)
		{
			std::stringstream ss;
			ss << unipax_arg.substr(0, pos);
			ss >> unipax_port;
			unipax_arg = unipax_arg.substr(pos + 1);
		} else