Example #1
0
        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);
        }
Example #2
0
        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);
        }