コード例 #1
0
ファイル: GameMonitor.cs プロジェクト: eahs/EPCChess
        private GameJson MapGameToJson(Game game)
        {
            GameJson gameJson = new GameJson
            {
                GameId           = game.GameId.ToString(),
                MatchId          = game.MatchId,
                ChallengeId      = game.ChallengeId,
                Fen              = game.CurrentFen,
                ChallengeUrl     = game.ChallengeUrl,
                Moves            = game.ChallengeMoves.Split(" ").ToList(),
                Status           = game.ChallengeStatus,
                BlackPlayerId    = game.BoardPosition % 2 == 1 ? game.HomePlayer.User.LichessId : game.AwayPlayer.User.LichessId,
                WhitePlayerId    = game.BoardPosition % 2 == 0 ? game.HomePlayer.User.LichessId : game.AwayPlayer.User.LichessId,
                LastMoveAt       = game.LastMove,
                IsStarted        = game.IsStarted,
                Completed        = game.Completed,
                HomePlayerRating = game.Completed ? $"{game.HomePlayerRatingBefore} -> {game.HomePlayerRatingAfter}" : $"{game.HomePlayerRatingAfter}",
                AwayPlayerRating = game.Completed ? $"{game.AwayPlayerRatingBefore} -> {game.AwayPlayerRatingAfter}" : $"{game.AwayPlayerRatingAfter}",
                HomePoints       = game.HomePoints.ToString(),
                AwayPoints       = game.AwayPoints.ToString()
            };

            // If JV, colors are swapped
            if (game.BoardPosition > 7)
            {
                string temp = gameJson.BlackPlayerId;
                gameJson.BlackPlayerId = gameJson.WhitePlayerId;
                gameJson.WhitePlayerId = temp;
            }

            return(gameJson);
        }
コード例 #2
0
ファイル: ImportDriver.cs プロジェクト: joinrpg/trelony
        private async Task <Game> GamesMapper(GameJson arg)
        {
            var subRegion = await Context.SubRegions.FindAsync(arg.SubRegionId);

            if (subRegion == null)
            {
                Logger.Warning("Game {name} ({id}) has subregion {subregion}, which is not exists",
                               arg.Name, arg.Id, arg.SubRegionId);
                return(null);
            }

            Polygon polygon;

            if (arg.Polygon == 29 || arg.Polygon == 0)
            {
                polygon = null;
            }
            else
            {
                polygon = await Context.Polygons.FindAsync(arg.Polygon);

                if (polygon == null)
                {
                    Logger.Warning("Game {name} ({id}) has polygon {polygon}, which is not exists",
                                   arg.Name, arg.Id, arg.Polygon);
                    return(null);
                }
            }

            return(new Game()
            {
                Polygon = polygon,
                SubRegion = subRegion,
                Active = !arg.DeletedFlag,

                Email = arg.Email,
                GameUrl = arg.Uri,
                FacebookLink = arg.FbComm,
                LivejournalLink = arg.LjComm,
                VkontakteLink = arg.VkClub,
                TelegramLink = null,

                GameId = arg.Id,
                GameName = arg.Name,

                GameStatus = ConvertStatus(arg.Status),
                GameType = ConvertType(arg.Type),

                Organizers = arg.Mg,
                PlayersCount = arg.PlayersCount,
            });
        }
コード例 #3
0
ファイル: GameController.cs プロジェクト: Melvynx/NavalBattle
        public async Task <ActionResult <GameJson> > GetGame(long id)
        {
            var game = await _context.Games.FindAsync(id);

            if (game == null)
            {
                return(NotFound());
            }


            List <BoardJson> boardStates = _boardController.GetBoardByGame(game.Id);
            GameJson         gameJson    = new GameJson(game, boardStates);

            return(gameJson);
        }
