X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/7a86e28eea13406bbe23e5a3da29aa763cdab67a..446c23f6b9bd2d6f9a60e1ebbf979055c8e03507:/projects/sgauthstress/main.cpp diff --git a/projects/sgauthstress/main.cpp b/projects/sgauthstress/main.cpp index 96c58203..71388477 100644 --- a/projects/sgauthstress/main.cpp +++ b/projects/sgauthstress/main.cpp @@ -25,104 +25,47 @@ */ #include -#include -#include -#include #include -#include -#include #include -#include #include "stg/ia.h" #include "stg/common.h" -#include "web.h" -#include "settings_impl.h" +#include "stg/store.h" -int mes; -char infoText[256]; -char messageText[256]; - -const int winKOI = 0; - -IA_CLIENT_PROT * clnp; -WEB * web = NULL; - -using namespace std; +#include "settings.h" +#include "store_loader.h" time_t stgTime; +bool running; //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- void Usage() { -printf("sgauth \n"); +std::cout << "Usage:\n\nsgauth " << std::endl; } //----------------------------------------------------------------------------- -void SetDirName(const vector & dn, void *) +void StatUpdate(const LOADSTAT &, void *) { -for (int j = 0; j < DIR_NUM; j++) - { - if (winKOI) - { - string dir; - KOIToWin(dn[j], &dir); - if (web) - web->SetDirName(dir, j); - } - else - { - if (web) - web->SetDirName(dn[j], j); - } - } -} -//----------------------------------------------------------------------------- -void StatUpdate(const LOADSTAT & ls, void *) -{ -if (web) - web->UpdateStat(ls); } //----------------------------------------------------------------------------- void StatusChanged(int, void *) { } //----------------------------------------------------------------------------- -void ShowMessage(const string & message, int i, int, int, void *) -{ -if (web) - web->AddMessage(message, i); -} -//----------------------------------------------------------------------------- -void ShowError(const string & message, int, void *) +void ShowMessage(const string &, int, int, int, void *) { -if (web) - web->AddMessage(message, 0); } //----------------------------------------------------------------------------- -void CatchUSR1(int) +void ShowError(const string &, int, void *) { -if (clnp->GetAuthorized()) - { - cout << "Connect" << endl; - clnp->Connect(); - } -} -//----------------------------------------------------------------------------- -void CatchUSR2(int) -{ -cout << "Disconnect" << endl; -clnp->Disconnect(); } //----------------------------------------------------------------------------- void CatchTERM(int) { -cout << "Terminated" << endl; -clnp->Disconnect(); -sleep(2); -exit(0); +running = false; } //----------------------------------------------------------------------------- static void SetSignalHandlers() @@ -144,135 +87,71 @@ newsa.sa_mask = sigmask; newsa.sa_flags = 0; sigaction(SIGINT, &newsa, &oldsa); -sigemptyset(&sigmask); -sigaddset(&sigmask, SIGUSR1); -newsa.sa_handler = CatchUSR1; -newsa.sa_mask = sigmask; -newsa.sa_flags = 0; -sigaction(SIGUSR1, &newsa, &oldsa); - -sigemptyset(&sigmask); -sigaddset(&sigmask, SIGUSR2); -newsa.sa_handler = CatchUSR2; -newsa.sa_mask = sigmask; -newsa.sa_flags = 0; -sigaction(SIGUSR2, &newsa, &oldsa); - return; } //----------------------------------------------------------------------------- int main(int argc, char *argv[]) { -SETTINGS_IMPL settings; +SETTINGS settings; if (argc == 2) { settings.SetConfFile(argv[1]); } -else - { - // Usage - } if (settings.ReadSettings()) { - printf("ReadSettingsError\n"); - printf("%s\n", settings.GetStrError().c_str()); - exit(-1); + std::cerr << "Failed to read settings: '" + << settings.GetStrError() << "'" << std::endl; + Usage(); + return -1; } -settings.Print(); - -if (settings.GetDaemon()) - { - switch (fork()) - { - case -1: - exit(1); - break; - case 0: - setsid(); - break; +SetSignalHandlers(); - default: - exit(0); - break; - } +STORE_LOADER storeLoader(settings.GetModulesPath(), settings.GetStoreModuleSettings()); +if (storeLoader.Load()) + { + std::cerr << "Failed to load storage plugin: '" << storeLoader.GetStrError() << "'" << std::endl; + return -1; } -clnp = new IA_CLIENT_PROT(settings.GetServerName(), settings.GetServerPort(), settings.GetLocalPort()); +STORE * dataStore = storeLoader.GetStore(); -if (!settings.GetNoWeb()) +std::vector userList; +if (dataStore->GetUsersList(&userList)) { - web = new WEB(); - web->SetRefreshPagePeriod(settings.GetRefreshPeriod()); - web->SetListenAddr(settings.GetListenWebIP()); - web->Start(); + std::cerr << "Failed to get user list: '" << dataStore->GetStrError() << "'" << std::endl; + return -1; } -clnp->SetLogin(settings.GetLogin()); -clnp->SetPassword(settings.GetPassword()); +std::cout << "Successfully loaded " << userList.size() << " users" << std::endl; -clnp->SetStatusChangedCb(StatusChanged, NULL); -clnp->SetInfoCb(ShowMessage, NULL); -clnp->SetErrorCb(ShowError, NULL); -clnp->SetDirNameCb(SetDirName, NULL); -clnp->SetStatChangedCb(StatUpdate, NULL); -clnp->SetReconnect(settings.GetReconnect()); +IA_CLIENT_PROT proto(settings.GetServerName(), settings.GetServerPort(), settings.GetLocalPort()); -clnp->Start(); - -SetSignalHandlers(); +proto.SetLogin(settings.GetLogin()); +proto.SetPassword(settings.GetPassword()); -#ifdef LINUX -for (int i = 1; i < argc; i++) - memset(argv[i], 0, strlen(argv[i])); +proto.SetStatusChangedCb(StatusChanged, NULL); +proto.SetInfoCb(ShowMessage, NULL); +proto.SetErrorCb(ShowError, NULL); +proto.SetStatChangedCb(StatUpdate, NULL); -if(argc > 1) - strcpy(argv[1], "Connecting..."); -#endif +proto.Start(); -#ifdef FREEBSD -setproctitle("Connecting..."); -#endif -clnp->Connect(); +proto.Connect(); -while (1) +running = true; +while (running) { usleep(200000); + } - char state[20]; - - if (clnp->GetAuthorized()) - { - if (settings.GetShowPid()) - sprintf(state, "On %d", getpid()); - else - strcpy(state, "Online"); - } - else - { - if (settings.GetShowPid()) - sprintf(state, "Off %d", getpid()); - else - strcpy(state, "Offline"); - } - - #ifdef LINUX - for (int i = 1; i < argc; i++) - memset(argv[i], 0, strlen(argv[i])); - if(argc > 1) - strcpy(argv[1], state); - #endif +proto.Disconnect(); - #ifdef FREEBSD - setproctitle(state); - #endif +proto.Stop(); - #ifdef FREEBSD_5 - setproctitle(state); - #endif - } +storeLoader.Unload(); return 0; }