예제 #1
0
    public static void Buffer_ReplyAskFrame(ReplyAskFrame replyAskFrame)
    {
        p_AllMsg.ReplyAskFrame.type = replyAskFrame.type;

        p_AllMsg.ReplyAskFrame.replyFrames = new Dictionary <int, List <p_AllMsg.p_Frame> >();
        foreach (KeyValuePair <int, List <Frame> > replyframe in replyAskFrame.replyFrames)
        {
            int frame_count = replyframe.Key;

            if (!p_AllMsg.ReplyAskFrame.replyFrames.ContainsKey(frame_count))
            {
                List <p_AllMsg.p_Frame> p_frame_list = new List <p_AllMsg.p_Frame>();

                foreach (Frame frame in replyframe.Value)
                {
                    SyncFrame syncFrame = frame.syncFrame;
                    List <p_AllMsg.p_CustomSyncMsg> p_msg_list = Buffer_SyncFrame_msg_list(syncFrame.msg_list);

                    p_AllMsg.p_SyncFrame p_syncFrame = new p_AllMsg.p_SyncFrame();
                    p_syncFrame.frame_count = syncFrame.frame_count;
                    p_syncFrame.msg_list    = p_msg_list;


                    p_AllMsg.p_Frame p_frame = new p_AllMsg.p_Frame();
                    p_frame.player_id = frame.player_id;

                    p_frame.syncFrame = new p_AllMsg.p_SyncFrame();
                    p_frame.syncFrame = p_syncFrame;

                    p_frame_list.Add(p_frame);
                }
                p_AllMsg.ReplyAskFrame.replyFrames.Add(frame_count, p_frame_list);
            }
        }
    }
예제 #2
0
        protected IEnumerator ExperimentStopSequence()
        {
            // sync several frames to make sure Command and all connected Environment have been set to the same stop frame.
            var n = 4 + QualitySettings.maxQueuedFrames;

            for (var i = 0; i < n; i++)
            {
                SyncFrame?.Invoke();
                yield return(null);

                while (issyncingframe)
                {
                    yield return(null);
                }
            }
            // wait until the synced same stop frame have been presented on display.
            var dur = n * ex.Display_ID.DisplayLatencyPlusResponseTime(Config.Display) ?? Config.NotifyLatency;

            yield return(new WaitForSecondsRealtime((float)dur / 1000f));

            StopExperimentTimeSync();
            // wait for all timelines have been synced and stopped.
            yield return(new WaitForSecondsRealtime(Config.NotifyLatency / 1000f));

            OnExperimentStopped();
            OnEndStopExperiment?.Invoke();
        }
예제 #3
0
        public int ReceiveFSP(out List <SyncFrame> listFrames)
        {
            if (m_IsRunning)
            {
                listFrames = m_FSPCodec.ReadFromRecvQueue();
                if (listFrames != null)
                {
                    if (FSPDebuger.EnableLog)
                    {
                        for (int i = 0; i < listFrames.Count; i++)
                        {
                            SyncFrame frame = listFrames[i];
                            if (frame != null)
                            {
                                Debuger.Log(LOG_TAG_MAIN, "ReceiveFSP() [" + i + "]Frame = " + frame.ToString());
                            }
                            else
                            {
                                Debuger.LogError(LOG_TAG_MAIN, "ReceiveFSP() [" + i + "]Frame = null, Maybe MultiThread Problem!");
                            }
                        }
                    }

                    return(listFrames.Count);
                }
            }
            listFrames = null;
            return(0);
        }
예제 #4
0
        private void HandleCustomMessage(NetBuffer buffer)
        {
            Debuger.Log(LOG_TAG_RECV, "HandleCustomMessage()");

            m_ListCustomCmd_InSend.Clear();

            buffer.Position = 0;
            buffer.Skip(4);
            List <SyncFrame> listFrame = FSPCodec.ReadFrameListFromBufferS2C(buffer);

            for (int i = 0; i < listFrame.Count; i++)
            {
                SyncFrame frame = listFrame[i];
                for (int j = 0; j < frame.cmdList.Count; j++)
                {
                    SyncCmd cmd = frame.cmdList[j];
                    HandleCustomCmd(cmd);
                }
            }

            m_CustomSendBuffer.Clear();
            m_CustomSendBuffer.WriteUShort(0);
            m_CustomSendBuffer.WriteUShort(0);
            m_CustomSendBuffer.WriteUShort(m_SessionId);
            FSPCodec.WriteCmdListToBufferC2S(m_ListCustomCmd_InSend, m_CustomSendBuffer);
            SendBuffer(m_CustomSendBuffer, false);
        }