コード例 #4
0
 void parseGame(GameJson game)
 {
     foreach (SceneJson scene in game.scenes)
     {
         if (sb.scenes.ContainsKey(scene.id))
         {
             sb.scenes[scene.id] = jsonToScene(scene);
         }
         else
         {
             sb.scenes.Add(scene.id, jsonToScene(scene));
         }
     }
     sb.currentScene = jsonToScene(game.scenes[0]);
     sb.SceneID      = game.scenes[0].id;
 }
コード例 #5
0
ファイル: GameController.cs プロジェクト: Melvynx/NavalBattle
        public async Task <ActionResult <GameJson> > PostGame(Game game)
        {
            _context.Games.Add(game);

            await _context.SaveChangesAsync();

            var boardPlayer1 = new Board(_boardController.GetUniqueId(), game.Id, "player1");
            var boardPlayer2 = new Board(_boardController.GetUniqueId() + 1, game.Id, "player2");
            await _boardController.CreateBoard(boardPlayer1, false);

            await _boardController.CreateBoard(boardPlayer2);

            List <BoardJson> boardStates = _boardController.GetBoardByGame(game.Id);
            GameJson         gameJson    = new GameJson(game, boardStates);

            return(gameJson);
        }
コード例 #6
0
        public void Init()
        {
            sb = GetComponent <SceneBrancher>();
            if (sb.scenes == null)
            {
                sb.scenes = new Dictionary <string, SceneObj>();
            }

            if (sb.writing == null)
            {
                sb.writing = new Dictionary <string, string>();
            }

            GameJson game = JsonUtility.FromJson <GameJson>(Game.ToString());

            parseGame(game);

            WritingJson language = JsonUtility.FromJson <WritingJson>(Language.ToString());

            parseLanguage(language);
        }
コード例 #7
0
        public async Task SendMessage(string user, string message)
        {
            GameJson game = new GameJson();

            await Clients.All.SendAsync("UpdateMatches", game);
        }
