Files @ 2781d97a662a
Branch filter:

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

Jan Kaluza
comments in networkpluginserver.cpp
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
5fd0a88a8006
e8b61aa9b6fd
e8b61aa9b6fd
d3ccb9f195c8
e8b61aa9b6fd
e31c07794705
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
1e8eb7076f17
1e8eb7076f17
e8b61aa9b6fd
1e8eb7076f17
44c526dbbbc9
e8b61aa9b6fd
bb1a8e4c36e2
bb1a8e4c36e2
bb1a8e4c36e2
bb1a8e4c36e2
5fd0a88a8006
5fd0a88a8006
5fd0a88a8006
5fd0a88a8006
5fd0a88a8006
5fd0a88a8006
bb1a8e4c36e2
bb1a8e4c36e2
bb1a8e4c36e2
e8b61aa9b6fd
e8b61aa9b6fd
1e8eb7076f17
e31c07794705
bb1a8e4c36e2
e31c07794705
de4e6f57c5d9
44c526dbbbc9
bb1a8e4c36e2
44c526dbbbc9
e8b61aa9b6fd
e8b61aa9b6fd
e8b61aa9b6fd
091411eea4d9
091411eea4d9
e31c07794705
e31c07794705
e8b61aa9b6fd
e31c07794705
e31c07794705
e31c07794705
e31c07794705
e31c07794705
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"

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

	UserRegistry userRegistry(&config);

	Swift::SimpleEventLoop eventLoop;
	Component transport(&eventLoop, &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";
		}
	}
	else if (CONFIG_STRING(&config, "database.type") == "mysql") {
		storageBackend = new MySQLBackend(&config);
		if (!storageBackend->connect()) {
			std::cerr << "Can't connect to database.\n";
		}
	}

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