public static void JoinGame(int userId, JoinGameModel gameModel) { ValidateGamePassword(gameModel.Password); ValidateUserNumber(gameModel.Number); var context = new BullsAndCowsEntities(); using (context) { var game = GetGame(gameModel.Id, context); if (game.GameStatus.Status != GameStatusOpen) { throw new ServerErrorException("Game is unavailable", "ERR_INV_GAME"); } if (game.Password != gameModel.Password) { throw new ServerErrorException("Incorrect game password", "ERR_BAD_PASS"); } var blueUser = GetUser(userId, context); game.BlueUser = blueUser; game.BlueUserNumber = gameModel.Number; var fullGameStatus = context.GameStatuses.First(st => st.Status == GameStatusFull); game.GameStatus = fullGameStatus; MessageState unreadMessageState = context.MessageStates.First(ms => ms.State == MessageStateUnread); MessageType gameJoinedMessageType = context.MessageTypes.First(mt => mt.Type == MessageTypeGameJoined); var message = new Message() { Text = string.Format(MessageTextJoinedGame, blueUser.Nickname, game.Title), Game = game, User = game.RedUser, MessageState = unreadMessageState, MessageType = gameJoinedMessageType }; context.Messages.Add(message); context.SaveChanges(); } }
public static void JoinGame(int userId, JoinGameModel gameModel) { ValidateGamePassword(gameModel.Password); ValidateUserNumber(gameModel.Number); var context = new BullsAndCowsEntities(); using (context) { var game = GetGame(gameModel.Id, context); ValidateOpenGameStatus(game.GameStatus); if (game.Password != gameModel.Password) { throw new ServerErrorException("Incorrect game password", "INV_GAME_AUTH"); } var blueUser = GetUser(userId, context); game.BlueUser = blueUser; game.BlueUserNumber = gameModel.Number; var fullGameStatus = context.GameStatuses.First(st => st.Status == GameStatusFull); game.GameStatus = fullGameStatus; MessageType gameJoinedMessageType = context.MessageTypes.First(mt => mt.Type == MessageTypeGameJoined); var msgText = string.Format(MessageTextJoinedGame, blueUser.Nickname, game.Title); SendMessage(msgText, game.RedUser, game, gameJoinedMessageType, context); context.SaveChanges(); } }