private void DumpGameFrames() { var msg = new MultiFrames(); int count = System.Math.Min((Tick - 1), _allHistoryFrames.Count); if (count <= 0) { return; } var frames = new ServerFrame[count]; for (int i = 0; i < count; i++) { frames[i] = _allHistoryFrames[i]; Logger.Debug.Assert(frames[i] != null, "!!!!!!!!!!!!!!!!!"); } msg.StartTick = frames[0].tick; msg.frames = frames; var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../Record/" + System.DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + GameType + "_" + GameId + ".record"); var dir = Path.GetDirectoryName(path); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } Log("Create Record " + path); //File.WriteAllBytes(path, bytes); }
private bool _CheckBorderServerFrame(bool isForce = false) { if (State != EGameState.Playing) { return(false); } var frame = GetOrCreateFrame(Tick); var inputs = frame.Inputs; if (!isForce) { //是否所有的输入 都已经等到 for (int i = 0; i < inputs.Length; i++) { if (inputs[i] == null) { return(false); } } } //将所有未到的包 给予默认的输入 for (int i = 0; i < inputs.Length; i++) { if (inputs[i] == null) { inputs[i] = new Msg_PlayerInput(Tick, (byte)i) { IsMiss = true }; } } //Debug.Log($" Border input {Tick} isUpdate:{isForce} _tickSinceGameStart:{_tickSinceGameStart}"); var msg = new MultiFrames(); int count = Tick < 2 ? Tick + 1 : 3; var frames = new ServerFrame[count]; for (int i = 0; i < count; i++) { frames[count - i - 1] = _allHistoryFrames[Tick - i]; } msg.StartTick = frames[0].tick; msg.frames = frames; // FIXME: set response, message should with ServerFrames or PlayerGameInputs borderMessageO.Notify(new BorderMessageModel() { GameId = this.GameId, Message = new MStepRes() { MsgType = EResType.StepResponse, Frames = msg.TransformToMMultiFrames() } }); if (_firstFrameTimeStamp <= 0) { _firstFrameTimeStamp = _timeSinceLoaded; } if (_gameStartTimestampMs < 0) { _gameStartTimestampMs = LTime.realtimeSinceStartupMS + _configuration.GetValue <int>("frame_interval", 100) * _ServerTickDealy; } Tick++; return(true); }