Files @ f2d7db397cec
Branch filter:

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

HanzZ
use pool allocator for roster manager
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
5fd0a88a8006
e8b61aa9b6fd
e8b61aa9b6fd
d3ccb9f195c8
e8b61aa9b6fd
e31c07794705
dd11e43325de
dd11e43325de
dd11e43325de
dd11e43325de
dd11e43325de
dd11e43325de
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
03d34297b5e3
e8b61aa9b6fd
e8b61aa9b6fd
03d34297b5e3
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
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
dd11e43325de
dd11e43325de
dd11e43325de
dd11e43325de
dd11e43325de
dd11e43325de
e8b61aa9b6fd
24d25a6f406b
24d25a6f406b
24d25a6f406b
24d25a6f406b
24d25a6f406b
44c526dbbbc9
e8b61aa9b6fd
bb1a8e4c36e2
bb1a8e4c36e2
bb1a8e4c36e2
bb1a8e4c36e2
5fd0a88a8006
5fd0a88a8006
3d2aa79ccbaa
5fd0a88a8006
5fd0a88a8006
5fd0a88a8006
5fd0a88a8006
bb1a8e4c36e2
bb1a8e4c36e2
3d2aa79ccbaa
bb1a8e4c36e2
e8b61aa9b6fd
e8b61aa9b6fd
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"
#include "sys/signal.h"
#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;

	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;
	}

	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();
		root->addAppender(new ConsoleAppender(new PatternLayout("%d %-5p %c: %m%n")));
	}
	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;

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

	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;
}