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); } } }
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(); }
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); }
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); }
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); }
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"); }
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(); }
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); }
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(); } } }
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); }
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 { } } }
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); } }
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; } }
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); }
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); }
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); } }
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); }
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)); }
public void received_sync_frame(int areaid, SyncFrame syncFrame) { Area area = get_area_by_id(areaid); area.record_frame(syncFrame); }
public Frame(int player_id, SyncFrame syncFrame) { this.player_id = player_id; this.syncFrame = syncFrame; this.type = (int)CmdType.FRAME; }
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); //} }
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()); }