コード例 #8
0
        public async Task <IActionResult> IssueChallenge(int?id)
        {
            if (id is null)
            {
                return(NotFound());
            }

            var user = await _userManager.GetUserAsync(User);

            var game = await _context.Game.Include(g => g.HomePlayer.User)
                       .Include(g => g.AwayPlayer.User)
                       .Include(g => g.Match)
                       .FirstOrDefaultAsync(g => g.GameId == id);

            if (game.HomePlayer == null || game.AwayPlayer == null || game.HomePlayer.User.Id != user.Id)
            {
                return(NotFound());
            }

            var awayUser = await _userManager.FindByIdAsync(game.AwayPlayer.UserId + "");

            bool userRefreshed = false, awayRefreshed = false;

            userRefreshed = await _tokenRefresher.RefreshTokens(user, false);

            awayRefreshed = await _tokenRefresher.RefreshTokens(awayUser, false);

            if (!userRefreshed)
            {
                Log.Information("User access token expired");

                await _signInManager.SignOutAsync();

                return(RedirectToAction(nameof(AdminController.Index), "Home"));
            }

            GameJson gameJson = new GameJson
            {
                GameId           = game.GameId.ToString(),
                ChallengeId      = game.ChallengeId,
                Fen              = game.CurrentFen,
                ChallengeUrl     = game.ChallengeUrl,
                MatchId          = game.MatchId,
                Moves            = new List <string>(),
                Completed        = false,
                Result           = "",
                BlackPlayerId    = game.BoardPosition % 2 == 1 ? game.HomePlayer.User.LichessId : game.AwayPlayer.User.LichessId,
                WhitePlayerId    = game.BoardPosition % 2 == 0 ? game.HomePlayer.User.LichessId : game.AwayPlayer.User.LichessId,
                HomePlayerRating = game.Completed ? $"{game.HomePlayerRatingBefore} -> {game.HomePlayerRatingAfter}" : $"{game.HomePlayerRatingAfter}",
                AwayPlayerRating = game.Completed ? $"{game.AwayPlayerRatingBefore} -> {game.AwayPlayerRatingAfter}" : $"{game.AwayPlayerRatingAfter}",
                HomePoints       = game.HomePoints.ToString(),
                AwayPoints       = game.AwayPoints.ToString()
            };

            // If JV, colors are swapped
            if (game.BoardPosition > 7)
            {
                string temp = gameJson.BlackPlayerId;
                gameJson.BlackPlayerId = gameJson.WhitePlayerId;
                gameJson.WhitePlayerId = temp;
            }

            bool challengeCreated = false;

            LichessApi.LichessApiClient client = new LichessApiClient(user.AccessToken);

            if (awayRefreshed)
            {
                CreateGameRequest request = new CreateGameRequest
                {
                    Rated          = true,
                    ClockLimit     = game.Match.ClockTimeLimit,
                    ClockIncrement = game.Match.ClockIncrement,
                    Color          = game.BoardPosition % 2 == 0 ? Color.White : Color.Black,
                    Variant        = GameVariant.Standard,
                    Fen            = game.CurrentFen,
                    Message        = "Your EPC team game with {opponent} is ready: {game}."
                };

                // Jv board colors are swapped
                if (game.BoardPosition > 7)
                {
                    if (request.Color == Color.White)
                    {
                        request.Color = Color.Black;
                    }
                    else
                    {
                        request.Color = Color.White;
                    }
                }

                try
                {
                    var response = await client.Challenges.CreateGame(awayUser.LichessId, awayUser.AccessToken, request);

                    game.CurrentFen    = response.Game.InitialFen;
                    game.ChallengeUrl  = response.Game.Url;
                    game.ChallengeId   = response.Game.Id;
                    game.ChallengeJson = JsonConvert.SerializeObject(response);
                    game.IsStarted     = true;

                    gameJson.Status    = response.Game.Status.Name;
                    gameJson.IsStarted = true;

                    challengeCreated = true;
                }
                catch (Exception e)
                {
                    Log.Error(e, "Unable to create challenge");
                }
            }
            else // This has to be a pure challenge request
            {
                ChallengeRequest request = new ChallengeRequest
                {
                    Rated          = true,
                    ClockLimit     = game.Match.ClockTimeLimit,
                    ClockIncrement = game.Match.ClockIncrement,
                    Color          = game.BoardPosition % 2 == 0 ? Color.White : Color.Black,
                    Variant        = GameVariant.Standard,
                    Fen            = game.CurrentFen,
                    Message        = "Your EPC team game with {opponent} is ready: {game}."
                };

                // Jv board colors are swapped
                if (game.BoardPosition > 7)
                {
                    if (request.Color == Color.White)
                    {
                        request.Color = Color.Black;
                    }
                    else
                    {
                        request.Color = Color.White;
                    }
                }

                try
                {
                    var response = await client.Challenges.CreateChallenge(awayUser.LichessId, request);

                    game.ChallengeUrl  = response.Challenge.Url;
                    game.ChallengeId   = response.Challenge.Id;
                    game.ChallengeJson = JsonConvert.SerializeObject(response);
                    game.IsStarted     = true;

                    gameJson.Status    = response.Challenge.Status;
                    gameJson.IsStarted = true;

                    challengeCreated = true;
                }
                catch (Exception e)
                {
                    Log.Error(e, "Unable to create challenge");
                }
            }

            if (challengeCreated)
            {
                MatchUpdateViewModel vm = new MatchUpdateViewModel
                {
                    MatchId = game.MatchId,
                    Games   = new List <GameJson>(new GameJson[] { gameJson })
                };

                // Issue an immediate match update
                await _hubContext.Clients.Groups("match_" + game.Match.MatchId).SendAsync("UpdateMatches", vm);

                _context.Game.Update(game);
                await _context.SaveChangesAsync();
            }
            else
            {
                Log.Information("Challenge Url was empty");

                // This likely happens if the user AccessToken expires and Refresh fails

                await _signInManager.SignOutAsync();

                return(RedirectToAction(nameof(AdminController.Index), "Home"));
            }

            return(Redirect(game.ChallengeUrl));
        }