예제 #5
0
    Dictionary <int, List <SyncFrame> > extract_replyFrames(Dictionary <int, List <p_AllMsg.p_Frame> > p_replyFrames)
    {
        Dictionary <int, List <SyncFrame> > replyFrames = new Dictionary <int, List <SyncFrame> >();


        foreach (KeyValuePair <int, List <p_AllMsg.p_Frame> > dpframe in p_replyFrames)
        {
            int frame_count = dpframe.Key;
            List <p_AllMsg.p_Frame> pframe_list = dpframe.Value;

            List <SyncFrame> syncFrames_list = new List <SyncFrame>();

            foreach (p_AllMsg.p_Frame pframe in pframe_list)
            {
                // p_AllMsg.p_SyncFrame psyncFrame = pframe.syncFrame;
                List <p_AllMsg.p_CustomSyncMsg> p_msg_list = pframe.syncFrame.msg_list;
                List <CustomSyncMsg>            msg_list   = extract_msg(p_msg_list);

                SyncFrame syncFrame = new SyncFrame(frame_count);
                syncFrame.frame_count = pframe.syncFrame.frame_count;
                syncFrame.msg_list    = msg_list;
                syncFrames_list.Add(syncFrame);
            }

            replyFrames.Add(frame_count, syncFrames_list);
        }

        return(replyFrames);
    }
예제 #6
0
    public void record_frame(SyncFrame syncFrame)
    {
        if (area_id == syncFrame.area_id)
        {
            if (TotallFrames.Count == 0)
            {
                TotallFrames.Add(syncFrame);
                CurrentFrame = syncFrame.frame_index;
            }
            else
            {
                if (syncFrame.frame_index >= TotallFrames[TotallFrames.Count - 1].frame_index)
                {
                    TotallFrames.Add(syncFrame);
                    CurrentFrame = syncFrame.frame_index;
                }
                else
                {
                    Console.Write("record_frame " + syncFrame.frame_index + " CurrentMaxFrame " + CurrentFrame + "\n");
                }
            }
        }
        else
        {
            Console.Write("area_uid != syncFrame.area_id  area_uid " + area_id + " syncFrame.area_id " + syncFrame.area_id + "\n");
        }

        Console.Write("area_id " + area_id + " record_frame " + syncFrame.frame_index + " CurrentMaxFrame " + CurrentFrame + "\n");
    }
예제 #7
0
    public void RecordFrames(byte[] buffers)
    {
        //var buffers = Snappy.Sharp.SnappyDecompressor.Decompress(Tbuffers,0, Tbuffers.Length);

        var ms = new MemoryStream(buffers);
        var br = new BinaryReader(ms);

        int nAreaCount = br.ReadChar();

        for (int nLoop = 0; nLoop < nAreaCount; nLoop++)
        {
            int nAreaid         = br.ReadChar();
            int nSyncFrameCount = br.ReadInt16();
            for (int i = 0; i < nSyncFrameCount; i++)
            {
                int       nFrameIndex    = br.ReadInt16();
                int       nFrameMsgCount = br.ReadChar();
                SyncFrame cur            = new SyncFrame(nFrameIndex, nAreaid);

                for (int msgLoop = 0; msgLoop < nFrameMsgCount; msgLoop++)
                {
                    var tt = DSerializeData(ms, br);
                    if (tt != null)
                    {
                        cur.msg_list.Add(tt);
                    }
                }

                areaManager.received_sync_frame(nAreaid, cur);
            }
        }

        br.Close();
        ms.Close();
    }
