Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.99 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "Config.h"
  3. #include "Peer.h"
  4. #include "DBManager.h"
  5. #include "ClientManager.h"
  6. #include "GuildManager.h"
  7. #include "ItemAwardManager.h"
  8. #include "HB.h"
  9. #include "PrivManager.h"
  10. #include "MoneyLog.h"
  11. #include "Marriage.h"
  12. #include "Monarch.h"
  13. #include "BlockCountry.h"
  14. #include "ItemIDRangeManager.h"
  15. #ifdef __AUCTION__
  16. #include "AuctionManager.h"
  17. #endif
  18. #include <signal.h>
  19. #include "Main.h"
  20.  
  21. void SetPlayerDBName(const char* c_pszPlayerDBName);
  22. void SetTablePostfix(const char* c_pszTablePostfix);
  23. int Start();
  24. std::string g_stLocaleNameColumn = "name";
  25. std::string g_stPlayerDBName;
  26. //uint32_t g_cache_flush_limit_per_second;
  27. bool g_bHotBackup;
  28. //bool g_test_server;
  29. //bool iDisableHotBackup;
  30. int g_iItemCacheFlushSeconds;
  31. int g_iLogoutSeconds = 60*10;
  32. int iRetry = 5;
  33.  
  34. #if defined(__FreeBSD__) && defined(__FreeBSD_version) && __FreeBSD_version<1000000
  35. extern const char * _malloc_options;
  36. #endif
  37.  
  38. extern void WriteVersion();
  39.  
  40. void emergency_sig(int sig)
  41. {
  42.     if (sig == SIGSEGV)
  43.         sys_log(0, "SIGNAL: SIGSEGV");
  44.     else if (sig == SIGUSR1)
  45.         sys_log(0, "SIGNAL: SIGUSR1");
  46.  
  47.     if (sig == SIGSEGV)
  48.         abort();
  49. }
  50.  
  51. int main()
  52. {
  53.     WriteVersion();
  54.  
  55. #if defined(__FreeBSD__) && defined(__FreeBSD_version) && __FreeBSD_version<1000000
  56.     _malloc_options = "A";
  57. #endif
  58.  
  59.     CConfig Config;
  60.     CNetPoller poller;
  61.     CDBManager DBManager;
  62.     CClientManager ClientManager;
  63.     PlayerHB player_hb;
  64.     CGuildManager GuildManager;
  65.     CPrivManager PrivManager;
  66.     CMoneyLog MoneyLog;
  67.     ItemAwardManager ItemAwardManager;
  68.     marriage::CManager MarriageManager;
  69.     CMonarch Monarch;
  70.     CBlockCountry   BlockCountry;
  71.     CItemIDRangeManager ItemIDRangeManager;
  72. #ifdef __AUCTION__
  73.     AuctionManager auctionManager;
  74. #endif
  75.     if (!Start())
  76.         return 1;
  77.  
  78.     GuildManager.Initialize();
  79.     MarriageManager.Initialize();
  80.     BlockCountry.Load();
  81.     ItemIDRangeManager.Build();
  82. #ifdef __AUCTION__
  83.     AuctionManager::instance().Initialize();
  84. #endif
  85.     sys_log(0, "Metin2DBCacheServer Start\n");
  86.  
  87.     CClientManager::instance().MainLoop();
  88.  
  89.     signal_timer_disable();
  90.  
  91.     DBManager.Quit();
  92.     int iCount;
  93.  
  94.     while (1)
  95.     {
  96.         iCount = 0;
  97.  
  98.         iCount += CDBManager::instance().CountReturnQuery(SQL_PLAYER);
  99.         iCount += CDBManager::instance().CountAsyncQuery(SQL_PLAYER);
  100.  
  101.         if (iCount == 0)
  102.             break;
  103.  
  104.         usleep(1000);
  105.         sys_log(0, "WAITING_QUERY_COUNT %d", iCount);
  106.     }
  107.  
  108.     return 1;
  109. }
  110.  
  111. void emptybeat(LPHEART heart, int pulse)
  112. {
  113.     if (!(pulse % heart->passes_per_sec))
  114.     {
  115.         return;
  116.     }
  117. }
  118.  
  119. int Start()
  120. {
  121.     thecore_init(heart_beat_value, emptybeat);
  122.     signal_timer_enable(60);
  123.     SetTablePostfix(g_stTablePostfix);
  124.     CClientManager::instance().SetPlayerIDStart(g_iIDStart);
  125.     {
  126.         {
  127.             int iRetry = 5;
  128.             do
  129.             {
  130.                 if (CDBManager::Instance().Connect(SQL_PLAYER,
  131.                     sz_hostname, sz_port,
  132.                     sz_player, sz_user,
  133.                     sz_password)
  134.                     )
  135.                 {
  136.                     sys_log(0, "Connected to %s database!", sz_player);
  137.                     break;
  138.                 }
  139.                 sys_err("Error to connect : %s", sz_player);
  140.                 sleep(5);
  141.             } while (iRetry--);
  142.         }
  143.         {
  144.             int iRetry = 5;
  145.             do
  146.             {
  147.                 if (CDBManager::Instance().Connect(SQL_PLAYER,
  148.                     sz_hostname,
  149.                     sz_port,
  150.                     sz_account,
  151.                     sz_user,
  152.                     sz_password)
  153.                     )
  154.                 {
  155.                     sys_log(0, "Connected to %s database!", sz_account);
  156.                     break;
  157.                 }
  158.                 sys_err("Error to connect : %s", sz_account);
  159.                 sleep(5);
  160.             } while (iRetry--);
  161.         }
  162.         {
  163.             int iRetry = 5;
  164.             do
  165.             {
  166.                 if (CDBManager::Instance().Connect(SQL_COMMON,
  167.                     sz_hostname,
  168.                     sz_port,
  169.                     sz_common,
  170.                     sz_user,
  171.                     sz_password)
  172.                     )
  173.                 {
  174.                     sys_log(0, "Connected to %s database!", sz_common);
  175.                     break;
  176.                 }
  177.                 sys_err("Error to connect : %s", sz_common);
  178.                 sleep(5);
  179.             } while (iRetry--);
  180.         }
  181.         {
  182.             int iRetry = 5;
  183.             do
  184.             {
  185.                 if (CDBManager::Instance().Connect(SQL_HOTBACKUP,
  186.                     sz_hostname,
  187.                     sz_port,
  188.                     sz_hotbackup,
  189.                     sz_user, sz_password))
  190.                 {
  191.                     sys_log(0, "Connected to %s database!", sz_hotbackup);
  192.                     break;
  193.                 }
  194.                 sys_err("Error to connect : %s", sz_hotbackup);
  195.                 sleep(5);
  196.             } while (iRetry--);
  197.         }
  198.     }
  199.  
  200.     SetPlayerDBName(sz_player);
  201.  
  202.     if (!CNetPoller::instance().Create())
  203.     {
  204.         sys_err("Cannot create network poller");
  205.         return false;
  206.     }
  207.  
  208.     sys_log(0, "ClientManager initialization.. ");
  209.  
  210.     if (!CClientManager::instance().Initialize())
  211.     {
  212.         sys_log(0, "   failed");
  213.         return false;
  214.     }
  215.  
  216.     sys_log(0, "   OK");
  217.  
  218.     if (!PlayerHB::instance().Initialize())
  219.     {
  220.         sys_err("cannot initialize player hotbackup");
  221.         return false;
  222.     }
  223.  
  224. #ifndef __WIN32__
  225.     signal(SIGUSR1, emergency_sig);
  226. #endif
  227.     signal(SIGSEGV, emergency_sig);
  228.     return true;
  229. }
  230.  
  231. void SetTablePostfix(const char* c_pszTablePostfix)
  232. {
  233.     if (!c_pszTablePostfix || !*c_pszTablePostfix)
  234.         g_stTablePostfix = "";
  235.     else
  236.         g_stTablePostfix = c_pszTablePostfix;
  237. }
  238.  
  239. const char * GetTablePostfix()
  240. {
  241.     return g_stTablePostfix;
  242. }
  243.  
  244. void SetPlayerDBName(const char* c_pszPlayerDBName)
  245. {
  246.     if (! c_pszPlayerDBName || ! *c_pszPlayerDBName)
  247.         g_stPlayerDBName = "";
  248.     else
  249.     {
  250.         g_stPlayerDBName = c_pszPlayerDBName;
  251.         g_stPlayerDBName += ".";
  252.     }
  253. }
  254.  
  255. const char * GetPlayerDBName()
  256. {
  257.     return g_stPlayerDBName.c_str();
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement