Files @ c4cbaf3311d0
Branch filter:

Location: libtransport.git/spectrum/src/main.cpp - annotation

HanzZ
support for remote-roster
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
6d879dece11e
e8b61aa9b6fd
e8b61aa9b6fd
d3ccb9f195c8
e8b61aa9b6fd
7e8720849725
e31c07794705
7e8720849725
7e8720849725
7e8720849725
7e8720849725
dd11e43325de
dd11e43325de
dd11e43325de
dd11e43325de
dd11e43325de
dd11e43325de
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
03d34297b5e3
e8b61aa9b6fd
e8b61aa9b6fd
7e8720849725
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
7e8720849725
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
fe3aa40faa22
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
fe3aa40faa22
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
fe3aa40faa22
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
fe3aa40faa22
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
03d34297b5e3
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
dd11e43325de
dd11e43325de
7e8720849725
7e8720849725
7e8720849725
dd11e43325de
7e8720849725
dd11e43325de
dd11e43325de
dd11e43325de
dd11e43325de
dd11e43325de
e8b61aa9b6fd
24d25a6f406b
24d25a6f406b
24d25a6f406b
24d25a6f406b
24d25a6f406b
44c526dbbbc9
e8b61aa9b6fd
bb1a8e4c36e2
bb1a8e4c36e2
7664202b38dc
bb1a8e4c36e2
bb1a8e4c36e2
5fd0a88a8006
5fd0a88a8006
3d2aa79ccbaa
5fd0a88a8006
5fd0a88a8006
7664202b38dc
7664202b38dc
7664202b38dc
5fd0a88a8006
bb1a8e4c36e2
bb1a8e4c36e2
3d2aa79ccbaa
bb1a8e4c36e2
e8b61aa9b6fd
7664202b38dc
7664202b38dc
1e8eb7076f17
e31c07794705
bb1a8e4c36e2
e31c07794705
de4e6f57c5d9
44c526dbbbc9
bb1a8e4c36e2
44c526dbbbc9
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
091411eea4d9
091411eea4d9
e31c07794705
e31c07794705
e8b61aa9b6fd
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
24d25a6f406b
e8b61aa9b6fd
#include "transport/config.h"
#include "transport/transport.h"
#include "transport/usermanager.h"
#include "transport/logger.h"
#include "transport/sqlite3backend.h"
#include "transport/mysqlbackend.h"
#include "transport/userregistration.h"
#include "transport/networkpluginserver.h"
#include "transport/admininterface.h"
#include "Swiften/EventLoop/SimpleEventLoop.h"
#ifndef WIN32
#include "sys/signal.h"
#else
#include <Windows.h>
#include <tchar.h>
#endif
#include "log4cxx/logger.h"
#include "log4cxx/patternlayout.h"
#include "log4cxx/propertyconfigurator.h"
#include "log4cxx/consoleappender.h"

using namespace log4cxx;

using namespace Transport;

Swift::SimpleEventLoop *eventLoop_ = NULL;

static void spectrum_sigint_handler(int sig) {
	eventLoop_->stop();
}

static void spectrum_sigterm_handler(int sig) {
	eventLoop_->stop();
}

int main(int argc, char **argv)
{
	Config config;
#ifndef WIN32
	if (signal(SIGINT, spectrum_sigint_handler) == SIG_ERR) {
		std::cout << "SIGINT handler can't be set\n";
		return -1;
	}

	if (signal(SIGTERM, spectrum_sigterm_handler) == SIG_ERR) {
		std::cout << "SIGTERM handler can't be set\n";
		return -1;
	}
#endif
	boost::program_options::options_description desc("Usage: spectrum [OPTIONS] <config_file.cfg>\nAllowed options");
	desc.add_options()
		("help,h", "help")
		("no-daemonize,n", "Do not run spectrum as daemon")
		;
	try
	{
		boost::program_options::variables_map vm;
		boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm);
		boost::program_options::notify(vm);
		if(vm.count("help"))
		{
			std::cout << desc << "\n";
			return 1;
		}
	}
	catch (std::runtime_error& e)
	{
		std::cout << desc << "\n";
		return 1;
	}
	catch (...)
	{
		std::cout << desc << "\n";
		return 1;
	}

	if (argc != 2) {
		std::cout << desc << "\n";
		return 1;
	}


	if (!config.load(argv[1])) {
		std::cerr << "Can't load configuration file.\n";
		return 1;
	}

	if (CONFIG_STRING(&config, "logging.config").empty()) {
		LoggerPtr root = log4cxx::Logger::getRootLogger();
#ifdef WIN32
		root->addAppender(new ConsoleAppender(new PatternLayout(L"%d %-5p %c: %m%n")));
#else
		root->addAppender(new ConsoleAppender(new PatternLayout("%d %-5p %c: %m%n")));
#endif
	}
	else {
		log4cxx::PropertyConfigurator::configure(CONFIG_STRING(&config, "logging.config"));
	}

	Swift::SimpleEventLoop eventLoop;

	Swift::BoostNetworkFactories *factories = new Swift::BoostNetworkFactories(&eventLoop);
	UserRegistry userRegistry(&config, factories);

	Component transport(&eventLoop, factories, &config, NULL, &userRegistry);
// 	Logger logger(&transport);

	StorageBackend *storageBackend = NULL;

#ifdef WITH_SQLITE
	if (CONFIG_STRING(&config, "database.type") == "sqlite3") {
		storageBackend = new SQLite3Backend(&config);
		if (!storageBackend->connect()) {
			std::cerr << "Can't connect to database.\n";
			return -1;
		}
	}
#endif
#ifdef WITH_MYSQL
	if (CONFIG_STRING(&config, "database.type") == "mysql") {
		storageBackend = new MySQLBackend(&config);
		if (!storageBackend->connect()) {
			std::cerr << "Can't connect to database.\n";
			return -1;
		}
	}
#endif

	UserManager userManager(&transport, &userRegistry, storageBackend);
	UserRegistration *userRegistration = NULL;
	if (storageBackend) {
		userRegistration = new UserRegistration(&transport, &userManager, storageBackend);
		userRegistration->start();
// 		logger.setUserRegistration(&userRegistration);
	}
// 	logger.setUserManager(&userManager);

	NetworkPluginServer plugin(&transport, &config, &userManager);

	AdminInterface adminInterface(&transport, &userManager, &plugin, storageBackend);

	eventLoop_ = &eventLoop;

	eventLoop.run();
	if (userRegistration) {
		userRegistration->stop();
		delete userRegistration;
	}
	delete storageBackend;
	delete factories;
}