private static void Buffer_AskFrame(AskFrame askFrame)
 {
     // p_AllMsg.AskFrame.frame = askFrame.frames;
     p_AllMsg.AskFrame.type = askFrame.type;
     foreach (int val in askFrame.frames)
     {
         p_AllMsg.AskFrame.frame.Add(val);
     }
 }
    public static byte[] Serialize(BaseProtocol baseProtocol, NetworkMsg networkMsg,
                                   StartGame startGame = null, Frame frame = null, SyncFrame syncFrame = null, AskFrame askFrame = null
                                   )//在这可以继续添加要发送的Msg
    {
        p_AllMsg = new p_AllMsg();
        if (baseProtocol != null)
        {
            Buffer_BaseProtocol(baseProtocol);
        }
        if (networkMsg != null)
        {
            Buffer_NetworkMsg(networkMsg);
        }

        if (networkMsg.type == (int)CmdType.START)
        {
            startGame = networkMsg as StartGame;
            Buffer_StartGame(startGame);
        }
        if (networkMsg.type == (int)CmdType.FRAME)
        {
            frame = networkMsg as Frame;
            Buffer_Frame(frame);
        }

        if (networkMsg.type == (int)CmdType.SYNC_FRAME)
        {
            Buffer_SyncFrame(syncFrame);
        }
        if (networkMsg.type == (int)CmdType.ASKFRAME)
        {
            askFrame = networkMsg as AskFrame;
            Buffer_AskFrame(askFrame);
        }
        return(Serialize <p_AllMsg>(p_AllMsg));
    }
Exemple #3
0
    public void LogicTick()
    {
        if (!bstart)
        {
            return;
        }
        //DebugTool.TimeWactherStart(1);

        if (currentPlayer != null && !bSYN)
        {
            areaManager.find_nearby_areas(areaManager.nearby_areas, currentPlayer.get_area_id());
        }
        else
        {
            areaManager.nearby_areas.Clear();
            areaManager.areas.ForEach(i => areaManager.nearby_areas.Add(i));
        }


        List <int> Tareas = new List <int>();
        List <int> Tframs = new List <int>();

        foreach (Area area in areaManager.nearby_areas)
        {
            // if (!area_exist(area, lagged_areas))
            {
                area.Tick();
                Tareas.Add(area.get_area_id());
                Tframs.Add(area.CurrentFrame);
            }
        }
        // Console.WriteLine("AskFrame " + areaManager.nearby_areas[0].CurrentFrame );
        currentPlayer = null;

        for (int n = 0; n < areaManager.areas.Count; ++n)
        {
            Area TArea = areaManager.areas[n];

            if (TArea != null)
            {
                Console.WriteLine("TArea.logic_mgr.player_list.Count " + TArea.logic_mgr.player_list.Count + "\n");

                for (int i = 0; i < TArea.logic_mgr.player_list.Count; ++i)
                {
                    Player TPlayer = TArea.logic_mgr.player_list[i];
                    if (TPlayer.get_id() == player_id)
                    {
                        if (currentPlayer == null)
                        {
                            currentPlayer = TPlayer;
                        }
                        else
                        {
                            Console.WriteLine("Player " + player_id + " areaid " + currentPlayer.get_area_id() + " in other areas " + TArea.get_area_id());
                        }
                    }

                    if (TPlayer.get_area_id() != TArea.get_area_id())
                    {
                        Console.WriteLine("Player id " + player_id + "!= areaid " + TArea.get_area_id());
                    }
                }
            }
        }

        if (bRecordFrame)
        {
            if (currentPlayer != null)
            {
                AreaCheck(currentPlayer);//跨区检测
                ticktimes++;
                if (ticktimes > 5)
                {
                    SyncFrame  localFrame = LocalFrameRecord(currentPlayer);
                    NetworkMsg msg        = new Frame(player_id, localFrame);
                    sendBuffer.Enqueue(msg);
                    ticktimes = 0;
                }
            }
            else
            {
                Console.WriteLine(" currentPlayer " + player_id + " is not in any areas ");
            }

            AskFrame TAskFrame = new AskFrame(player_id, Tareas, Tframs);
            sendBuffer.Enqueue(TAskFrame);

            bRecordFrame = false;
        }


        // DebugTool.TimeWactherEnd(1,msg: "currentID"+player_id.ToString());
        //DebugTool.PrintAvgWhileTime(1, msg: player_id.ToString());
    }