Beispiel #1
0
            public void ReturnsSteamClientApiClient()
            {
                // Arrange -> Act
                var steamClientApiClient = new SteamClientApiClient(userName, password, retryPolicy, telemetryClient);

                // Assert
                Assert.IsAssignableFrom <SteamClientApiClient>(steamClientApiClient);
            }
Beispiel #2
0
            public void ReturnsFalse()
            {
                // Arrange
                var ex = new TaskCanceledException();

                // Act
                var isTransient = SteamClientApiClient.IsTransient(ex);

                // Assert
                Assert.False(isTransient);
            }
Beispiel #3
0
            public void ExIsTimeoutRejectedException_ReturnsTrue()
            {
                // Arrange
                var ex = new TimeoutRejectedException();

                // Act
                var isTransient = SteamClientApiClient.IsTransient(ex);

                // Assert
                Assert.True(isTransient);
            }
Beispiel #4
0
            public void ExIsSteamClientApiExceptionAndResultIsNotTransient_ReturnsFalse()
            {
                // Arrange
                var ex = new SteamClientApiException(null, EResult.AccessDenied);

                // Act
                var isTransient = SteamClientApiClient.IsTransient(ex);

                // Assert
                Assert.False(isTransient);
            }
Beispiel #5
0
            public void ExIsSteamClientApiExceptionAndResultIsNull_ReturnsTrue()
            {
                // Arrange
                var ex = new SteamClientApiException(null, new TaskCanceledException());

                // Act
                var isTransient = SteamClientApiClient.IsTransient(ex);

                // Assert
                Assert.True(isTransient);
            }
Beispiel #6
0
            public void ExIsSteamClientApiExceptionAndResultIsTransient_ReturnsTrue(EResult result)
            {
                // Arrange
                var ex = new SteamClientApiException(null, result);

                // Act
                var isTransient = SteamClientApiClient.IsTransient(ex);

                // Assert
                Assert.True(isTransient);
            }
        private async Task UpdateDailyLeaderboardsAsync(CancellationToken cancellationToken)
        {
            var worker = kernel.Get <DailyLeaderboardsWorker>();

            using (var operation = TelemetryClient.StartOperation <RequestTelemetry>("Update daily leaderboards"))
                using (new UpdateActivity(log, "daily leaderboards"))
                {
                    try
                    {
                        if (!Settings.AreSteamClientCredentialsSet())
                        {
                            log.Warn("Using test data for calls to Steam Client API. Set your Steam user name and password to use the actual Steam Client API.");
                            log.Warn("Run this application with --help to find out how to set your Steam user name and password.");
                        }

                        var leaderboards = await worker.GetDailyLeaderboardsAsync(Settings.DailyLeaderboardsPerUpdate, cancellationToken).ConfigureAwait(false);

                        await worker.UpdateDailyLeaderboardsAsync(leaderboards, cancellationToken).ConfigureAwait(false);

                        await worker.StoreDailyLeaderboardsAsync(leaderboards, cancellationToken).ConfigureAwait(false);

                        operation.Telemetry.Success = true;
                    }
                    catch (Exception ex)
                        when(SteamClientApiClient.IsTransient(ex) ||
                             LeaderboardsStoreClient.IsTransient(ex))
                        {
                            TelemetryClient.TrackException(ex);
                            log.Error("Failed to complete run due to an error.", ex);
                            operation.Telemetry.Success = false;
                        }
                    catch (Exception) when(operation.Telemetry.MarkAsUnsuccessful())
                    {
                    }
                    finally
                    {
                        kernel.Release(worker);
                    }
                }
        }
        private static async Task MainAsync(string[] args)
        {
            if (args.Length != 2)
            {
                throw new ArgumentException("Your Steam user name and password must be passed in as arguments.");
            }

            var userName = args[0];
            var password = args[1];

            var areas = Areas.GetAreas();

            WriteJson(areas, "areas", DefaultValueHandling.Ignore);

            using (var db = new LeaderboardsContext())
            {
                var products = JsonConvert.DeserializeObject <Product[]>(Resources.Products);
                db.Products.AddOrUpdate(p => p.ProductId, products);

                var modes = JsonConvert.DeserializeObject <Mode[]>(Resources.Modes);
                db.Modes.AddOrUpdate(m => m.ModeId, modes);

                var runs = JsonConvert.DeserializeObject <Run[]>(Resources.Runs);
                db.Runs.AddOrUpdate(r => r.RunId, runs);

                var characters = JsonConvert.DeserializeObject <Character[]>(Resources.Characters);
                db.Characters.AddOrUpdate(c => c.CharacterId, characters);

                db.SaveChanges();
            }

            using (var steamClient = new SteamClientApiClient(userName, password, Policy.NoOpAsync(), TelemetryClient))
            {
                steamClient.Timeout = TimeSpan.FromSeconds(30);

                await steamClient.ConnectAndLogOnAsync().ConfigureAwait(false);

                var leaderboards = await Leaderboards.GetLeaderboardsAsync(steamClient).ConfigureAwait(false);

                WriteJson(leaderboards.Select(l => new
                {
                    l.LeaderboardId,
                    l.DisplayName,
                    l.Name,
                    l.IsProduction,
                    l.ProductId,
                    l.ModeId,
                    l.RunId,
                    l.CharacterId,
                    l.IsCustomMusic,
                    l.IsCoOp,
                }), "Leaderboards");

                var dailyLeaderboards = await DailyLeaderboards.GetDailyLeaderboardsAsync(steamClient).ConfigureAwait(false);

                WriteJson(dailyLeaderboards.Select(l => new
                {
                    l.LeaderboardId,
                    l.DisplayName,
                    l.Name,
                    l.IsProduction,
                    l.ProductId,
                    l.Date,
                }), "DailyLeaderboards");
            }
        }
Beispiel #9
0
 public SteamClientApiClientTests()
 {
     steamClientApiClient = new SteamClientApiClient(userName, password, retryPolicy, telemetryClient, mockSteamClient.Object);
 }