在master.cpp 主线程中读取配置文件获得World Server 的监听IP与端口:
string host = Config.MainConfig.GetStringDefault( "Listen", "Host", DEFAULT_HOST );
int wsport = Config.MainConfig.GetIntDefault( "Listen", "WorldServerPort", DEFAULT_WORLDSERVER_PORT );
并有SocketMgr发起工作线程:
new SocketMgr;
sSocketMgr.SpawnWorkerThreads();
由workersThreads完成异步I/O,采用完成端口的方式。
如果定义了启动远程控制,那么主线程会StartConsoleListener() 并将GetConsoleListener()返回的
ListenSocket<ConsoleSocket> * g_pListenSocket 传递给线程池。
在没有定义CLUSTERING 的情况下,World将会连接至Logon Server 也就是Realmlist所在的服务器,建立通讯:
new LogonCommHandler();
sLogonCommHandler.Startup();
此外还需要监听端口,以获得客户端的连接,监听IP与端口在配置文件中获得,见文章开头。
ListenSocket<WorldSocket> * ls = new ListenSocket<WorldSocket>(host.c_str(), wsport);
bool listnersockcreate = ls->IsOpen();
if( listnersockcreate )
ThreadPool.ExecuteTask(ls);
先讲与Logon Server的通讯,通讯模块在LogonCommClient.cpp与.h 中完成。
其中void LogonCommClientSocket::OnRead()在读到消息后将转交给