AWSGameLiftCreateSessionOnQueueActivity.cpp 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
  3. * its licensors.
  4. *
  5. * For complete copyright and license terms please see the LICENSE at the root of this
  6. * distribution (the "License"). All use of this software is governed by the License,
  7. * or, if provided, by the license below or the license accompanying this file. Do not
  8. * remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
  9. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. *
  11. */
  12. #include <AWSGameLiftSessionConstants.h>
  13. #include <Activity/AWSGameLiftCreateSessionOnQueueActivity.h>
  14. namespace AWSGameLift
  15. {
  16. namespace CreateSessionOnQueueActivity
  17. {
  18. Aws::GameLift::Model::StartGameSessionPlacementRequest BuildAWSGameLiftStartGameSessionPlacementRequest(
  19. const AWSGameLiftCreateSessionOnQueueRequest& createSessionOnQueueRequest)
  20. {
  21. Aws::GameLift::Model::StartGameSessionPlacementRequest request;
  22. // Optional attributes
  23. if (!createSessionOnQueueRequest.m_sessionName.empty())
  24. {
  25. request.SetGameSessionName(createSessionOnQueueRequest.m_sessionName.c_str());
  26. }
  27. for (auto iter = createSessionOnQueueRequest.m_sessionProperties.begin();
  28. iter != createSessionOnQueueRequest.m_sessionProperties.end(); iter++)
  29. {
  30. Aws::GameLift::Model::GameProperty sessionProperty;
  31. sessionProperty.SetKey(iter->first.c_str());
  32. sessionProperty.SetValue(iter->second.c_str());
  33. request.AddGameProperties(sessionProperty);
  34. }
  35. // Required attributes
  36. request.SetGameSessionQueueName(createSessionOnQueueRequest.m_queueName.c_str());
  37. request.SetMaximumPlayerSessionCount(createSessionOnQueueRequest.m_maxPlayer);
  38. request.SetPlacementId(createSessionOnQueueRequest.m_placementId.c_str());
  39. return request;
  40. }
  41. AZStd::string CreateSessionOnQueue(
  42. const Aws::GameLift::GameLiftClient& gameliftClient,
  43. const AWSGameLiftCreateSessionOnQueueRequest& createSessionOnQueueRequest)
  44. {
  45. AZ_TracePrintf(AWSGameLiftCreateSessionOnQueueActivityName,
  46. "Requesting StartGameSessionPlacement against Amazon GameLift service ...");
  47. AZStd::string result = "";
  48. Aws::GameLift::Model::StartGameSessionPlacementRequest request =
  49. BuildAWSGameLiftStartGameSessionPlacementRequest(createSessionOnQueueRequest);
  50. auto createSessionOnQueueOutcome = gameliftClient.StartGameSessionPlacement(request);
  51. if (createSessionOnQueueOutcome.IsSuccess())
  52. {
  53. result = AZStd::string(createSessionOnQueueOutcome.GetResult().GetGameSessionPlacement().GetPlacementId().c_str());
  54. }
  55. else
  56. {
  57. AZ_Error(AWSGameLiftCreateSessionOnQueueActivityName, false, AWSGameLiftErrorMessageTemplate,
  58. createSessionOnQueueOutcome.GetError().GetExceptionName().c_str(),
  59. createSessionOnQueueOutcome.GetError().GetMessage().c_str());
  60. }
  61. return result;
  62. }
  63. bool ValidateCreateSessionOnQueueRequest(const AzFramework::CreateSessionRequest& createSessionRequest)
  64. {
  65. auto gameliftCreateSessionOnQueueRequest =
  66. azrtti_cast<const AWSGameLiftCreateSessionOnQueueRequest*>(&createSessionRequest);
  67. return gameliftCreateSessionOnQueueRequest && gameliftCreateSessionOnQueueRequest->m_maxPlayer >= 0 &&
  68. !gameliftCreateSessionOnQueueRequest->m_queueName.empty() && !gameliftCreateSessionOnQueueRequest->m_placementId.empty();
  69. }
  70. } // namespace CreateSessionOnQueueActivity
  71. } // namespace AWSGameLift