Exemple #1
0
        public Task Announce(CloudCallbackType callbackType)
        {
            // no-op
            Logger.LogDebug("CloudCallback", $"Cloud Callback called with {callbackType}");
            var cloudCallbackPayload = cloudCallbackFactory.Make(callbackType);

            Logger.LogDebug("CloudCallback", $"Cloud Callback No-opped, Status: {cloudCallbackPayload.MatchStatus}");
            return(Task.CompletedTask);
        }
 public CloudCallback Make(CloudCallbackType callbackType)
 {
     return(callbackType switch
     {
         CloudCallbackType.Initializing => new CloudCallback
         {
             MatchId = environmentService.MatchId,
             MatchStatus = "initializing",
             MatchStatusReason = "Startup"
         },
         CloudCallbackType.Ready => new CloudCallback
         {
             MatchId = environmentService.MatchId,
             MatchStatus = "ready",
             MatchStatusReason = $"All Components connected and ready for bots. Waiting for {runnerConfig.BotCount} bots to connect."
         },
         CloudCallbackType.Started => new CloudCallback
         {
             MatchId = environmentService.MatchId,
             MatchStatus = "started",
             MatchStatusReason = $"Match has started with {runnerStateService.TotalConnectedBots} bots"
         },
         CloudCallbackType.Failed => new CloudCallback
         {
             MatchId = environmentService.MatchId,
             MatchStatus = "failed",
             MatchStatusReason = runnerStateService.FailureReason,
             Players = MakeFailedPlayerList()
         },
         CloudCallbackType.Finished => new CloudCallback
         {
             MatchId = environmentService.MatchId,
             MatchStatus = "finished",
             MatchStatusReason = "Game Complete.",
             Seed = JsonConvert.SerializeObject(runnerStateService.GameCompletePayload.WorldSeeds),
             Ticks = runnerStateService.GameCompletePayload.TotalTicks.ToString(),
             Players = MakePlayerList()
         },
         CloudCallbackType.LoggingComplete => new CloudCallback
         {
             MatchId = environmentService.MatchId,
             MatchStatus = "logging_complete",
             MatchStatusReason = "Game Complete. Logging Complete.",
             Seed = JsonConvert.SerializeObject(runnerStateService.GameCompletePayload.WorldSeeds),
             Ticks = runnerStateService.GameCompletePayload.TotalTicks.ToString(),
             Players = MakePlayerList()
         },
         _ => throw new ArgumentOutOfRangeException(nameof(callbackType), callbackType, "Unknown Cloud Callback Type")
     });
        public async Task Announce(CloudCallbackType callbackType)
        {
            var cloudCallbackPayload = cloudCallbackFactory.Make(callbackType);

            Logger.LogInfo("CloudCallback", $"Cloud Callback Initiated, Status: {cloudCallbackPayload.MatchStatus}, Callback player Count: {cloudCallbackPayload.Players?.Count}");
            try
            {
                var result = await httpClient.PostAsync(environmentService.ApiUrl, cloudCallbackPayload, new JsonMediaTypeFormatter());

                if (!result.IsSuccessStatusCode)
                {
                    Logger.LogWarning("CloudCallback", $"Received non-success status code from cloud callback. Code: {result.StatusCode}");
                }
            }
            catch (Exception e)
            {
                Logger.LogError("CloudCallback", $"Failed to make cloud callback with error: {e.Message}");
            }
        }