예제 #8
0
    SyncFrame LocalFrameRecord(Player TPlayer)
    {
        var moving = ControlDirecton(TPlayer);

        var rotation = RotMove();

        var syncFrame = new SyncFrame(0, TPlayer.get_area_id());

        //var InputSyncMsg = new InputMessage(player_id, moving); //TODO :改为发送位置!

        // syncFrame.dump_actions(InputSyncMsg);

        //         var RotateSyncMsg = new RotateMessage(player_id, rotation);
        //         syncFrame.dump_actions(RotateSyncMsg);
        TPlayer.move(moving);//本地move,获取新的位置

        sysTime++;
        if (sysTime > 3)
        {
            var thePos = TPlayer.get_position();

            var Tmsg = new PositionMessage(player_id, new Vector2(thePos.x, thePos.z));
            Console.Write("LocalFrameRecord posioin" + thePos.x, "," + thePos.z);
            syncFrame.dump_actions(Tmsg);
            sysTime = 0;
        }


        if (bSYN)
        {
            Dictionary <int, Vector2> TPlayers = new Dictionary <int, Vector2>();

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

                for (int np = 0; np < TArea.logic_mgr.player_list.Count; ++np)
                {
                    var Tlogic_mgr = TArea.logic_mgr.player_list[np];

                    if (!TPlayers.ContainsKey(Tlogic_mgr.get_id()))
                    {
                        TPlayers[Tlogic_mgr.get_id()] = new Vector2(Tlogic_mgr.position.x, Tlogic_mgr.position.z);
                    }
                    else
                    {
                    }
                }
            }

            var Tms = new SYNMessage(player_id, TPlayers);

            syncFrame.dump_actions(Tms);
        }



        return(syncFrame);
    }
예제 #9
0
 void PrintFrameInfo(SyncFrame syncFrame)
 {
     if (syncFrame.msg_list != null)
     {
         foreach (CustomSyncMsg msg in syncFrame.msg_list)
         {
             Console.WriteLine("the msg is :" + ((RequestType)msg.msg_type).ToString());
             msg.printInfo();
         }
     }
 }
예제 #10
0
    public void AddEmptyFrames()
    {
        List <Frame> frames_list = new List <Frame>();

        foreach (Player player in players)
        {
            SyncFrame syncFrame = new SyncFrame(TotalFrames.Count, 0);//area id 先设为0
            Frame     frame     = new Frame(player.getConnectionID(), syncFrame);
            frames_list.Add(frame);
        }
        TotalFrames.Add(frames_list);
    }
예제 #11
0
    void AreaCheck(Player TPlayer)
    {
        //Console.WriteLine("in gameID: " + gameID + "curplayer pos is: " + currentPlayer.get_position());
        if (switchingArea)
        {
            if (TPlayer.get_area_id() == targetAreaID)
            {
                switchingArea = false;
            }
        }
        else
        {
            int newAreaID = areaManager.get_id_by_pos(TPlayer.get_position());

            int currentAreaID = TPlayer.get_area_id();

            if (newAreaID != currentAreaID)
            {
                //  Console.WriteLine("area switch, newAreaID != currentAreaID: newAreaID " + newAreaID + " currentAreaID " + currentAreaID);
                if (newAreaID >= areaLength)
                {
                    return;
                }
                switchingArea = true;

                var customSyncMsg = new LeaveAreaMessage(currentPlayer.get_id());
                var syncFrame     = new SyncFrame(0, currentAreaID);
                syncFrame.dump_actions(customSyncMsg);

                NetworkMsg networkMsg = new Frame(0, syncFrame);
                sendBuffer.Enqueue(networkMsg);

                targetAreaID = newAreaID;

                //Debug.Log ("area changed!");

                var EnterAreaSyncMsg = new EnterAreaMessage(currentPlayer.get_id(),
                                                            100,
                                                            currentPlayer.get_axis(),
                                                            currentPlayer.get_direction(),
                                                            currentPlayer.get_position());

                syncFrame = new SyncFrame(0, newAreaID);
                syncFrame.dump_actions(EnterAreaSyncMsg);

                networkMsg = new Frame(0, syncFrame);
                sendBuffer.Enqueue(networkMsg);
            }
            else
            {
            }
        }
    }
예제 #12
0
 public void RecordCustomSyncMsg(List <CustomSyncMsg> customSyncMsgs)
 {
     if (TotallFrames.Count > 0)
     {
         SyncFrame CurrentSyncFrame = TotallFrames[TotallFrames.Count - 1];
         CurrentSyncFrame.conbine_msg(customSyncMsgs);
     }
     else
     {
         UnityEngine.Debug.Log("RecordCustomSyncMsg  TotallFrames count" + 0);
     }
 }
예제 #13
0
 public static void Buffer_SyncFrame(SyncFrame syncFrame)
 {
     p_AllMsg.SyncFrameMsg.frame_count = syncFrame.get_frame_count();
     if (syncFrame.msg_list != null)
     {
         p_AllMsg.SyncFrameMsg.msg_list = Buffer_SyncFrame_msg_list(syncFrame.get_msg());
     }
     else
     {
         p_AllMsg.SyncFrameMsg.msg_list = null;
     }
 }
