public IActionResult PostCreateGame([FromBody] Validators.GameCreate gameCreate) { Result result = this.CreateGame(gameCreate); if (result.ResultFunc == this.Ok) { PusherServer.Pusher pusher = Pusher.Pusher.Create(); GameData game = (GameData)result.Data; //check if there is a player 2 if (game.user2.id != null) { pusher.TriggerAsync(channelName: this.PRIVATE_USER_CHANNELNAME + ((GameData)result.Data).user2.id, eventName: "game_invite", data: result.Data); } else { pusher.TriggerAsync(channelName: this.PUBLIC_GAME_CHANNEL, eventName: "game_created", data: result.Data, options: new TriggerOptions() { SocketId = gameCreate.socket_id }); } } return(result.ResultFunc(result.Data)); }
public Result CreateGame(Validators.GameCreate gameCreate) { if (ModelState.IsValid == false) { return(new Result { ResultFunc = this.BadRequest, Data = "Incorrect post data" }); } User user = (User)HttpContext.Items["user"]; User user_2 = this.db.Users.SingleOrDefault(x => x.email == gameCreate.opponent_email); if (gameCreate.opponent_email != null && user_2 == null) { return(new Result { ResultFunc = this.BadRequest, Data = "The user you're trying to invite does not exist." }); } int status = (user_2 == null) ? GameStatus.waiting_join : GameStatus.waiting_invite; //Check if the user already has an active lobby. if (status == GameStatus.waiting_join) { List <Game> lobbies = this.db.Games.Where(x => x.User1 == user && x.status == GameStatus.waiting_join).ToList(); if (lobbies.Count > 0) { return(new Result { ResultFunc = this.BadRequest, Data = "You already have an active lobby." }); } } //Check if the user is trying to invite himself. if (user == user_2) { return(new Result { ResultFunc = this.BadRequest, Data = "You can't play against yourself." }); } Game game = new Game { User1 = user, User2 = user_2, status = status }; this.db.Add(game); this.db.SaveChanges(); return(new Result { ResultFunc = this.Ok, Data = this.FilterGameResults(game) }); }