Пример #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));
        }
Пример #2
0
        public async Task <string> LoadHistoryFromActualTx()
        {
            try
            {
                var allLoaded       = false;
                var actualTxLoading = ActualStateTxId;
                while (!allLoaded)
                {
                    var info = await NeblioTransactionHelpers.TransactionInfoAsync(null, TransactionTypes.Neblio, actualTxLoading);

                    if (info == null)
                    {
                        return(await Task.FromResult("OK - No History yet."));
                    }

                    if (info.VoutTokens != null)
                    {
                        if (info.VoutTokens.Count > 0)
                        {
                            var token = info.VoutTokens[0];
                            if (token.Metadata != null)
                            {
                                if (token.Metadata.Count > 0)
                                {
                                    if (token.Metadata.TryGetValue("GameId", out var gameid))
                                    {
                                        if (gameid == Id.ToString())
                                        {
                                            if (token.Metadata.TryGetValue("GameData", out var gameData))
                                            {
                                                if (!string.IsNullOrEmpty(gameData))
                                                {
                                                    try
                                                    {
                                                        var parsedData = JsonConvert.DeserializeObject <ChessGameDto>(gameData);
                                                        if (parsedData != null)
                                                        {
                                                            if (parsedData.GameId == Id.ToString() && parsedData.Type == GameDtoTypes.ChessGame)
                                                            {
                                                                GameHistoryTxIds.Add(actualTxLoading);

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

                                                                GameHistory.Add(parsedData);

                                                                if (parsedData.LastGameRecordTxId != "StartOfNewGame")
                                                                {
                                                                    actualTxLoading = parsedData.LastGameRecordTxId;
                                                                }
                                                                else
                                                                {
                                                                    allLoaded = true;
                                                                }
                                                            }
                                                        }
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        log.Error("Chess Game - wrong format of gameData in token metadata. Cannot load history", ex);
                                                        return(null);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                // loading is going from newset to oldest one, so it is important to reverse whole list
                GameHistoryTxIds.Reverse();
                GameHistory.Reverse();

                return(await Task.FromResult("OK"));
            }
            catch (Exception ex)
            {
                log.Error("Chess Game - Cannot load game History!", ex);
                return(await Task.FromResult("ERROR"));
            }
        }