void Step(ServerFrame frame, bool isNeedGenSnap = true)
        {
            //Debug.Log("Step: " + _world.Tick + " TargetTick: " + TargetTick);
            _commonStateService.SetTick(_world.Tick);
            var hash = _hashHelper.CalcHash();

            _commonStateService.Hash = hash;
            _timeMachineService.Backup(_world.Tick);
            _hashHelper.SetHash(_world.Tick, hash);
            DumpFrame(hash);
            ProcessInputQueue(frame);
            _world.Step(isNeedGenSnap);
            _dumpHelper.OnFrameEnd();
            var tick = _world.Tick;

            _cmdBuffer.SetClientTick(tick);
            //clean useless snapshot
            if (isNeedGenSnap && tick % snapshotFrameInterval == 0)
            {
                CleanUselessSnapshot(System.Math.Min(_cmdBuffer.NextTickToCheck - 1, _world.Tick));
            }
        }