您的位置:首页 > 其它

网狐框架分析七--完整游戏流程 150624

2015-06-30 11:19 519 查看
#1. 中心服务器流程 CenterServer.exe

入口:CenterServerDlg.cpp-->OnBnClickedStartService()

*CenterServerDlg.cpp*

    OnBnClickedStartService()==>m_CenterService.StartService()//启动服务

*CenterService.cpp*

    **StartService()//启动调度引擎,数据引擎,网络引擎**

*AttemperEngine.cpp//内核引擎-->调度引擎*

    StartService()==>m_QueueService.StartService()//启动队列

*QueueService.cpp//内核引擎-->队列引擎*

    StartService()==>CreateIoCompletionPort()//建立完成端口

    StartService()==>m_QueueServiceThread.StartThread()//启动线程

*ServiceThread.cpp//公共服务*

    StartThread()==>_beginthreadex()//启动线程

    StartThread()-->ThreadFunction()//监听函数,设置while循环调接口函数

**//至此调度引擎完**

*DataBase.cpp//内核引擎-->数据引擎*

    StartService()==>m_pIDataBaseEngineSink->OnDataBaseEngineStart()

**//至此数据引擎完**

*TCPNetworkEngine.cpp//内核引擎-->网络引擎*

    StartService()==>CreateIoCompletionPort()//建立完成端口

    StartService()==>m_QueueService.StartService()//启动队列

*QueueService.cpp//内核引擎-->队列引擎*

    StartService()==>CreateIoCompletionPort()//建立完成端口

    StartService()==>m_QueueServiceThread.StartThread()//启动线程

*ServiceThread.cpp//公共服务*

    StartThread()==>_beginthreadex()//启动线程

    StartThread()-->ThreadFunction()//监听函数,设置while循环调接口函数

//此后建立cpu线程数的读写线程+网络检测线程+应答线程

**//至此网络引擎完**

---

#2. 登陆服务器流程  LogonServer.exe

入口:LogonServerDlg.cpp-->OnBnClickedStartService()

*LogonServerDlg.cpp*

    OnBnClickedStartService()==>m_LogonService.StartService()

*LogonService.cpp*

    **StartService()//启动时间引擎,协调引擎,调度引擎,数据引擎,网络引擎**

*TimerEngine.cpp//内核引擎-->时间引擎*

    StartService()==>m_TimerThread.StartThread()

*ServiceThread.cpp//公共服务*

    StartThread()==>_beginthreadex()//启动线程

    StartThread()-->ThreadFunction()//监听函数,设置while循环调接口函数

 **//至此时间引擎完**   

*TCPSocketService.cpp//内核引擎*

    StartService()==>m_QueueService.StartService()

*QueueService.cpp//内核引擎*

    StartService()==>CreateIoCompletionPort()//建立完成端口

    StartService()==>m_QueueServiceThread.StartThread()//建立线程

*ServiceThread.cpp//公共服务*

    StartThread()==>_beginthreadex()//启动线程

    StartThread()-->ThreadFunction()//监听函数,设置while循环调接口函数

**//至此协调引擎完**    

*AttemperEngine.cpp//内核引擎-->调度引擎*

    StartService()==>m_QueueService.StartService()//启动队列

*QueueService.cpp//内核引擎-->队列引擎*

    StartService()==>CreateIoCompletionPort()//建立完成端口

    StartService()==>m_QueueServiceThread.StartThread()//启动线程

*ServiceThread.cpp//公共服务*

    StartThread()==>_beginthreadex()//启动线程

    StartThread()-->ThreadFunction()//监听函数,设置while循环调接口函数

**//至此调度引擎完**

*DataBase.cpp//内核引擎-->数据引擎*

    StartService()==>m_pIDataBaseEngineSink->OnDataBaseEngineStart()

**//至此数据引擎完**

*TCPNetworkEngine.cpp//内核引擎-->网络引擎*

    StartService()==>CreateIoCompletionPort()//建立完成端口

    StartService()==>m_QueueService.StartService()//启动队列

*QueueService.cpp//内核引擎-->队列引擎*

    StartService()==>CreateIoCompletionPort()//建立完成端口

    StartService()==>m_QueueServiceThread.StartThread()//启动线程

*ServiceThread.cpp//公共服务*

    StartThread()==>_beginthreadex()//启动线程

    StartThread()-->ThreadFunction()//监听函数,设置while循环调接口函数

//此后建立cpu线程数的读写线程+网络检测线程+应答线程

**//至此网络引擎完**

    

---

#3. 游戏大厅流程  GamePlaza.exe

入口:DlgLogon.cpp-->CDlgLogon::OnOK() 登录

*DlgLogon.cpp*

    OnOK()==>pIPlazaViewItem->SendConnectMessage();//发送连接信息

*PlazaViewItem.cpp*

    SendConnectMessage()==>PostMessage(WM_COMMAND,IDM_CONNECT_SERVER,0);//异步发送登录消息

    ON_COMMAND(IDM_CONNECT_SERVER, OnCommandConnect)//捕获消息,传递

    OnCommandConnect()==>m_ClientSocket->Connect("ip",port)

