int start(int argc, char ** argv) { //extern const char * _malloc_options; //_malloc_options = "A"; if (lzo_init() != LZO_E_OK) { sys_err("lzo_init() failed"); return 0; } thecore_init(25, heartbeat); signal_timer_disable(); return 1; }
int start(int argc, char **argv) { std::string st_localeServiceName; bool bVerbose = false; char ch; //_malloc_options = "A"; #if defined(__FreeBSD__) && defined(DEBUG_ALLOC) _malloc_message = WriteMallocMessage; #endif while ((ch = getopt(argc, argv, "npverltI")) != -1) { char* ep = NULL; switch (ch) { case 'I': // IP enhance_strlcpymt(g_szPublicIP, argv[optind], sizeof(g_szPublicIP)); printf("IP %s\n", g_szPublicIP); optind++; optreset = 1; break; case 'p': // port mother_port = strtol(argv[optind], &ep, 10); if (mother_port <= 1024) { usage(); return 0; } printf("port %d\n", mother_port); optind++; optreset = 1; break; case 'l': { long l = strtol(argv[optind], &ep, 10); log_set_level(l); optind++; optreset = 1; } break; // LOCALE_SERVICE case 'n': { if (optind < argc) { st_localeServiceName = argv[optind++]; optreset = 1; } } break; // END_OF_LOCALE_SERVICE case 'v': // verbose bVerbose = true; break; case 'r': g_bNoRegen = true; break; // TRAFFIC_PROFILER case 't': g_bTrafficProfileOn = true; break; // END_OF_TRAFFIC_PROFILER } } // LOCALE_SERVICE config_init(st_localeServiceName); // END_OF_LOCALE_SERVICE #ifdef _WIN32 // In Windows dev mode, "verbose" option is [on] by default. bVerbose = true; #endif if (!bVerbose) freopen("stdout", "a", stdout); bool is_thecore_initialized = thecore_init(25, heartbeat); if (!is_thecore_initialized) { fprintf(stderr, "Could not initialize thecore, check owner of pid, syslog\n"); exit(0); } if (false == CThreeWayWar::instance().LoadSetting("forkedmapindex.txt")) { if (false == g_bAuthServer) { fprintf(stderr, "Could not Load ThreeWayWar Setting file"); exit(0); } } signal_timer_disable(); main_fdw = fdwatch_new(4096); fprintf(stderr, "PUBLIC_IP: %s\n", g_szPublicIP); fprintf(stderr, "INTERNAL_IP: %s\n", g_szInternalIP); if ((tcp_socket = socket_tcp_bind(g_szPublicIP, mother_port)) == INVALID_SOCKET) { perror("socket_tcp_bind: tcp_socket"); return 0; } #ifndef __UDP_BLOCK__ if ((udp_socket = socket_udp_bind(g_szPublicIP, mother_port)) == INVALID_SOCKET) { perror("socket_udp_bind: udp_socket"); return 0; } #endif // if internal ip exists, p2p socket uses internal ip, if not use public ip //if ((p2p_socket = socket_tcp_bind(*g_szInternalIP ? g_szInternalIP : g_szPublicIP, p2p_port)) == INVALID_SOCKET) if ((p2p_socket = socket_tcp_bind(g_szPublicIP, p2p_port)) == INVALID_SOCKET) { perror("socket_tcp_bind: p2p_socket"); return 0; } fdwatch_add_fd(main_fdw, tcp_socket, NULL, FDW_READ, false); #ifndef __UDP_BLOCK__ fdwatch_add_fd(main_fdw, udp_socket, NULL, FDW_READ, false); #endif fdwatch_add_fd(main_fdw, p2p_socket, NULL, FDW_READ, false); db_clientdesc = DESC_MANAGER::instance().CreateConnectionDesc(main_fdw, db_addr, db_port, PHASE_DBCLIENT, true); if (!g_bAuthServer) { db_clientdesc->UpdateChannelStatus(0, true); } if (g_bAuthServer) { if (g_stAuthMasterIP.length() != 0) { fprintf(stderr, "SlaveAuth"); g_pkAuthMasterDesc = DESC_MANAGER::instance().CreateConnectionDesc(main_fdw, g_stAuthMasterIP.c_str(), g_wAuthMasterPort, PHASE_P2P, true); P2P_MANAGER::instance().RegisterConnector(g_pkAuthMasterDesc); g_pkAuthMasterDesc->SetP2P(g_stAuthMasterIP.c_str(), g_wAuthMasterPort, g_bChannel); } else { fprintf(stderr, "MasterAuth %d", LC_GetLocalType()); } } /* game server to teen server */ else { if (teen_addr[0] && teen_port) g_TeenDesc = DESC_MANAGER::instance().CreateConnectionDesc(main_fdw, teen_addr, teen_port, PHASE_TEEN, true); extern unsigned int g_uiSpamBlockDuration; extern unsigned int g_uiSpamBlockScore; extern unsigned int g_uiSpamReloadCycle; sys_log(0, "SPAM_CONFIG: duration %u score %u reload cycle %u\n", g_uiSpamBlockDuration, g_uiSpamBlockScore, g_uiSpamReloadCycle); extern void LoadSpamDB(); LoadSpamDB(); } signal_timer_enable(30); return 1; }
// // @version 05/06/13 Bang2ni - 아이템 가격정보 캐시 flush timeout 설정 추가. // int Start() { if (!CConfig::instance().LoadFile("conf.txt")) { fprintf(stderr, "Loading conf.txt failed.\n"); return false; } if (!CConfig::instance().GetValue("TEST_SERVER", &g_test_server)) { fprintf(stderr, "Real Server\n"); } else fprintf(stderr, "Test Server\n"); if (!CConfig::instance().GetValue("LOG", &g_log)) { fprintf(stderr, "Log Off"); g_log= 0; } else { g_log = 1; fprintf(stderr, "Log On"); } int tmpValue; int heart_beat = 50; if (!CConfig::instance().GetValue("CLIENT_HEART_FPS", &heart_beat)) { fprintf(stderr, "Cannot find CLIENT_HEART_FPS configuration.\n"); return false; } log_set_expiration_days(3); if (CConfig::instance().GetValue("LOG_KEEP_DAYS", &tmpValue)) { tmpValue = MINMAX(3, tmpValue, 30); log_set_expiration_days(tmpValue); fprintf(stderr, "Setting log keeping days to %d\n", tmpValue); } thecore_init(heart_beat, emptybeat); signal_timer_enable(60); char szBuf[256+1]; if (CConfig::instance().GetValue("LOCALE", szBuf, 256)) { g_stLocale = szBuf; sys_log(0, "LOCALE set to %s", g_stLocale.c_str()); // CHINA_DISABLE_HOTBACKUP if ("gb2312" == g_stLocale) { sys_log(0, "CIBN_LOCALE: DISABLE_HOTBACKUP"); g_bHotBackup = false; } // END_OF_CHINA_DISABLE_HOTBACKUP } int iDisableHotBackup; if (CConfig::instance().GetValue("DISABLE_HOTBACKUP", &iDisableHotBackup)) { if (iDisableHotBackup) { sys_log(0, "CONFIG: DISABLE_HOTBACKUP"); g_bHotBackup = false; } } if (!CConfig::instance().GetValue("TABLE_POSTFIX", szBuf, 256)) { sys_err("TABLE_POSTFIX not configured use default"); szBuf[0] = '\0'; } SetTablePostfix(szBuf); if (CConfig::instance().GetValue("PLAYER_CACHE_FLUSH_SECONDS", szBuf, 256)) { str_to_number(g_iPlayerCacheFlushSeconds, szBuf); sys_log(0, "PLAYER_CACHE_FLUSH_SECONDS: %d", g_iPlayerCacheFlushSeconds); } if (CConfig::instance().GetValue("ITEM_CACHE_FLUSH_SECONDS", szBuf, 256)) { str_to_number(g_iItemCacheFlushSeconds, szBuf); sys_log(0, "ITEM_CACHE_FLUSH_SECONDS: %d", g_iItemCacheFlushSeconds); } // MYSHOP_PRICE_LIST if (CConfig::instance().GetValue("ITEM_PRICELIST_CACHE_FLUSH_SECONDS", szBuf, 256)) { str_to_number(g_iItemPriceListTableCacheFlushSeconds, szBuf); sys_log(0, "ITEM_PRICELIST_CACHE_FLUSH_SECONDS: %d", g_iItemPriceListTableCacheFlushSeconds); } // END_OF_MYSHOP_PRICE_LIST // if (CConfig::instance().GetValue("CACHE_FLUSH_LIMIT_PER_SECOND", szBuf, 256)) { DWORD dwVal = 0; str_to_number(dwVal, szBuf); CClientManager::instance().SetCacheFlushCountLimit(dwVal); } int iIDStart; if (!CConfig::instance().GetValue("PLAYER_ID_START", &iIDStart)) { sys_err("PLAYER_ID_START not configured"); return false; } CClientManager::instance().SetPlayerIDStart(iIDStart); if (CConfig::instance().GetValue("NAME_COLUMN", szBuf, 256)) { fprintf(stderr, "%s %s", g_stLocaleNameColumn.c_str(), szBuf); g_stLocaleNameColumn = szBuf; } char szAddr[64], szDB[64], szUser[64], szPassword[64]; int iPort; char line[256+1]; if (CConfig::instance().GetValue("SQL_PLAYER", line, 256)) { sscanf(line, " %s %s %s %s %d ", szAddr, szDB, szUser, szPassword, &iPort); sys_log(0, "connecting to MySQL server (player)"); int iRetry = 5; do { if (CDBManager::instance().Connect(SQL_PLAYER, szAddr, iPort, szDB, szUser, szPassword)) { sys_log(0, " OK"); break; } sys_log(0, " failed, retrying in 5 seconds"); fprintf(stderr, " failed, retrying in 5 seconds"); sleep(5); } while (iRetry--); fprintf(stderr, "Success PLAYER\n"); SetPlayerDBName(szDB); } else { sys_err("SQL_PLAYER not configured"); return false; } if (CConfig::instance().GetValue("SQL_ACCOUNT", line, 256)) { sscanf(line, " %s %s %s %s %d ", szAddr, szDB, szUser, szPassword, &iPort); sys_log(0, "connecting to MySQL server (account)"); int iRetry = 5; do { if (CDBManager::instance().Connect(SQL_ACCOUNT, szAddr, iPort, szDB, szUser, szPassword)) { sys_log(0, " OK"); break; } sys_log(0, " failed, retrying in 5 seconds"); fprintf(stderr, " failed, retrying in 5 seconds"); sleep(5); } while (iRetry--); fprintf(stderr, "Success ACCOUNT\n"); } else { sys_err("SQL_ACCOUNT not configured"); return false; } if (CConfig::instance().GetValue("SQL_COMMON", line, 256)) { sscanf(line, " %s %s %s %s %d ", szAddr, szDB, szUser, szPassword, &iPort); sys_log(0, "connecting to MySQL server (common)"); int iRetry = 5; do { if (CDBManager::instance().Connect(SQL_COMMON, szAddr, iPort, szDB, szUser, szPassword)) { sys_log(0, " OK"); break; } sys_log(0, " failed, retrying in 5 seconds"); fprintf(stderr, " failed, retrying in 5 seconds"); sleep(5); } while (iRetry--); fprintf(stderr, "Success COMMON\n"); } else { sys_err("SQL_COMMON not configured"); return false; } if (CConfig::instance().GetValue("SQL_HOTBACKUP", line, 256)) { sscanf(line, " %s %s %s %s %d ", szAddr, szDB, szUser, szPassword, &iPort); sys_log(0, "connecting to MySQL server (hotbackup)"); int iRetry = 5; do { if (CDBManager::instance().Connect(SQL_HOTBACKUP, szAddr, iPort, szDB, szUser, szPassword)) { sys_log(0, " OK"); break; } sys_log(0, " failed, retrying in 5 seconds"); fprintf(stderr, " failed, retrying in 5 seconds"); sleep(5); } while (iRetry--); fprintf(stderr, "Success HOTBACKUP\n"); } else { sys_err("SQL_HOTBACKUP not configured"); return false; } if (!CNetPoller::instance().Create()) { sys_err("Cannot create network poller"); return false; } sys_log(0, "ClientManager initialization.. "); if (!CClientManager::instance().Initialize()) { sys_log(0, " failed"); return false; } sys_log(0, " OK"); if (!PlayerHB::instance().Initialize()) { sys_err("cannot initialize player hotbackup"); return false; } #ifndef _WIN32 signal(SIGUSR1, emergency_sig); #endif signal(SIGSEGV, emergency_sig); return true; }