share(发包方面)

share(发包方面)
接收所有map发过来的包,这个是GS线程驱动的
{
    for (;;)
    {
        //...
        if(!itMap.second->RecvData(Pkt))
            break;
        if(Pkt.cmd == ms2gs_转client_cmd)
        {
            OnTurnToClient(Pkt.channelId, Pkt.data, Pkt.len);
        }
        else if(Pkt.cmd == ms2gs_json)
        {
            OnJson(Pkt.channelId, Pkt.data, Pkt.len);
        }
        else if(ms2gs_db_buff_info == Pkt.cmd)
        {
            OnLeaveMap(Pkt.channelId, Pkt.data, Pkt.len);
        }
        else if(ms2gs_obj_leave == Pkt.cmd)    //玩家切换地图
        {
            OnEnterNewMap(Pkt.channelId, Pkt.data, Pkt.len);
        }
        else if(ms2gs_guild_opt == Pkt.cmd)
        {
            m_spGuildOpt->OnGuildOpt(Pkt.channelId, Pkt.data, Pkt.len);
        }
        else if (ms2gs_prop_mgr == Pkt.cmd)
        {
            m_spPropManager->OnPropMgrOpt(Pkt.channelId, Pkt.data, Pkt.len);
        }
        else if (ms2ms_cmd == Pkt.cmd)
        {
            OnTurnToMap(Pkt.mapId, Pkt.data, Pkt.len);
        }
        else if (ms2gs_mall_opt == Pkt.cmd)
        {
            m_spMallOpt->OnMallOpt(Pkt.channelId, Pkt.data, Pkt.len);
        }
        else if (ms2gs_auction_opt == Pkt.cmd)
        {
            m_spAuctionOpt->OnAuctionOpt(Pkt.channelId, Pkt.data, Pkt.len);
        }
        //...
    }
}
有自己模块是跨地图的道具,帮会,商城,组队,因为某些操作是与哪张地图关系是不大的,所以就将其做成跨地图模式
InitAcrossMapOpt();//跨地图操作
InitAcrossManager();//跨地图管理器

这些操作还是管理器都是从map发过来的包,所以还是从这个循环中去接包,
根据内部协议,转到相应跨地图模块或者在share这层处理,等跨模块处理完相应处理之后想MS或者Client发包,跨地图模块本身是不发送消息的,他要通过share这层去发
如:
Events.SendAucOpt2Ms = [this](int nChannelId, void* pData, int nLen)
{
    SendCmd2MsByChannelId(nChannelId, gs2ms_auction, pData, nLen);
};
void Share::SendCmd2MsByChannelId(int nChannelId, int nCmd, void* pData, int nLen)
{
    GameChannel* pGC = m_vecChannel[nChannelId];
    if (!pGC) return;
    pGC->m_pMap->Gs2MsData(nCmd, nChannelId, pData, nLen);//通过玩家对应map去发送
}
发送到客户端也是如此,毕竟所有玩家通道和map信息都在share这边
所以接包是在share中接的,发送还是从share中发送出去的
时间: 2024-10-13 07:22:12

share(发包方面)的相关文章

GS发包到MS

GS发包到MS(GS,MS包交互过程) 例:人物上线 首先看看其实如何确定是哪张地图的 数据库首先只保存一个mapid 在share初始化的时候已经初始化了所有map,并保存了map的指针信息,其key就是mapid if(rActorEx.GetMapID() <= 0) rActorEx.SetMapID(1009); int mapID = rActorEx.GetMapID(); rActorEx.m_nBodyID = m_pShare->TGetnBodyId(rActorEx.G

9.并发包非阻塞队列ConcurrentLinkedQueue

jdk1.7.0_79  队列是一种非常常用的数据结构,一进一出,先进先出. 在Java并发包中提供了两种类型的队列,非阻塞队列与阻塞队列,当然它们都是线程安全的,无需担心在多线程并发环境所带来的不可预知的问题.为什么会有非阻塞和阻塞之分呢?这里的非阻塞与阻塞在于有界与否,也就是在初始化时有没有给它一个默认的容量大小,对于阻塞有界队列来讲,如果队列满了的话,则任何线程都会阻塞不能进行入队操作,反之队列为空的话,则任何线程都不能进行出队操作.而对于非阻塞无界队列来讲则不会出现队列满或者队列空的情况

Linux服务器大量向外发包问题排查

最近Linux redhat 6.5 APP 业务系统,向外大量发送流量,不断建立tcp连接,目标地址是美国的一个IP,估计被当成肉鸡了,比较悲惨,直接飞向IDC机房,防火墙显示这个APP服务器tcp连接很多每秒10W个, 从服务器上使用命令sar -n DEV 2 10 ,确实出现大量发包的问题,(下边是正常的,异常的情况eth0txpck/s 10000左右了) 先进行限速或者拔掉网线: 开始之前,先要清除 eth0所有队列规则 tc qdisc del dev eth0 root 2> /

Java并发包源码分析

并发是一种能并行运行多个程序或并行运行一个程序中多个部分的能力.如果程序中一个耗时的任务能以异步或并行的方式运行,那么整个程序的吞吐量和可交互性将大大改善.现代的PC都有多个CPU或一个CPU中有多个核,是否能合理运用多核的能力将成为一个大规模应用程序的关键. Java基础部分知识总结点击Java并发基础总结.Java多线程相关类的实现都在Java的并发包concurrent,concurrent包主要包含3部分内容,第一个是atomic包,里面主要是一些原子类,比如AtomicInteger.

Web Share API的解释(译)

原文地址:https://github.com/WICG/web-share/blob/master/docs/explainer.md  Web Share是一个提议阶段的Web API,用于将网站的数据(文本.URL或图片等)分享到任意的目标应用,比如系统服务.本地APP或其它网站.开发者可以创建一个通用的分享按钮,当用户点击时就可以触发一次系统分享的会话. Web Share所属的投石机项目(Ballista project)是Chromium的子项目,该项目致力于打通网站与网站.网站与本

JDK5线程并发包使用整理

JDK5线程并发包 1)AtomicInteger 使用原子方式更新int值 2)创建线程池 a)创建固定大小的线程池 ExecutorService threadPool = Executors.newFixedThreadPool(10);//创建一个有10个线程的线程池 b)创建缓存线程池 Executors.newCachedThreadPool(); 创建一个可根据需要创建新线程的线程池,可自动调整线程的多少 c)创建单线程的线程池 Executors.newSingleThreadE

Can you share some Scala List class examples?

Scala List FAQ: Can you share some Scala List class examples? The Scala List class may be the most commonly used data structure in Scala applications. Therefore, it's very helpful to know how create lists, merge lists, select items from lists, operat

Java集合及concurrent并发包总结

1.集合包 集合包最常用的有Collection和Map两个接口的实现类,Colleciton用于存放多个单对象,Map用于存放Key-Value形式的键值对. Collection中最常用的又分为两种类型的接口:List和Set,两者最明显的差别为List支持放入重复的元素,而Set不支持. List最常用的实现类有:ArrayList.LinkedList.Vector及Stack:Set接口常用的实现类有:HashSet.TreeSet. 1.1 ArrayList ArrayList基于

Share data between VSTO and Excel DNA App domains

Is there a way to share data between a VSTO add in and an Excel DNA add in? Or can the Excel DNA add in be loaded into the VSTO's app domain? The Excel-DNA add-in will always be in a separate AppDomain. You might try to pass an object via the AddIn's