博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
魔兽世界服务器Trinitycore分析二:auth server的main函数
阅读量:5173 次
发布时间:2019-06-13

本文共 3909 字,大约阅读时间需要 13 分钟。

         TrinityCore由生成两个运行文件authserver和world server以及一堆DLL(或so)文件的子项目组成(先忽略map_extractor等几个工具项目)。

         authserver是登录验证服,它主要提供登录验证和获取服务器(区服)列表的功能。world server是真正的游戏服务器,提供游戏里的一切功能。相对而言,auth server比較简单,那我就从它入手啊,先看一下它的main函数,在源代码的基础上,我加上了凝视。

//该函数在src\server\authserver\Main.cpp中  int main(int argc, char** argv)  {      std::string configFile = _TRINITY_REALM_CONFIG;        //读取程序的參数,存入variables_map中      //假设參数中含有help,则输出信息,中止程序      auto vm = GetConsoleArguments(argc, argv, configFile);      // exit if help is enabled      if (vm.count("help"))          return 0;        //读取配置文件      std::string configError;      if (!sConfigMgr->LoadInitial(configFile, configError))      {          printf("Error in config file: %s\n", configError.c_str());          return 1;      }        //向控制台输出一配置信息      TC_LOG_INFO("server.authserver", "%s (authserver)", _FULLVERSION);      TC_LOG_INFO("server.authserver", "
to stop.\n"); TC_LOG_INFO("server.authserver", "Using configuration file %s.", configFile.c_str()); TC_LOG_INFO("server.authserver", "Using SSL version: %s (library: %s)", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION)); TC_LOG_INFO("server.authserver", "Using Boost version: %i.%i.%i", BOOST_VERSION / 100000, BOOST_VERSION / 100 % 1000, BOOST_VERSION % 100); // authserver PID file creation //创建一个文件,向当中写入PID std::string pidFile = sConfigMgr->GetStringDefault("PidFile", ""); if (!pidFile.empty()) { if (uint32 pid = CreatePIDFile(pidFile)) TC_LOG_INFO("server.authserver", "Daemon PID: %u\n", pid); else { TC_LOG_ERROR("server.authserver", "Cannot create PID file %s.\n", pidFile.c_str()); return 1; } } // Initialize the database connection //初始化程序的数据库连接 if (!StartDB()) return 1; // Get the list of realms for the server //初始化world server列表 //也就是在auth数据库运行:"SELECT id, name, address, localAddress, localSubnetMask, port, icon, //flag, timezone, allowedSecurityLevel, population, gamebuild FROM realmlist WHERE flag <> 3 ORDER BY name" //并将结果存入单例类RealmList的m_realms中 sRealmList->Initialize(_ioService, sConfigMgr->GetIntDefault("RealmsStateUpdateDelay", 20)); if (sRealmList->size() == 0) { TC_LOG_ERROR("server.authserver", "No valid realms specified."); StopDB(); return 1; } // Start the listening port (acceptor) for auth connections //从配置文件里读取监听的IP和端口 int32 port = sConfigMgr->GetIntDefault("RealmServerPort", 3724); if (port < 0 || port > 0xFFFF) { TC_LOG_ERROR("server.authserver", "Specified port out of allowed range (1-65535)"); StopDB(); return 1; } std::string bindIp = sConfigMgr->GetStringDefault("BindIP", "0.0.0.0"); //初始化auth server AsyncAcceptor
authServer(_ioService, bindIp, port); // Set signal handlers //绑定SIGINT(退出)信号的处理函数 boost::asio::signal_set signals(_ioService, SIGINT, SIGTERM); #if PLATFORM == PLATFORM_WINDOWS signals.add(SIGBREAK); #endif signals.async_wait(SignalHandler); // Set process priority according to configuration settings //设置进程(线程)的优先级 SetProcessPriority("server.authserver"); // Enabled a timed callback for handling the database keep alive ping //添加一个定时器,用于与数据库保持心跳连接 _dbPingInterval = sConfigMgr->GetIntDefault("MaxPingTime", 30); _dbPingTimer.expires_from_now(boost::posix_time::minutes(_dbPingInterval)); _dbPingTimer.async_wait(KeepDatabaseAliveHandler); // Start the io service worker loop //開始事件循环 _ioService.run(); // Close the Database Pool and library //关闭数据库 StopDB(); TC_LOG_INFO("server.authserver", "Halting process..."); return 0; }
 

转载于:https://www.cnblogs.com/mfrbuaa/p/4507856.html

你可能感兴趣的文章
帧中继
查看>>
105:MyBatis常见实用面试题整理
查看>>
Base on QC Automation Framework v1.0
查看>>
bzoj 3261: 最大异或和 (可持久化trie树)
查看>>
UVA 11440 Help Tomisu
查看>>
bzoj千题计划258:bzoj3123: [Sdoi2013]森林
查看>>
开博@纪念
查看>>
linux的正则表达式
查看>>
Android 中EditText 与Keyboard 引起的UI bug
查看>>
20162316刘诚昊 2016-2017-2《程序设计与数据结构》课程总结
查看>>
代理模式---动态代理之JDK
查看>>
POJ 1182 食物链
查看>>
python xml解析和生成
查看>>
MySQL MGR集群搭建
查看>>
吴恩达深度学习笔记 cousrse4 week1作业
查看>>
程序员前辈走过的路
查看>>
UBUNTU 10.04 更新源 补充
查看>>
outputcache
查看>>
pc110301QWERTYU
查看>>
go 数组
查看>>