예제 #14
0
    public static List <DS_protocol.p_IdToFrames> DSerializeData(byte[] buffers)
    {
        var ms = new MemoryStream(buffers);
        var br = new BinaryReader(ms);

        List <DS_protocol.p_IdToFrames> idtofreames = new List <DS_protocol.p_IdToFrames>();

        int nAreaCount = br.ReadChar();

        for (int nLoop = 0; nLoop < nAreaCount; nLoop++)
        {
            DS_protocol.p_IdToFrames TIdToFrame = new DS_protocol.p_IdToFrames();


            TIdToFrame.areaid = br.ReadChar();
            int nSyncFrameCount = br.ReadInt16();

            int nStartIndex = 0;
            for (int i = 0; i < nSyncFrameCount; i++)
            {
                DS_protocol.p_SyncFrame TFrame = new DS_protocol.p_SyncFrame();
                //TFrame.frame_count = br.ReadInt16();

                if (i == 0)
                {
                    nStartIndex = br.ReadInt16();
                }
                int nFrameMsgCount = br.ReadChar();
                TFrame.frame_count = nStartIndex++;
                SyncFrame cur = new SyncFrame(TFrame.frame_count, TIdToFrame.areaid);

                for (int msgLoop = 0; msgLoop < nFrameMsgCount; msgLoop++)
                {
                    var tt = DSerializeData(ms, br);
                    if (tt != null)
                    {
                        cur.msg_list.Add(tt);
                    }
                }

                Serialization.Buffer_SyncFrame_msg_list(cur.msg_list, TFrame.msg_list);
                TIdToFrame.frames.Add(TFrame);
            }

            idtofreames.Add(TIdToFrame);
        }

        br.Close();
        ms.Close();

        return(idtofreames);
    }
예제 #15
0
    public void get_local_input_send()//把所有这一帧的输入收集起来并发送给server
    {
        maxSend_FrameCount++;
        SyncFrame syncFrame = new SyncFrame(maxSend_FrameCount);//发送第maxSend_FrameCount帧

        syncFrame.msg_list = viewPlayer.get_local_input();

        Tool.printMsgList(" 还可以发送" + max_sendingNum + "帧" + " , localInput + 正在发送 framecount = " + syncFrame.frame_count, syncFrame.msg_list);



        NetworkMsg frame_msg = new Frame(connectID, syncFrame);//给server 发送第0帧

        //networkMgr 发送
        networkManager.SendData(frame_msg);
    }
예제 #16
0
    public void OnTick(int frame)
    {
        //Players.Clear();

        this.FrameIndex = frame;

        SyncFrame syncFrame = new SyncFrame(frame, this.AreaID);

        TotallFrames.Add(syncFrame);

        if (TotallFrames.Count == frame + 1)
        {
        }
        else
        {
            UnityEngine.Debug.Log("tick error frame " + frame + " TotallFrames Count " + TotallFrames.Count);
        }
    }
예제 #17
0
 void RecordFrames(List <DS_protocol.p_IdToFrames> areas_to_frames)
 {
     bRecordFrame = true;
     for (int nLoop = 0; nLoop < areas_to_frames.Count; ++nLoop)
     {
         DS_protocol.p_IdToFrames       area_to_Frames = areas_to_frames[nLoop];
         List <DS_protocol.p_SyncFrame> framesInfo     = area_to_Frames.frames;
         if (framesInfo != null && framesInfo.Count > 0)
         {
             // Console.WriteLine(" recieve areaID " + area_to_Frames.areaid + " Frame start - to " + framesInfo[0].frame_count +"~" + framesInfo[framesInfo.Count-1].frame_count); //单位毫秒
             foreach (DS_protocol.p_SyncFrame p_syncFrame in framesInfo)
             {
                 int       frame_count = p_syncFrame.frame_count;
                 SyncFrame syncFrame   = new SyncFrame(frame_count, area_to_Frames.areaid);
                 syncFrame.msg_list = NetCommon.extract_msg(p_syncFrame.msg_list);
                 areaManager.received_sync_frame(area_to_Frames.areaid, syncFrame);
             }
         }
     }
 }
    public void excute_frame(SyncFrame syncFrame)
    {
        if (syncFrame == null)
        {
            return;
        }
        List <CustomSyncMsg> msg_list = syncFrame.get_msg();

        if (msg_list == null || msg_list.Count == 0)
        {
            return;
        }
        else
        {
            foreach (CustomSyncMsg msg in msg_list)
            {
                handle_msg(msg);
            }
        }
    }
    public static byte[] SerializeDatareplyAskFrame(ReplyAskFrame replyAskFrame)
    {
        var ms = new MemoryStream();
        var br = new BinaryWriter(ms);

        var areas = replyAskFrame.areas;

        br.Write((char)areas.Count);
        for (int nLoop = 0; nLoop < areas.Count; nLoop++)
        {
            br.Write((char)areas[nLoop]);
            List <SyncFrame> list = replyAskFrame.frames[nLoop];
            br.Write((short)list.Count);
            for (int i = 0; i < list.Count; i++)
            {
                SyncFrame cur = list[i];

                if (i == 0)
                {
                    br.Write((short)cur.frame_count);
                }

                br.Write((char)cur.msg_list.Count);

                for (int msgLoop = 0; msgLoop < cur.msg_list.Count; msgLoop++)
                {
                    SerializeData(br, cur.msg_list[msgLoop]);
                }
            }
        }

        var t = ms.ToArray();

        br.Close();
        ms.Close();
        return(t);
    }
예제 #20
0
    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));
    }
예제 #21
0
    public void received_sync_frame(int areaid, SyncFrame syncFrame)
    {
        Area area = get_area_by_id(areaid);

        area.record_frame(syncFrame);
    }
예제 #22
0
 public Frame(int player_id, SyncFrame syncFrame)
 {
     this.player_id = player_id;
     this.syncFrame = syncFrame;
     this.type      = (int)CmdType.FRAME;
 }
예제 #23
0
    public static void HandleData(int clientID, p_AllMsg p_allmsg)
    {
        //p_AllMsg ReceiveMsg = new p_AllMsg();
        int msg_type = p_allmsg.NetworkMsg.type;
        int seq      = p_allmsg.BaseProtocol.seq;

        //gameServer.hanldeSeq(client_id, seq);

        //Console.WriteLine("get client: " + client_id + "seq pkg : " + seq);
        if (msg_type == (int)CmdType.START)
        {
            Debug.Log("get start info\n");
            gameServer.OnGameStart(clientID);
        }
        else if (msg_type == (int)CmdType.FRAME)
        {
            Debug.Log("get frame info " + clientID.ToString() + "\n");
            int frame_count = p_allmsg.Frame.syncFrame.frame_count;
            int player_id   = p_allmsg.Frame.player_id;
            List <CustomSyncMsg> msg_list  = extract_msg(p_allmsg.Frame.syncFrame.msg_list);
            SyncFrame            syncFrame = new SyncFrame(frame_count, 0);
            syncFrame.msg_list = msg_list;

            Frame frame = new Frame(player_id, syncFrame);
            gameServer.OnGetFrame(frame, clientID);
        }

        else if (msg_type == (int)CmdType.ASKFRAME)
        {
            Debug.Log("get askframe info from" + clientID.ToString() + "\n");
            List <int> frames = new List <int>();
            foreach (int val in p_allmsg.AskFrame.frame)
            {
                frames.Add(val);
            }
            gameServer.OnAskFrame(frames, clientID);
        }
        else if (msg_type == (int)CmdType.JOIN)
        {
            Debug.Log("get join info, it is from :" + clientID);
            gameServer.OnPlayerJoin(clientID);
        }
        //else if (msg_type == (int)CmdType.ASKCHASEFRAME)
        //{
        //    //Console.WriteLine("get asked chase frame request");
        //    List<int> areas_id = p_allmsg.AskChaseFranme.areas_id;
        //    Dictionary<int, List<int>> areas_to_frame = p_allmsg.AskChaseFranme.area_to_frame;
        //    int player_Id = p_allmsg.AskChaseFranme.player_id;
        //    if (player_Id == -1)
        //    {
        //        areas_id = null;
        //        areas_to_frame = null;
        //    }
        //    //List<int> miss_frame = allMsg.AskFrame.frame_list;
        //    //int area_id = allMsg.AskFrame.area_id;
        //    gameServer.OnAskedChaseFrame(clientID, areas_id, areas_to_frame);
        //}
        //else if (msg_type == (int)CmdType.END)
        //{
        //    //Console.WriteLine("get End");
        //    gameServer.OnGetEnd(clientID);
        //}
    }
예제 #24
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());
    }