public async Task <TokenResponse> RefreshAccessTokenAsync(string tenantName)
        {
            var tenant = (from item in _options.Tenants
                          where item.Name == tenantName
                          select item).FirstOrDefault();

            if (tenant == null)
            {
                return(null);
            }
            var tokenClient = _httpClientFactory.CreateClient("tokenClient");
            var document    = await DiscoveryCache.GetAsync();

            var tokenResonse = await tokenClient.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest()
            {
                Address      = document.TokenEndpoint,
                ClientId     = tenant.Credentials.ClientId,
                ClientSecret = tenant.Credentials.ClientSecret,
            });

            TokenRecords[tenantName] = new TokenRecord
            {
                TokenResponse    = tokenResonse,
                ClientCredential = tenant.Credentials,
                Expiration       = DateTime.UtcNow.AddSeconds(tokenResonse.ExpiresIn - 300) // give a 5 minute skew.
            };

            return(tokenResonse);
        }
Esempio n. 2
0
        public async Task <IResult> CreateTokenFromValueAsync(string tokenValue)
        {
            if (string.IsNullOrWhiteSpace(tokenValue))
            {
                return(Result.Error("TOKEN_EMPTY", "Token cannot be empty"));
            }

            var tokenRecord = new TokenRecord
            {
                Id = Guid.NewGuid(),
                LastChangeDateTimeUtc = DateTime.UtcNow,
                Value = tokenValue
            };

            try
            {
                await _semaphore.WaitAsync();

                await _tokenRepository.InsertOneAsync(tokenRecord);

                return(Result.Ok);
            }
            catch (Exception ex)
            {
                return(Result.Error("EXCEPTION", ex.Message));
            }
            finally
            {
                _semaphore.Release();
            }
        }
Esempio n. 3
0
        public new static void LexicalAnalysis(List <TokenRecord> TokenList, string Code, ref int Index)
        {
            int    intIndexCurrent = Index;         //指向后一个字符
            bool   blnContinue     = true;
            char   chrTemp;
            string strTempWord;

            while (blnContinue && intIndexCurrent < Code.Length)
            {
                chrTemp = Code[intIndexCurrent];
                if (char.IsDigit(chrTemp) || chrTemp.Equals('.'))
                {
                    intIndexCurrent += 1;
                }
                else
                {
                    blnContinue = false;
                }
            }                                                             //while

            strTempWord = Code.Substring(Index, intIndexCurrent - Index); //取得临时字符串
            TokenRecord Token = ProduceToken(strTempWord, Index);

            TokenList.Add(Token);

            Index = intIndexCurrent - 1;            //指针移到当前指针的前一位,然后赋值给循环指针
        }
Esempio n. 4
0
        public new static void LexicalAnalysis(List <TokenRecord> TokenList, string Code, ref int Index)
        {
            string strTempWord;

            strTempWord = Code.Substring(Index, 1);

            TokenRecord Token = ProduceToken(strTempWord, Index);

            TokenList.Add(Token);
        }
        public async Task CollectingGameService_WhenPlayersOrFursuitsHaveSameCollectionCount_ThenWhoeverAchievedItFirstRanksHigher()
        {
            var players       = new RegSysIdentityRecord[3];
            var tokens        = new TokenRecord[3];
            var fursuitBadges = new FursuitBadgeRecord[3];

            // 3 players, each with suit
            for (int i = 0; i < 3; i++)
            {
                players[i] = await CreateRegSysIdentityAsync();

                tokens[i] = await CreateTokenAsync();

                fursuitBadges[i] = await CreateFursuitBadgeAsync(players[i].Uid);

                await _collectingGameService.RegisterTokenForFursuitBadgeForOwnerAsync(
                    players[i].Uid, fursuitBadges[i].Id, tokens[i].Value);
            }

            // Each catches everyone else.
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    if (j == i)
                    {
                        continue;
                    }

                    var result = await _collectingGameService.CollectTokenForPlayerAsync(
                        players[i].Uid, tokens[j].Value);

                    Assert.True(result.IsSuccessful);
                }
            }

            var playerScoreboard = await _collectingGameService.GetPlayerScoreboardEntriesAsync(5);

            var fursuitScoreboard = await _collectingGameService.GetFursuitScoreboardEntriesAsync(5);

            // 1 catches first, then 2, then 3
            Assert.Equal(3, playerScoreboard.Value.Length);
            Assert.True(playerScoreboard.Value.All(a => a.CollectionCount == 2));
            Assert.Equal(players[0].Username, playerScoreboard.Value[0].Name);
            Assert.Equal(players[1].Username, playerScoreboard.Value[1].Name);
            Assert.Equal(players[2].Username, playerScoreboard.Value[2].Name);

            // 3 gets the 2 catches first (by 1 + 2), then 1 (by 2 + 3), then 2
            Assert.Equal(3, fursuitScoreboard.Value.Length);
            Assert.True(fursuitScoreboard.Value.All(a => a.CollectionCount == 2));
            Assert.Equal(fursuitBadges[2].Id, fursuitScoreboard.Value[0].BadgeId);
            Assert.Equal(fursuitBadges[0].Id, fursuitScoreboard.Value[1].BadgeId);
            Assert.Equal(fursuitBadges[1].Id, fursuitScoreboard.Value[2].BadgeId);
        }