*TCPSocket.cpp*

    Connect("ip",port)==>Connect(ip,port)//1.建立socket 2.绑定窗口WSAAsyncSelect 3.连接服务器connect

        ==>iErrorCode = WSAAsyncSelect(m_hSocket, m_hWnd, WM_SOCKET_NOTIFY, FD_READ | FD_CONNECT | FD_CLOSE);//绑定窗口

    ON_MESSAGE(WM_SOCKET_NOTIFY, OnSocketNotify)//捕获消息,传递

    OnSocketNotify()//处理网络连接FD_CONNECT,消息读取FD_READ,消息关闭FD_CLOSE

    **OnSocketNotifyConnect()==>OnEventTCPSocketLink()**//网络连接

*PlazaViewItem.cpp*

    OnEventTCPSocketLink()==>m_DlgLogon.SendLogonPacket()

*DlgLogon.cpp*

    SendLogonPacket()==>pIClientSocke->SendData()//发送登录包

*TCPSocket.cpp*

    SendData()==>SendDataBuffer()//send发送消息到服务器

*TCPSocket.cpp*

    **OnSocketNotifyRead()==>m_pITCPSocketSink->OnEventTCPSocketRead()**//数据读取recv,处理数据

*PlazaViewItem.cpp*

    OnEventTCPSocketRead()//处理登录消息,列表消息,系统消息,用户消息

    OnSocketMainLogon()//登录消息

        SUB_GP_LOGON_SUCCESS//登录成功

        SUB_GP_LOGON_ERROR//登录失败

        SUB_GP_LOGON_FINISH//登录完成

    OnSocketMainServerList()//列表消息

        SUB_GP_LIST_TYPE//类型信息

        SUB_GP_LIST_KIND//种类信息

        SUB_GP_LIST_STATION//站点信息

        SUB_GP_LIST_SERVER//服务器房间

        SUB_GP_LIST_FINISH//列表发送完成

        SUB_GP_LIST_CONFIG//列表配置

    OnSocketMainSystem()//系统消息

        SUB_GP_VERSION//版本信息

    OnSocketMainUser()//用户消息

        SUB_GP_USER_DOWNLOAD_FACE//下载头像

        SUB_GP_UPLOAD_FACE_RESULT//上传头像

        SUB_GP_DELETE_FACE_RESULT//删除结果

        SUB_GP_MODIFY_INDIVIDUAL_RESULT//修改结果

        

---

#4. 完整流程

***游戏广场GamePlaza.exe***

*DlgLogon.cpp*

    OnOK()==>pIPlazaViewItem->SendConnectMessage()//发送连接消息

*PlazaViewItem.cpp*

    SendConnectMessage()==>PostMessage(WM_COMMAND,IDM_CONNECT_SERVER,0)

    ON_COMMAND(IDM_CONNECT_SERVER, OnCommandConnect)//监听分发消息

    //创建组件,地址解析,连接服务器

    OnCommandConnect()==>m_ClientSocket->Connect()

*TCPSocket.cpp*

    Connect()==>Connect()

    Connect();//建立socket,绑定窗口,连接服务器

        WSAAsyncSelect(m_hSocket, m_hWnd, WM_SOCKET_NOTIFY, FD_READ | FD_CONNECT | FD_CLOSE);//绑定窗口

        connect(m_hSocket, (SOCKADDR *) & SocketAddr, sizeof(SocketAddr));//连接服务器  [1]

        //FD_CONNECT网络连接

        OnSocketNotify()==>OnSocketNotifyConnect()//

        OnSocketNotifyConnect()==>m_pITCPSocketSink->OnEventTCPSocketLink()//

        //发送登录包

        OnEventTCPSocketLink()==>m_DlgLogon.SendLogonPacket()//

        SendLogonPacket()==>pIClientSocke->SendData()//账号登录

*TCPSocket.cpp*

        SendData()==>SendDataBuffer()//send发送 [2]

        

***登陆服务器 LogonServer.exe***

*ServiceThread.cpp*

    ThreadFunction()==>pServiceThread->OnEventThreadRun()//线程中while循环

*QueueService.cpp*

    OnEventThreadRun()==>GetQueuedCompletionStatus()//完成端口捕获消息 [1]

    pQueueService->GetData()==>pQueueService->OnQueueServiceThread()//

    OnQueueServiceThread()==>m_pIQueueServiceSink->OnQueueServiceSink()

    //EVENT_TCP_NETWORK_ACCEPT网络应答事件

    OnQueueServiceSink()==>m_pIAttemperEngineSink->OnEventTCPNetworkBind()

    

*TCPNetworkEngine.cpp*

    OnEventThreadRun()==>GetQueuedCompletionStatus()

    //OperationType_Recv数据读取

    pServerSocketItem->OnRecvCompleted()==>OnRecvCompleted()

    

    

    

    

---

#5. 关键点

网络模型:完成端口模型(PostQueuedCompletionStatus和GetQueuedCompletionStatus)

网络类型:socket通信(send和recv)

线程通信:PostMessage和ON_COMMAND(XX,XX)

          WSAAsyncSelect(m_hSocket, m_hWnd, WM_SOCKET_NOTIFY, FD_READ | FD_CONNECT | FD_CLOSE)和ON_MESSAGE(WM_SOCKET_NOTIFY, OnSocketNotify)//绑定窗口消息

函数模型:定义IA,IB接口,定义A类继承接口IA并实现,定义B类继承接口IB并实现

---
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: