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", "<Ctrl-C> 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<AuthSession> 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

魔兽世界服务器Trinitycore分析二:auth server的main函数相关推荐

  1. 魔兽世界服务器Trinitycore分析一:前言

    一:简介 项目地址:https://github.com/TrinityCore/TrinityCore 帖一段官网介绍吧 TrinityCore is a MMORPG Framework base ...

  2. 魔兽世界服务器Trinitycore分析三:日志模块

    一:日志接口 TrinityCore的日志有六个级别:Trace,Debug,Info,Warn,Error,Fatal 它们分别对应以下这六个接口,(filterType__也是在配置文件中指定的) ...

  3. 【FFmpeg】ffmpeg工具源码分析(一):main函数

    ffmpeg工具经常用来转换.生成媒体文件,下面是它的源码分析(一):main函数 ffmpeg版本:4.2.1 int main(int argc, char **argv) {int i, ret ...

  4. obs源码分析【一】:main函数

    目录 main函数在哪里 obs项目架构 main函数浅析 crash的处理 obs配置 obs log 网络请求libcurl 主界面 Qt适配高dpi屏幕 总结   最近对obs的代码感兴趣了,在 ...

  5. 【Android 启动过程】Activity 启动源码分析 ( ActivityThread 流程分析 二 )

    文章目录 前言 一.ActivityManagerService.attachApplicationLocked 二.ActivityStackSupervisor.attachApplication ...

  6. 服务器性能指标(二)——CPU利用率分析及问题排查

    转载自  服务器性能指标(二)--CPU利用率分析及问题排查 平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load.cpu.mem.qps.rt等.每个指标都有其独特的意义,很多时候在线 ...

  7. 服务器性能指标(二)-- 线上服务器内存分析及问题排查

    服务器性能指标(二)-- 线上服务器内存分析及问题排查 平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load.cpu.mem.qps.rt等.每个指标都有其独特的意义,很多时候在线上出现 ...

  8. 转: 三大WEB服务器对比分析(apache ,lighttpd,nginx) (2008年的旧文,仅供参考之用)...

    from:  http://www.blogjava.net/daniel-tu/archive/2008/12/29/248883.html 三大WEB服务器对比分析(apache ,lighttp ...

  9. Wow魔兽世界服务器搭建详细教程,魔兽世界服务器配置要求

    自从<魔兽世界>国服关服后,很多魔兽老玩家心里都是空落落的,魔兽陪伴了我们十多年,此次关服犹如关上了通往艾泽拉斯大陆的大门. 上帝关上了一扇门,我们也可以自己开扇窗,随着国服关闭,越来越多 ...

  10. 服务器网站访问日志分析,服务器日志分析与流量统计_直观快捷分析每个网站的日志...

    本帖最后由 软程科技 于 2019-9-9 19:13 编辑 应用名称:日志分析与流量统计 价格:1元 作者:软程科技 版本: 2.1.9 提示(使用前必读): 1. 此插件未在超大(超过1G)的日志 ...

最新文章

  1. 锦上添花DataGrid!
  2. 对PostgreSQL缺省表空间的理解
  3. C#程序输出信息到调试窗口的几种方式
  4. 【Python】Python中打开文件那些事
  5. java基础知识简化
  6. 光学定位与追踪技术_贺岁片《疯狂外星人》中徐峥出演外星人?幕后动捕技术了解一下...
  7. cookie里面用到的关键字_Java的理解角度-关键字篇
  8. Windows11 配置 java 8.0 环境变量
  9. 卡耐基梅隆大学 计算机信息管理,CMU-喜报!G同学成功收到2017-Fall 卡耐基梅隆大学 计算机信息技术硕士AD一枚...
  10. 择时 配置 选股0909
  11. 基于python SMTP实现自动发送邮件教程解析
  12. 社群运营中KOL的作用
  13. AC日记——Two poj 1849
  14. LED灯驱动电源的七条经验
  15. Android-音视频学习系列-(九)Android-端实现-rtmp-推流,零基础如何成为高级Android开发
  16. Python 生成大量文件及大文件
  17. 《趣学算法》Chapter 2 贪心算法
  18. java 原子性int_JAVA原子性操作
  19. 笔记本电脑更换硬盘和内存
  20. Vue子组件中渲染动态组件无效(第一次无效、第二次有效)

热门文章

  1. 羞,Spring Bean 初始化/销毁竟然有这么多姿势
  2. 移位和位运算相关算法题学习积累
  3. 记录.net使用ueditor富文本编辑器
  4. MVN TEST指定运行脚本
  5. 通过try、except和else的使用来使Python程序更加“强壮”
  6. 20139216网络攻防技术第七次作业
  7. seajs的使用--主要了解模块化
  8. CMD获取当前目录的绝对路径
  9. 浅析类的const成员函数,类的const对象
  10. 手动创建maven项目+cmd+webapp+tomcat