X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/0d1120fd953249ad6292b8684a2accb8890fb4ef..195e09db8f2bb83665f5536dd46330467c251900:/projects/sgauthstress/main.cpp diff --git a/projects/sgauthstress/main.cpp b/projects/sgauthstress/main.cpp index 3460457a..b0819c3c 100644 --- a/projects/sgauthstress/main.cpp +++ b/projects/sgauthstress/main.cpp @@ -28,11 +28,17 @@ #include #include +#include +#include -#include "stg/ia.h" #include "stg/common.h" +#include "stg/store.h" +#include "stg/user_conf.h" #include "settings.h" +#include "store_loader.h" +#include "proto.h" +#include "user.h" time_t stgTime; bool running; @@ -42,23 +48,7 @@ bool running; //----------------------------------------------------------------------------- void Usage() { -std::cout << "sgauth " << std::endl; -} -//----------------------------------------------------------------------------- -void StatUpdate(const LOADSTAT &, void *) -{ -} -//----------------------------------------------------------------------------- -void StatusChanged(int, void *) -{ -} -//----------------------------------------------------------------------------- -void ShowMessage(const string &, int, int, int, void *) -{ -} -//----------------------------------------------------------------------------- -void ShowError(const string &, int, void *) -{ +std::cout << "Usage:\n\nsgauth " << std::endl; } //----------------------------------------------------------------------------- void CatchTERM(int) @@ -99,38 +89,82 @@ if (argc == 2) if (settings.ReadSettings()) { - std::cerr << "Failed to read settings\n" - << settings.GetStrError() << std::endl; + std::cerr << "Failed to read settings: '" + << settings.GetStrError() << "'" << std::endl; Usage(); return -1; } SetSignalHandlers(); -IA_CLIENT_PROT proto(settings.GetServerName(), settings.GetServerPort(), settings.GetLocalPort()); +PROTO proto(settings.GetServerName(), + settings.GetServerPort(), + settings.GetLocalPort(), + 10); + +STORE_LOADER storeLoader(settings.GetModulesPath(), settings.GetStoreModuleSettings()); +if (storeLoader.Load()) + { + std::cerr << "Failed to load storage plugin: '" << storeLoader.GetStrError() << "'" << std::endl; + return -1; + } + +STORE * dataStore = storeLoader.GetStore(); -proto.SetLogin(settings.GetLogin()); -proto.SetPassword(settings.GetPassword()); +std::vector userList; +if (dataStore->GetUsersList(&userList)) + { + std::cerr << "Failed to get user list: '" << dataStore->GetStrError() << "'" << std::endl; + return -1; + } -proto.SetStatusChangedCb(StatusChanged, NULL); -proto.SetInfoCb(ShowMessage, NULL); -proto.SetErrorCb(ShowError, NULL); -proto.SetStatChangedCb(StatUpdate, NULL); +std::list ips; + { + std::vector::const_iterator it; + for (it = userList.begin(); it != userList.end(); ++it) + { + USER_CONF userConf; + if (dataStore->RestoreUserConf(&userConf, *it)) + { + std::cerr << "Failed to read user conf: '" << dataStore->GetStrError() << "'" << std::endl; + return -1; + } + proto.AddUser( + USER( + *it, + userConf.password, + userConf.ips[0].ip + ) + ); + ips.push_back(userConf.ips[0].ip); + } + } -proto.Start(); +if (!proto.Start()) + { + std::cerr << "Failed to start listening thread: '" << proto.GetStrError() << "'" << std::endl; + return -1; + } -proto.Connect(); +std::list::const_iterator it; +for (it = ips.begin(); it != ips.end(); ++it) + { + proto.Connect(*it); + } + +std::cout << "Successfully loaded " << proto.UserCount() << " users" << std::endl; running = true; while (running) { - usleep(200000); + struct timespec ts = {0, 200000000}; + nanosleep(&ts, NULL); } -proto.Disconnect(); - proto.Stop(); +storeLoader.Unload(); + return 0; } //-----------------------------------------------------------------------------