1. 再看GS接包过程
  2. bool GameServer::ProcessLoop(packet& rPkt)
  3. {
  4. if(false == m_spDataLayer->Recv(rPkt))
  5. return true;//没数据了
  6.  
  7. if(rPkt.is_data)
  8. {
  9. if(!rPkt.data)
  10. return false;
  11.  
  12. GameChannel* pGC = m_vecChannel[rPkt.channel_id];
  13. if(pGC)
  14. pGC->OnReceiveData(rPkt.data, rPkt.size);//回调GC中相关函数
  15.  
  16. m_LiveMgr.OnLive(rPkt.channel_id);
  17. }
  18. else
  19. {
  20. //网络事件
  21. link_stat stat = (link_stat)rPkt.size;
  22. if (stat == link_stat::link_connected)
  23. {
  24. GameChannel* pNewGC = new GameChannel();
  25. pNewGC->m_nChannelId = rPkt.channel_id;
  26. pNewGC->m_pDataLayer = m_spDataLayer.get();//m_pDataLayer,GC直接发包到客户端
  27. pNewGC->m_pShare = this;
  28. pNewGC->m_pAsynDBC = this->m_spAsynDBC.get();//GC直接跟数据库打交道
  29.  
  30. m_vecChannel[rPkt.channel_id] = pNewGC;
  31. m_LiveMgr.Add(rPkt.channel_id);
  32. }
  33. else if (stat == link_stat::link_disconnected || stat == link_stat::link_connect_failed )
  34. {
  35. GameChannel* pDisconnectGC = m_vecChannel[rPkt.channel_id];
  36. if (pDisconnectGC)
  37. {
  38. //如果进入了地图,保存人物信息时会调用push_freeQueue + 滞空m_Channels[channel_id],
  39. pDisconnectGC->OnDisconnect();//做人物下线收尾工作,该通知map,数据库访问操作,等,根据玩家的状态来
  40.  
  41. //如果未进地图就下线,直接断开;不用保存角色详细数据,可直接放入释放队列中
  42. if (!pDisconnectGC->m_pMap)//如果进入地图需要从map返回数据然后保存数据库
  43. {
  44. AutoFreeGC(pDisconnectGC);//如果没有数据库访问直接释放,或者放到队列等无数据库访问在释放
  45. }
  46. }
  47. m_LiveMgr.Remove(rPkt.channel_id);
  48. }
  49. }
  50. return false;
  51. }

再看GS接包过程的更多相关文章

  1. 再看GS线程

    再看GS线程 void GameServer::ProcessThreadTry() { ; packet rcvPkt; rcvPkt.data = * ]; //该事件工厂主要创建了两个定时器1. ...

  2. 代码学习-Linux内核网卡收包过程(NAPI)【转】

    转自:https://blog.csdn.net/crazycoder8848/article/details/46333761 版权声明:本文没有任何版权限制,任何人可以以任何方式使用本文. htt ...

  3. mysql索引设计的注意事项(大量示例,收藏再看)

    mysql索引设计的注意事项(大量示例,收藏再看) 目录 一.索引的重要性 二.执行计划上的重要关注点 (1).全表扫描,检索行数 (2).key,using index(覆盖索引) (3).通过ke ...

  4. 再看Ajax

    再回顾Ajax相关的内容,再次梳理学习还是很有必要的,尤其是实际的开发中,ajax更是必不可少,仔细学习以便避免不必要的错误. 文章导读: --1.使用XMLHttpRequest---------- ...

  5. perf使用的问题,再看perf record,perf record 设置的采样频率,采样频率是如何体现在

    当perf stat -e branches 是统计 再看perf record,perf record是为了是记录时间发生的时候的调用栈, 在我的测试代码中总共有200,000,000条branch ...

  6. 记录centos7下tomcat部署war包过程

    记录centos7下tomcat部署war包过程 1.官网下载tomcat安装包.gz结尾的 2.上传到/usr/local/ ,并解压到tomcat目录下 3.进入tomcat/bin目录,运行./ ...

  7. linux网络收包过程

    记录一下linux数据包从网卡进入协议栈的过程,不涉及驱动,不涉及其他层的协议处理. 内核是如何知道网卡收到数据的,这就涉及到网卡和内核的交互方式: 轮询(poll):内核周期性的检查网卡,查看是否收 ...

  8. 再看ftp上传文件

    前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在 ...

  9. 再看 AspriseOCR - OCR应用开发 -20151124

    再看 AspriseOCR - OCR应用开发 我写这个博文时间为 2015/11/24日,注意时间因为,网上很多文章时间上很久远,有的已经不能参考了 很多人面对从图片中识别文字或者数字0~9  A~ ...

随机推荐

  1. LeetCode OJ--Word Search **

    https://oj.leetcode.com/problems/word-search/ 类似于在棋盘上走步,走过的地方不能再走,每次都可以走当前位置的上.下.左.右,问能不能走出要求的形状来. 深 ...

  2. 2016北京集训测试赛(十七)Problem C: 数组

    Solution 线段树好题. 我们考虑用last[i]表示\(i\)这个位置的颜色的上一个出现位置. 考虑以一个位置\(R\)为右端点的区间最远能向左延伸到什么位置: \(L = \max_{i \ ...

  3. Data structure basics - Java Implementation

    Stack & Queue Implementations FixedCapacityQueue package cn.edu.tsinghua.stat.mid_term; import j ...

  4. PHP如何在页面中原样输出HTML代码

    字符串与HTML之间的相互转换主要应用htmlentities()函数来完成. header("Content-Type: text/html; charset=utf-8"); ...

  5. ZFS -世界上最高级的文件系统之一

    https://www.oschina.net/news/44302/openzfs_launch_announcement https://en.wikipedia.org/wiki/ZFS ZFS ...

  6. CI框架基础知识

    调用一个视图 a.调用一个视图 $this->load->view('视图文件名'); b.调用多个视图 $this->load->view('index_h'); $this ...

  7. GLSL纹理贴图 【转】

    转载:http://blog.csdn.net/hgl868/article/details/7872466 简单的纹理贴图(Simple Texture) 为了在GLSL中应用纹理,我们需要访问每个 ...

  8. OSG+VS2010+win7环境搭建 (转)

    OSG+VS2010+win7环境搭建 Win7下 osg+vs2010环境搭建 一.相关准备 a) Osg源码 当前最新版:OpenSceneGraph的3.0.0.zip 下载链接: http:/ ...

  9. js CacheQueue

    (function(){ var CacheQueue=function(name,weightValue,maxLength,clearTimerTime){ //public this.name ...

  10. linux中expr用法

    名称:expr  ### 字串长度  shell>> expr length "this is a test"  14  ### 数字商数  shell>> ...