Esempio n. 6
0
        private static void PopulateTokenRecord(TokenRecord record, int nameId)
        {
            record.InUse  = true;
            record.NameId = nameId;
            record.SetCreated();
            DynamicRecord dynamicRecord = new DynamicRecord(nameId);

            dynamicRecord.InUse = true;
            dynamicRecord.Data  = new sbyte[10];
            dynamicRecord.SetCreated();
            record.AddNameRecord(dynamicRecord);
        }
Esempio n. 7
0
            public TokenRecord AddToken(string token, string tokenType, string state)
            {
                var result = new TokenRecord
                {
                    Id         = _nextId++,
                    Token      = token,
                    TokenType  = tokenType,
                    TokenState = state
                };

                _tokens.Add(result);
                return(result);
            }
        private async Task <TokenRecord> CreateTokenAsync()
        {
            var id     = Guid.NewGuid();
            var record = new TokenRecord()
            {
                Id    = id,
                Value = id.ToString()
            };

            await _tokenRepository.InsertOneAsync(record);

            return(record);
        }
        /// <summary>
        /// 分析语句并返回记号记录对象
        /// </summary>
        /// <param name="Code">运算表达式</param>
        /// <returns>顶级TokenRecord对象</returns>
        public TokenRecord Analyse(string Code)
        {
            if (Code.Trim().Equals(string.Empty))
            {
                return(null);
            }

            List <TokenRecord> ListToken = new List <TokenRecord>();          //TokenRecord列表

            int intIndex = 0;

            //词法分析,将代码转换为TokenRecord列表
            ComputeFieldTokenFactory.LexicalAnalysis(ListToken, Code, ref intIndex);

            //语法树分析,将Token列表按优先级转换为树
            TokenRecord TokenTop = SyntaxTreeAnalyse.SyntaxTreeGetTopTokenAnalyse(ListToken, 0, ListToken.Count - 1);

            return(TokenTop);
        }
        public async Task <TokenResponse> GetAccessTokenAsync(string tenant)
        {
            var         nowUtc      = DateTime.UtcNow;
            TokenRecord tokenRecord = null;

            if (TokenRecords.TryGetValue(tenant, out tokenRecord))
            {
                var remaining = (tokenRecord.Expiration - nowUtc).TotalSeconds;
                if (remaining <= 0)
                {
                    tokenRecord = null;
                }
                else
                {
                    return(tokenRecord.TokenResponse);
                }
            }

            return(await RefreshAccessTokenAsync(tenant));
        }
Esempio n. 11
0
        public async Task <TokenResponse> GetAccessTokenAsync()
        {
            lock (_accessLock)
            {
                var nowUtc = DateTime.UtcNow;

                if (CurrentTokenRecord != null)
                {
                    var remaining = (CurrentTokenRecord.Expiration - nowUtc).TotalSeconds;
                    if (remaining <= 0)
                    {
                        CurrentTokenRecord = null;
                    }
                    else
                    {
                        return(CurrentTokenRecord.TokenResponse);
                    }
                }
            }
            return(await RefreshAccessTokenAsync());
        }
Esempio n. 12
0
        public async Task <TokenResponse> RefreshAccessTokenAsync()
        {
            var document = await _discoveryCache.GetAsync();

            var tokenClient = _httpClientFactory.CreateClient("tokenClient");

            var tokenResonse = await tokenClient.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest()
            {
                Address      = document.TokenEndpoint,
                ClientId     = _tenant.Credentials.ClientId,
                ClientSecret = _tenant.Credentials.ClientSecret,
            });

            lock (_accessLock)
            {
                CurrentTokenRecord = new TokenRecord
                {
                    TokenResponse    = tokenResonse,
                    ClientCredential = _tenant.Credentials,
                    Expiration       = DateTime.UtcNow.AddSeconds(tokenResonse.ExpiresIn - 300) // give a 5 minute skew.
                };
                return(tokenResonse);
            }
        }
Esempio n. 13
0
 internal TokenRecord FillProperties(TokenRecord record)
 {
     FillCommonProperties(record);
     record.Circulation = Receipt.NewTotalSupply;
     return(record);
 }
Esempio n. 14
0
 public TerminalNode(TokenRecord tokenRecord)
 {
     Lexeme = tokenRecord.Lexeme;
     Token  = tokenRecord.Token;
 }