Exemplo n.º 1
0
        public async Task <GameState> LoadHistoryGetState()
        {
            var       tokens    = accountHandler.FindTokenByMetadata(Player1Address, "GameId", Id.ToString());
            GameState lastState = null;

            GameHistory.Clear();
            GameHistoryTxIds.Clear();
            //var tok = tokens.Values.OrderBy(t => t.TimeStamp);

            foreach (var t in tokens)
            {
                try
                {
                    if (t.Value.Metadata != null)
                    {
                        if (t.Value.Metadata.TryGetValue("GameData", out var gameData))
                        {
                            var parsedData = JsonConvert.DeserializeObject <ChessGameDto>(gameData);

                            if (parsedData != null)
                            {
                                if (parsedData.GameId == Id.ToString() && parsedData.Type == GameDtoTypes.ChessGame)
                                {
                                    //GameHistoryTxIds.Add(t.Key);

                                    if (parsedData.Players.Count > 0)
                                    {
                                        Players = parsedData.Players;
                                    }

                                    parsedData.TxId      = t.Key;
                                    parsedData.TimeStamp = t.Value.TimeStamp;
                                    GameHistory.Add(parsedData);
                                }

                                lastState = JsonConvert.DeserializeObject <GameState>(parsedData.GameState);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    log.Error("Chess Game - wrong format of gameData in token metadata. Cannot load history", ex);
                    return(null);
                }
            }

            var ghist = GameHistory.OrderBy(t => t.TimeStamp);

            GameHistory = ghist.ToList <ChessGameDto>();
            foreach (var gh in GameHistory)
            {
                GameHistoryTxIds.Add(gh.TxId);
            }

            var last = GameHistoryTxIds.LastOrDefault();

            if (last != null)
            {
                ActualStateTxId = last;
            }

            return(await Task.FromResult(lastState));
        }