Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.68 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "engine.h"
  3. #include "admin.h"
  4. #include "cfg.h"
  5.  
  6. // Extern globals
  7. extern CFGMANAGER* cfg;
  8.  
  9. // Intern global
  10. ADMINMANAGER* adminmanager = 0;
  11.  
  12. // Admin object
  13. ADMIN::ADMIN(char* _name, int _level)
  14. :
  15. // level = _level
  16. level(_level)
  17. {
  18.     // Admin name ftw
  19.     sprintf_s(name,   sizeof(name),   "%s", _name);
  20.  
  21.     // Default status is 'Online'
  22.     sprintf_s(status, sizeof(status), "%s", "Online");
  23. }
  24.  
  25. ADMIN::~ADMIN()
  26. {
  27. }
  28.  
  29.  
  30. // Admin manager
  31. ADMINMANAGER::ADMINMANAGER()
  32. {
  33.     pthread_mutex_init(&mutex_admins, NULL);
  34.  
  35.     load_admins();
  36. }
  37.  
  38. ADMINMANAGER::~ADMINMANAGER()
  39. {
  40.     pthread_mutex_lock(&mutex_admins);
  41.     unload_admins();
  42.     pthread_mutex_unlock(&mutex_admins);
  43.  
  44.     pthread_mutex_destroy(&mutex_admins);
  45. }
  46.  
  47. void ADMINMANAGER::load_admins()
  48. {
  49.     // Info about loading
  50.     dbg_msg(3, "INFO", "Attempting to load the admins.");
  51.  
  52.     int begin = clock();
  53.  
  54.     FILE* adminlist;
  55.  
  56.     if(fopen_s(&adminlist, cfg->adminlist, "r") != 0)
  57.     {
  58.         dbg_msg(4, "ERROR", " -> Couldn't open '%s'.", cfg->adminlist);
  59.         return;
  60.     }
  61.  
  62.     char _name[33];
  63.     int _rights;
  64.  
  65.     while(fscanf_s(adminlist, "%s %d\n",
  66.                               _name, sizeof(_name),
  67.                               &_rights)
  68.                            
  69.                               == 2)
  70.     {
  71.         admins.push_back(new ADMIN(_name, _rights));
  72.     }
  73.  
  74.     fclose(adminlist);
  75.  
  76.  
  77.     // SUCCESS! :D
  78.     dbg_msg(2, "SUCCESS", " -> %d admins loaded from '%s' in %d msec.", admins.size(), cfg->adminlist, clock() - begin);
  79. }
  80.  
  81. void ADMINMANAGER::unload_admins()
  82. {
  83.     // Delete the admin objects
  84.     for(unsigned int i = 0; i < admins.size(); i++)
  85.         delete admins[i];
  86.  
  87.     admins.clear();
  88. }
  89.  
  90. void ADMINMANAGER::reload_admins()
  91. {
  92.     pthread_mutex_lock(&mutex_admins);
  93.     unload_admins();
  94.     load_admins();
  95.     pthread_mutex_unlock(&mutex_admins);
  96. }
  97.  
  98. void ADMINMANAGER::add_admin(char _account_name[], int _level)
  99. {
  100.     dbg_msg(3, "INFO", "Attempting to grant account '%s' the adminlevel %d.", _account_name, _level);
  101.  
  102.  
  103.     pthread_mutex_lock(&mutex_admins);
  104.     admins.push_back(new ADMIN(_account_name, _level));
  105.     pthread_mutex_unlock(&mutex_admins);
  106.  
  107.     FILE* adminlist;
  108.  
  109.     while(fopen_s(&adminlist, cfg->adminlist, "a") != 0)
  110.         Sleep(1);
  111.  
  112.     char buf[1024];
  113.     sprintf_s(buf, sizeof(buf), "%s %d\n", _account_name, _level);
  114.     fputs(buf, adminlist);
  115.  
  116.     fclose(adminlist);
  117.  
  118.     // SUCCESS! :D
  119.     dbg_msg(2, "SUCCESS", " -> Account '%s' became admin level %d.", _account_name, _level);
  120. }
  121.  
  122. void ADMINMANAGER::remove_admin(char _name[])
  123. {
  124.     dbg_msg(3, "INFO", "Attempting to revoke account '%s' it's adminlevel.", _name);
  125.  
  126.  
  127.     pthread_mutex_lock(&mutex_admins);
  128.     // Erase from vector
  129.     for(std::vector<ADMIN*>::iterator i = admins.begin();
  130.         i != admins.end();
  131.         i++)
  132.     {
  133.         if(strlen((*i)->name) == strlen(_name) &&
  134.            str_cmp((*i)->name, _name, strlen(_name)))
  135.         {
  136.             delete (*i);
  137.             admins.erase(i);
  138.             break;
  139.         }
  140.     }
  141.     pthread_mutex_unlock(&mutex_admins);
  142.  
  143.  
  144.     // Change banlist
  145.     FILE* adminlist;
  146.  
  147.     while(fopen_s(&adminlist, cfg->adminlist, "w") != 0)
  148.         Sleep(1);
  149.  
  150.     char buf[1024];
  151.  
  152.     pthread_mutex_lock(&mutex_admins);
  153.     for(unsigned int i = 0; i < admins.size(); i++)
  154.     {
  155.         sprintf_s(buf, sizeof(buf), "%s %d\n", admins[i]->name, admins[i]->level);
  156.         fputs(buf, adminlist);
  157.     }
  158.     pthread_mutex_unlock(&mutex_admins);
  159.  
  160.     fclose(adminlist);
  161.  
  162.     // SUCESS! :D
  163.     dbg_msg(2, "SUCCESS", " -> Account '%s' hasn't got an adminlevel anymore.", _name);
  164. }
  165.  
  166. ADMIN* ADMINMANAGER::get_admin(char* _name)
  167. {
  168.     pthread_mutex_lock(&mutex_admins);
  169.     for(unsigned int i = 0; i < admins.size(); i++)
  170.     {
  171.         if(strlen(admins[i]->name) == strlen(_name) &&
  172.            str_cmp(admins[i]->name, _name, strlen(_name)))
  173.         {
  174.             pthread_mutex_unlock(&mutex_admins);
  175.             return admins[i];
  176.         }
  177.     }
  178.     pthread_mutex_unlock(&mutex_admins);
  179.  
  180.     return NULL;
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement