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 }); } }); }
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); } }
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); } }
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() } }); }
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() } }); }
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); } }
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; } } }