void CheckCurrentSingleComponentLogic(DebugMsg msg, ComponentInfo info)
    {
        SingletonComponent sc = m_world.GetSingletonComp(info.m_compName);

        if (info.m_compName == "MapGridStateComponent")
        {
            MapGridStateComponent lmsc = (MapGridStateComponent)sc;

            MapGridStateComponent msc = des.Deserialize <MapGridStateComponent>(info.content);

            if (!JudgeDict(msc.globalRandomCellHaveItemList, lmsc.globalRandomCellHaveItemList))
            {
                string content = Serializer.Serialize(sc);
                string log     = "error: frame" + msg.frame + " currentFrame:" + m_world.FrameCount + " singleComp:" + info.m_compName + "\n remote:" + info.content + "\n local:" + content + "\n";
                Debug.LogWarning(log);

                OutPutDebugRecord();
            }
        }
        else
        {
            string content = Serializer.Serialize(sc);

            if (!content.Equals(info.content))
            {
                RecordSystemBase rsb = m_world.GetRecordSystemBase(info.m_compName);
                string           log = "error: frame" + msg.frame + " currentFrame:" + m_world.FrameCount + " singleComp:" + info.m_compName + "\n remote:" + info.content + "\n local:" + content + "\n";
                Debug.LogWarning(log);
                rsb.PrintRecord(0);

                Time.timeScale = 0;
                OutPutDebugRecord();
            }
            else
            {
                //Debug.Log("singleComp correct ! frame " + msg.frame + " m_world:" + m_world.FrameCount + "\ncontent " + info.content);
            }
        }
    }
Example #2
0
    public override void EndFrame(int deltaTime)
    {
        if (!isDebug)
        {
            return;
        }

        DebugMsg msg = new DebugMsg();

        msg.frame          = m_world.FrameCount;
        msg.seed           = m_world.m_RandomSeed;
        msg.infos          = new List <EntityInfo>();
        msg.singleCompInfo = new List <ComponentInfo>();

        for (int i = 0; i < m_world.m_entityList.Count; i++)
        {
            msgCache.Append(m_world.m_entityList[i].ID + "\n");
        }

        msg.msg = msgCache.ToString();

        msgCache.Clear();

        for (int i = 0; i < m_world.m_entityList.Count; i++)
        {
            EntityBase eb = m_world.m_entityList[i];

            bool isFilter = false;
            if (isPlayerOnly &&
                !eb.GetExistComp(ComponentType.ConnectionComponent))
            {
                isFilter = true;
            }

            if (isFlyObject &&
                !eb.GetExistComp(ComponentType.FlyObjectComponent))
            {
                isFilter = true;
            }

            if (isFilter)
            {
                continue;
            }

            EntityInfo einfo = new EntityInfo();
            einfo.id = eb.ID;

            einfo.infos = new List <ComponentInfo>();

            foreach (var item in eb.comps)
            {
                if (item == null)
                {
                    continue;
                }

                if (item.GetType().IsSubclassOf(typeof(PlayerCommandBase)))
                {
                    CommandComponent cc   = (CommandComponent)item;
                    ComponentInfo    info = new ComponentInfo();
                    cc.time         = 0;
                    cc.id           = eb.ID;
                    cc.frame        = m_world.FrameCount;
                    info.m_compName = item.GetType().Name;
                    info.content    = Serializer.Serialize(item);

                    einfo.infos.Add(info);
                }
                else if (IsFilter(item.GetType().Name))
                {
                    ComponentInfo info = new ComponentInfo();
                    info.m_compName = item.GetType().Name;
                    info.content    = Serializer.Serialize(item);

                    einfo.infos.Add(info);
                }
            }

            if (einfo.infos.Count > 0)
            {
                msg.infos.Add(einfo);
            }
        }

        for (int i = 0; i < SingleCompFilter.Length; i++)
        {
            SingletonComponent sc   = m_world.GetSingletonComp(SingleCompFilter[i]);
            ComponentInfo      info = new ComponentInfo();

            info.m_compName = SingleCompFilter[i];
            info.content    = Serializer.Serialize(sc);

            if (info.m_compName == "MapGridStateComponent")
            {
                MapGridStateComponent lmsc = (MapGridStateComponent)sc;
                MapGridStateComponent msc  = des.Deserialize <MapGridStateComponent>(info.content);

                if (!JudgeDict(msc.globalRandomCellHaveItemList, lmsc.globalRandomCellHaveItemList))
                {
                    Debug.Log("验证错误" + m_world.FrameCount);
                }
                else
                {
                    Debug.Log("验证通过 " + m_world.FrameCount);
                }
            }

            msg.singleCompInfo.Add(info);
        }

        List <EntityBase> list = GetEntityList();

        for (int i = 0; i < list.Count; i++)
        {
            ConnectionComponent cc = list[i].GetComp <ConnectionComponent>();
            ProtocolAnalysisService.SendMsg(cc.m_session, msg);
        }
    }