Beispiel #1
0
        protected void S2D_ReqCreateUser(IIncommingMessage reader)
        {
            var msg = reader.Parse <Msg_CreateAccount>();

            _authDb.GetAccount(msg.account, (dbData) => {
                if (dbData == null)
                {
                    var newInfo              = _authDb.CreateAccountObject();
                    newInfo.Username         = msg.account;
                    newInfo.Password         = msg.password;
                    newInfo.Email            = "null" + LRandom.Next();
                    newInfo.Token            = "aaa";
                    newInfo.IsAdmin          = true;
                    newInfo.IsGuest          = false;
                    newInfo.IsEmailConfirmed = false;
                    _authDb.InsertNewAccount(newInfo
                                             , (userId) => {
                        reader.Respond(EMsgDS.D2S_RepCreateUser, new Msg_RepCreateResult()
                        {
                            result = 0, userId = userId
                        });
                    });
                }
                else
                {
                    reader.Respond(EMsgDS.D2S_RepCreateUser,
                                   new Msg_RepCreateResult()
                    {
                        result = 1
                    });
                }
            });
        }
Beispiel #2
0
        public void DoStart(IGameServer server, int gameId, int gameType, int mapId, GamePlayerInfo[] playerInfos,
                            string gameHash)
        {
            State               = EGameState.Loading;
            _gameServer         = server;
            Seed                = LRandom.Range(1, 100000);
            Tick                = 0;
            timeSinceLoaded     = 0;
            firstFrameTimeStamp = 0;
            RegisterMsgHandlers();
            Debug = new DebugInstance("Room" + GameId + ": ");
            var count = playerInfos.Length;

            GameType       = gameType;
            GameHash       = gameHash;
            GameId         = gameId;
            MaxPlayerCount = (byte)count;
            Name           = gameId.ToString();
            MapId          = mapId;
            Players        = new Player[count];
            for (byte i = 0; i < count; i++)
            {
                var user   = playerInfos[i];
                var player = CreatePlayer(user, i);
                Players[i] = player;
            }

            _userId2LocalId.Clear();
            TimeSinceCreate = LTime.timeSinceLevelLoad;
            for (byte i = 0; i < count; i++)
            {
                var player = Players[i];
                _userId2LocalId.Add(player.UserId, player.LocalId);
            }
        }
Beispiel #3
0
        public void DoStart(int gameId, int gameType, int mapId, Player[] playerInfos, string gameHash)
        {
            State                = EGameState.Loading;
            Seed                 = LRandom.Range(1, 100000);
            Tick                 = 0;
            _timeSinceLoaded     = 0;
            _firstFrameTimeStamp = 0;
            RegisterMsgHandlers();
            Debug = new DebugInstance("Room" + GameId + ": ");
            var count = playerInfos.Length;

            GameType = gameType;
            GameHash = gameHash;
            GameId   = gameId;
            Name     = gameId.ToString();
            MapId    = mapId;
            Players  = playerInfos;
            _userId2LocalId.Clear();
            TimeSinceCreate = LTime.timeSinceLevelLoad;
            for (byte i = 0; i < count; i++)
            {
                var player = Players[i];
                _userId2LocalId.Add(player.UserId, player.LocalId);
            }

            //Temp code
            for (byte i = 0; i < count; i++)
            {
                var player = Players[i];
                player.GameData = new GameData();
                OnRecvPlayerGameData(player);
            }
        }
Beispiel #4
0
        private void DoClientUpdate()
        {
            int maxRollbackCount = 5;

            if (_isDebugRollback && _world.Tick > maxRollbackCount && _world.Tick % maxRollbackCount == 0)
            {
                var rawTick     = _world.Tick;
                var revertCount = LRandom.Range(1, maxRollbackCount);
                for (int i = 0; i < revertCount; i++)
                {
                    var input = new Msg_PlayerInput(_world.Tick, LocalActorId, _inputService.GetDebugInputCmds());
                    var frame = new ServerFrame()
                    {
                        tick    = rawTick - i,
                        _inputs = new Msg_PlayerInput[] { input }
                    };
                    _cmdBuffer.ForcePushDebugFrame(frame);
                }
                _debugService.Trace("RollbackTo " + (_world.Tick - revertCount));
                if (!RollbackTo(_world.Tick - revertCount, _world.Tick))
                {
                    _commonStateService.IsPause = true;
                    return;
                }

                while (_world.Tick < rawTick)
                {
                    var sFrame = _cmdBuffer.GetServerFrame(_world.Tick);
                    Logging.Debug.Assert(sFrame != null && sFrame.tick == _world.Tick,
                                         $" logic error: server Frame  must exist tick {_world.Tick}");
                    _cmdBuffer.PushLocalFrame(sFrame);
                    Simulate(sFrame);
                    if (_commonStateService.IsPause)
                    {
                        return;
                    }
                }
            }

            while (_world.Tick < TargetTick)
            {
                FramePredictCount = 0;
                var input = new Msg_PlayerInput(_world.Tick, LocalActorId, _inputService.GetInputCmds());
                var frame = new ServerFrame()
                {
                    tick    = _world.Tick,
                    _inputs = new Msg_PlayerInput[] { input }
                };
                _cmdBuffer.PushLocalFrame(frame);
                _cmdBuffer.PushServerFrames(new ServerFrame[] { frame });
                Simulate(_cmdBuffer.GetFrame(_world.Tick));
                if (_commonStateService.IsPause)
                {
                    return;
                }
            }
        }
 public List <InputCmd> GetDebugInputCmds()
 {
     return(new List <InputCmd>()
     {
         new InputCmd()
         {
             content = new PlayerInput()
             {
                 inputUV = new LVector2(LRandom.Range(-1, 2), LRandom.Range(-1, 2)),
                 skillId = LRandom.Range(0, 3)
             }.ToBytes()
         }
     });
 }
Beispiel #6
0
 public List <InputCmd> GetDebugInputCmds()
 {
     return(new List <InputCmd>()
     {
         new InputCmd()
         {
             content = new PlayerInput()
             {
                 deg = (ushort)LRandom.Range(0, 4),
                 skillId = (ushort)LRandom.Range(0, 3)
             }.ToBytes()
         }
     });
 }
Beispiel #7
0
 public void DoStart(int gameType, int mapId, PlayerModel[] playerInfos, string gameHash)
 {
     State                = EGameState.Loading;
     Seed                 = LRandom.Range(1, 100000);
     _timeSinceLoaded     = 0;
     _firstFrameTimeStamp = 0;
     GameType             = gameType;
     GameHash             = gameHash;
     Name                 = GameId.ToString();
     MapId                = mapId;
     _userId2LocalId.Clear();
     foreach (var player in playerInfos)
     {
         _userId2LocalId.Add(player.UserId, player.LocalId);
     }
 }
Beispiel #8
0
 public override void DoStart()
 {
     base.DoStart();
     LRandom.SetSeed((uint)DateTime.Now.Millisecond);
     InitServerDS();
 }
        protected void C2L_StartGame(IIncommingMessage reader)
        {
            var msg = reader.Parse <Msg_C2L_StartGame>();

            Debug.Log("C2L_StartGame" + msg);
            var user = reader.Peer.GetExtension <User>();

            if (user == null)
            {
                return;
            }
            var room = user.Room;

            if (room?.Owner != user)
            {
                reader.Respond(1, EResponseStatus.Failed);
                return;
            }

            if (room.IsPlaying || _allGameServers.Count <= 0)
            {
                reader.Respond(room.IsPlaying ? 2 : 3, EResponseStatus.Failed);
                return;
            }

            var gameHash    = "game" + LRandom.Next();
            var playerInfos = new GamePlayerInfo[room.Users.Count];

            for (int i = 0; i < room.Users.Count; i++)
            {
                var pUser = room.Users[i];
                playerInfos[i] = new GamePlayerInfo()
                {
                    UserId    = pUser.UserId,
                    Account   = pUser.Account,
                    LoginHash = pUser.LoginHash,
                };
            }

            //TODO 使用平衡策略去获取服务器
            var server = _allGameServers[LRandom.Next(_allGameServers.Count)];

            server?.SendMessage((short)EMsgLS.L2G_CreateGame, new Msg_L2G_CreateGame()
            {
                GameType = user.GameType,
                Players  = playerInfos,
                MapId    = room.MapId,
                RoomId   = room.RoomId,
                GameHash = gameHash
            }, (status, response) => {
                if (status != EResponseStatus.Failed)
                {
                    var ipInfo      = server.GetExtension <ServerIpInfo>();
                    room.ServerPeer = server;
                    room.IsPlaying  = true;
                    room.GameHash   = gameHash;
                    var retMsg      = new Msg_L2C_StartGame()
                    {
                        GameServerEnd = new IPEndInfo()
                        {
                            Ip   = ipInfo.Ip,
                            Port = ipInfo.Port
                        },
                        GameHash    = gameHash,
                        RoomId      = room.RoomId,
                        GameId      = response.AsInt(),
                        IsReconnect = false
                    };
                    Log(" Msg_L2C_StartGame" + retMsg);
                    foreach (var roomUser in room.Users)
                    {
                        roomUser.Peer?.SendMessage((short)EMsgSC.L2C_StartGame, retMsg);
                    }
                }
            }
                                );
        }
        private void DoClientUpdate()
        {
            int  num  = 5;
            bool flag = this._isDebugRollback && this._world.Tick > num && this._world.Tick % num == 0;

            if (flag)
            {
                int tick = this._world.Tick;
                int num2 = LRandom.Range(1, num);
                for (int i = 0; i < num2; i++)
                {
                    Msg_PlayerInput msg_PlayerInput = new Msg_PlayerInput(this._world.Tick, this.LocalActorId, this._inputService.GetDebugInputCmds());
                    ServerFrame     frame           = new ServerFrame
                    {
                        Tick    = tick - i,
                        _Inputs = new Msg_PlayerInput[]
                        {
                            msg_PlayerInput
                        }
                    };
                    this._cmdBuffer.ForcePushDebugFrame(frame);
                }
                this._debugService.Trace("RollbackTo " + (this._world.Tick - num2), false, false);
                bool flag2 = !this.RollbackTo(this._world.Tick - num2, this._world.Tick, true);
                if (flag2)
                {
                    this._globalStateService.IsPause = true;
                    return;
                }
                while (this._world.Tick < tick)
                {
                    ServerFrame serverFrame = this._cmdBuffer.GetServerFrame(this._world.Tick);
                    Debug.Assert(serverFrame != null && serverFrame.Tick == this._world.Tick, string.Format(" logic error: server Frame  must exist tick {0}", this._world.Tick));
                    this._cmdBuffer.PushLocalFrame(serverFrame);
                    this.Simulate(serverFrame, true);
                    bool isPause = this._globalStateService.IsPause;
                    if (isPause)
                    {
                        return;
                    }
                }
            }
            while (this._world.Tick < this.TargetTick)
            {
                this.FramePredictCount = 0;
                Msg_PlayerInput msg_PlayerInput2 = new Msg_PlayerInput(this._world.Tick, this.LocalActorId, this._inputService.GetInputCmds());
                ServerFrame     serverFrame2     = new ServerFrame
                {
                    Tick    = this._world.Tick,
                    _Inputs = new Msg_PlayerInput[]
                    {
                        msg_PlayerInput2
                    }
                };
                this._cmdBuffer.PushLocalFrame(serverFrame2);
                this._cmdBuffer.PushServerFrames(new ServerFrame[]
                {
                    serverFrame2
                }, true);
                this.Simulate(this._cmdBuffer.GetFrame(this._world.Tick), true);
                bool isPause2 = this._globalStateService.IsPause;
                if (isPause2)
                {
                    break;
                }
            }
        }