C#용 Amazon GameLift 서버 SDK 4.x: 작업 - Amazon GameLift

C#용 Amazon GameLift 서버 SDK 4.x: 작업

Amazon GameLift C# 서버 SDK 참조를 사용하면 Amazon GameLift와 함께 사용할 멀티플레이어 게임을 통합하는 데 도움이 됩니다. 통합 프로세스에 대한 지침은 Amazon GameLift를 게임 서버에 추가 페이지를 참조하세요.

참고

본 페이지는 Amazon GameLift 서버 SDK의 이전 버전에 대한 참조입니다. 최신 버전은 C# 및 Unity용 Amazon GameLift 서버 SDK 5.x: 작업를 참조하십시오.

C#용 Amazon GameLift 서버 SDK 4.x: 데이터 유형

AcceptPlayerSession()

Amazon GameLift 서비스에 지정된 플레이어 세션 ID의 플레이어가 서버 프로세스에 연결되었고 검증이 필요함을 알립니다. Amazon GameLift가 플레이어 세션 ID가 유효한지, 즉 플레이어 ID가 게임 세션의 플레이어 슬롯을 예약했는지 확인합니다. 검증되면 Amazon GameLift가 플레이어 슬롯의 상태를 RESERVED에서 ACTIVE로 변경합니다.

구문

GenericOutcome AcceptPlayerSession(String playerSessionId)

파라미터

playerSessionId

새로운 플레이어 세션이 생성되었을 때 Amazon GameLift가 발행한 고유 ID입니다. 플레이어 세션 ID는 PlayerSession 객체에서 지정되며, 이 객체는 GameLift API 작업 StartGameSessionPlacement, CreateGameSession, DescribeGameSessionPlacement 또는 DescribePlayerSessions에 대한 클라이언트 호출에 응답하여 반환됩니다.

유형: 문자열

필수 여부: 예

반환 값

성공 또는 실패와 함께 오류 메시지로 구성된 일반적인 결과를 반환합니다.

이 예는 잘못된 플레이어 세션 ID 검증 및 거부를 비롯해 연결 요청을 처리하기 위한 함수를 보여줍니다.

void ReceiveConnectingPlayerSessionID (Connection connection, String playerSessionId){ var acceptPlayerSessionOutcome = GameLiftServerAPI.AcceptPlayerSession(playerSessionId); if(acceptPlayerSessionOutcome.Success) { connectionToSessionMap.emplace(connection, playerSessionId); connection.Accept(); } else { connection.Reject(acceptPlayerSessionOutcome.Error.ErrorMessage); } }

ActivateGameSession()

Amazon GameLift 서비스에 서버 프로세스가 게임 세션을 활성화했으며 이제 플레이어 연결을 수신할 준비가 되었음을 알립니다. 이 작업은 모든 게임 세션 초기화가 완료된 후 onStartGameSession() 콜백 함수의 일부로 호출되어야 합니다.

구문

GenericOutcome ActivateGameSession()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 실패와 함께 오류 메시지로 구성된 일반적인 결과를 반환합니다.

이 예에서는 onStartGameSession() 위임 함수의 일부로 ActivateGameSession()이 호출되는 것을 보여줍니다.

void OnStartGameSession(GameSession gameSession) { // game-specific tasks when starting a new game session, such as loading map // When ready to receive players var activateGameSessionOutcome = GameLiftServerAPI.ActivateGameSession(); }

DescribePlayerSessions()

설정, 세션 메타데이터 및 플레이어 데이터 등의 플레이어 세션 데이터를 가져옵니다. 이 작업을 사용하면 단일 플레이어 세션 정보, 게임 세션에 있는 모든 플레이어 세션 정보 또는 단일 플레이어 ID와 관련된 모든 플레이어 세션 정보를 가져올 수 있습니다.

구문

DescribePlayerSessionsOutcome DescribePlayerSessions(DescribePlayerSessionsRequest describePlayerSessionsRequest)

파라미터

describePlayerSessionsRequest

검색할 플레이어 세션을 설명하는 DescribePlayerSessionsRequest 객체입니다.

필수 여부: 예

반환 값

성공하는 경우, 요청 파라미터에 적합한 플레이어 세션 객체 집합이 들어 있는 DescribePlayerSessionsOutcome 객체를 반환합니다. 플레이어 세션 객체 구조는 AWS SDK Amazon GameLift API PlayerSession 데이터 유형과 동일합니다.

다음은 지정된 게임 세션에 활성 상태로 연결되어 있는 모든 플레이어 세션을 검색하는 요청을 보여주는 예입니다. NextToken을 생략하고 제한 값을 10으로 설정하면, Amazon GameLift가 요청과 일치하는 처음 10개의 플레이어 세션 레코드를 반환합니다.

// Set request parameters var describePlayerSessionsRequest = new Aws.GameLift.Server.Model.DescribePlayerSessionsRequest() { GameSessionId = GameLiftServerAPI.GetGameSessionId().Result, //gets the ID for the current game session Limit = 10, PlayerSessionStatusFilter = PlayerSessionStatusMapper.GetNameForPlayerSessionStatus(PlayerSessionStatus.ACTIVE) }; // Call DescribePlayerSessions Aws::GameLift::DescribePlayerSessionsOutcome playerSessionsOutcome = Aws::GameLift::Server::Model::DescribePlayerSessions(describePlayerSessionRequest);

GetGameSessionId()

서버 프로세스가 활성인 경우 현재 서버 프로세스에서 호스팅하고 있는 게임 세션의 ID를 가져옵니다.

게임 세션으로 활성화되지 않은 유휴 프로세스의 경우 호출은 Success=TrueGameSessionId=""(빈 문자열)를 반환합니다.

구문

AwsStringOutcome GetGameSessionId()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 게임 세션 ID를 AwsStringOutcome 객체로 반환합니다. 실패하면 오류 메시지를 반환합니다.

var getGameSessionIdOutcome = GameLiftServerAPI.GetGameSessionId();

GetInstanceCertificate()

플릿 및 해당 인스턴스와 연결된 pem 인코딩된 TLS 인증서의 파일 위치를 검색합니다. AWS Certificate Manager는 인증서 구성이 GENERATED로 설정된 새 플릿을 생성할 때 이 인증서를 생성합니다. 이 인증서를 사용하여 게임 클라이언트와 보안 연결을 설정하고 클라이언트/서버 통신을 암호화합니다

구문

GetInstanceCertificateOutcome GetInstanceCertificate();

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 인스턴스에 저장된 플릿의 TLS 인증서 파일과 인증서 체인 위치를 포함한 GetInstanceCertificateOutcome 객체를 반환합니다. 인증서 체인에서 추출한 루트 인증서 파일도 인스턴스에 저장됩니다. 실패하면 오류 메시지를 반환합니다.

인증서 및 인증서 체인 데이터에 대한 자세한 내용은 AWS Certificate Manager API 참조의 GetCertificate 응답 요소를 참조하세요.

var getInstanceCertificateOutcome = GameLiftServerAPI.GetInstanceCertificate();

GetSdkVersion()

현재 서버 프로세스에 빌드된 SDK 버전 번호를 반환합니다.

구문

AwsStringOutcome GetSdkVersion()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 현재 SDK 버전을 AwsStringOutcome 객체로 반환합니다. 반환된 문자열에는 버전 번호만(예: “3.1.5”)을 포함합니다. 실패하면 오류 메시지를 반환합니다.

var getSdkVersionOutcome = GameLiftServerAPI.GetSdkVersion();

GetTerminationTime()

종료 시간을 사용할 수 있는 경우 서버 프로세스가 종료되도록 예약된 시간을 반환합니다. 서버 프로세스는 Amazon GameLift 서비스에서 onProcessTerminate() 콜백을 수신한 후 이 작업을 수행합니다. Amazon GameLift는 다음 이유로 onProcessTerminate()를 호출할 수 있습니다. (1) 상태 불량의 경우(서버 프로세스가 상태 불량을 보고했거나 Amazon GameLift에 응답하지 않은 경우, (2) 스케일 다운 이벤트 중에 인스턴스를 종료하는 경우 또는 (3) 스팟 인스턴스 중단으로 인해 인스턴스가 종료되는 경우.

프로세스가 onProcessTerminate() 콜백을 수신할 때 반환되는 값은 예상 종료 시간입니다. 프로세스가 onProcessTerminate() 콜백을 받지 못한 경우 오류 메시지가 반환됩니다. 서버 프로세스 종료에 대해 자세히 알아보세요.

구문

AwsDateTimeOutcome GetTerminationTime()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 종료 시간을 AwsDateTimeOutcome 객체로 반환합니다. 값은 종료 시간이며, 0001 00:00:00 이후 경과된 틱 수로 표시됩니다. 예를 들어, 날짜 시간 값인 2020-09-13 12:26:40 -000Z는 637355968000000000 틱과 같습니다. 사용 가능한 종료 시간이 없는 경우 오류 메시지를 반환합니다.

var getTerminationTimeOutcome = GameLiftServerAPI.GetTerminationTime();

InitSDK()

Amazon GameLift SDK를 초기화합니다. 이 메서드는 다른 Amazon GameLift 관련 초기화가 진행되기 전, 시작 시 호출되어야 합니다.

구문

InitSDKOutcome InitSDK()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하는 경우, 서버 프로세스가 ProcessReady()를 호출할 준비가 되었음을 나타내는 InitSdkOutcome 객체를 반환합니다.

var initSDKOutcome = GameLiftServerAPI.InitSDK();

ProcessEnding()

Amazon GameLift 서비스에 서버 프로세스를 중단할 준비가 되었음을 알립니다. 이 메서드는 모든 활성 게임 세션의 종료 등, 다른 모든 정리 작업 이후에 호출되어야 합니다. 이 메서드는 종료 코드 0으로 종료해야 합니다. 0이 아닌 종료 코드를 사용하면 프로세스가 정상적으로 종료되지 않았다는 이벤트 메시지가 표시됩니다.

코드를 0으로 메서드가 종료되면 종료 코드를 성공시켜 프로세스를 종료할 수 있습니다. 오류 코드를 표시하여 프로세스를 종료할 수도 있습니다. 오류 코드를 남기고 종료하면 플릿 이벤트는 프로세스가 비정상적으로 종료(SERVER_PROCESS_TERMINATED_UNHEALTHY)되었음을 나타냅니다.

구문

GenericOutcome ProcessEnding()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 실패와 함께 오류 메시지로 구성된 일반적인 결과를 반환합니다.

var processEndingOutcome = GameLiftServerAPI.ProcessEnding(); if (processReadyOutcome.Success) Environment.Exit(0); // otherwise, exit with error code Environment.Exit(errorCode);

ProcessReady()

Amazon GameLift 서비스에 서버 프로세스가 게임 세션을 호스팅할 준비가 되었음을 알립니다. 성공적으로 InitSDK()를 호출하고, 서버 프로세스가 게임 세션을 호스트하기 전에 수행해야 하는 설정 작업을 완료한 후에만 이 메서드를 호출할 수 있습니다. 이 메서드는 프로세스당 한 번만 호출해야 합니다.

구문

GenericOutcome ProcessReady(ProcessParameters processParameters)

파라미터

processParameters

다음 서버 프로세스 관련 정보를 전달하는 ProcessParameters 객체입니다.

  • 게임 서버 코드에 구현되어 있는 콜백 메서드의 이름으로, 서버 프로세스와 통신할 수 있도록 Amazon GameLift 서비스가 호출하는 메서드입니다.

  • 서버 프로세스가 수신하는 포트 번호입니다.

  • Amazon GameLift가 캡처 및 저장하도록 하려는 모든 게임 세션별 파일에 대한 경로입니다.

필수 여부: 예

반환 값

성공 또는 실패와 함께 오류 메시지로 구성된 일반적인 결과를 반환합니다.

이 예에서는 ProcessReady() 호출 및 위임 함수 구현을 모두 보여줍니다.

// Set parameters and call ProcessReady var processParams = new ProcessParameters( this.OnGameSession, this.OnProcessTerminate, this.OnHealthCheck, this.OnGameSessionUpdate, port, new LogParameters(new List<string>() // Examples of log and error files written by the game server { "C:\\game\\logs", "C:\\game\\error" }) ); var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParams); // Implement callback functions void OnGameSession(GameSession gameSession) { // game-specific tasks when starting a new game session, such as loading map // When ready to receive players var activateGameSessionOutcome = GameLiftServerAPI.ActivateGameSession(); } void OnProcessTerminate() { // game-specific tasks required to gracefully shut down a game session, // such as notifying players, preserving game state data, and other cleanup var ProcessEndingOutcome = GameLiftServerAPI.ProcessEnding(); } bool OnHealthCheck() { bool isHealthy; // complete health evaluation within 60 seconds and set health return isHealthy; }

RemovePlayerSession()

Amazon GameLift 서비스에 지정된 플레이어 세션 ID의 플레이어가 서버 프로세스로부터 연결이 해제되었음을 알립니다. 이에 대한 응답으로, Amazon GameLift가 플레이어 슬롯을 새 플레이어에 할당할 수 있는 사용 가능 상태로 변경합니다.

구문

GenericOutcome RemovePlayerSession(String playerSessionId)

파라미터

playerSessionId

새로운 플레이어 세션이 생성되었을 때 Amazon GameLift가 발행한 고유 ID입니다. 플레이어 세션 ID는 PlayerSession 객체에서 지정되며, 이 객체는 GameLift API 작업 StartGameSessionPlacement, CreateGameSession, DescribeGameSessionPlacement 또는 DescribePlayerSessions에 대한 클라이언트 호출에 응답하여 반환됩니다.

유형: 문자열

필수 여부: 예

반환 값

성공 또는 실패와 함께 오류 메시지로 구성된 일반적인 결과를 반환합니다.

Aws::GameLift::GenericOutcome disconnectOutcome = Aws::GameLift::Server::RemovePlayerSession(playerSessionId);

StartMatchBackfill()

FlexMatch를 통해 생성된 게임 세션에서 열린 슬롯에 참여할 새로운 플레이어를 찾는 요청을 보냅니다. AWS SDK 작업 StartMatchBackfill()도 참조하세요. 이 작업을 사용하면 게임 세션을 호스팅하는 게임 서버 프로세스에서 매치 채우기 요청을 시작할 수 있습니다. FlexMatch 채우기 기능에 대해 자세히 알아보세요.

이 작업은 비동기식입니다. 새로운 플레이어가 성공적으로 매치되면 Amazon GameLift 서비스는 콜백 함수 OnUpdateGameSession()을 사용하여 업데이트된 매치메이커 데이터를 전달합니다.

서버 프로세스는 한 번에 하나의 활성 매치 채우기 요청만 할 수 있습니다. 새 요청을 보내려면 먼저 StopMatchBackfill()을 호출하여 원본 요청을 취소해야 합니다.

구문

StartMatchBackfillOutcome StartMatchBackfill (StartMatchBackfillRequest startBackfillRequest);

파라미터

StartMatchBackfillRequest

다음 정보를 전달하는 StartMatchBackfillRequest 객체입니다.

  • 채우기 요청에 할당할 티켓 ID. 이 정보를 선택 사항입니다. ID를 제공하지 않으면 Amazon GameLift가 ID를 자동 생성합니다.

  • 요청을 보낼 매치메이커. 전체 구성 ARN이 필요합니다. 이 값은 게임 세션의 매치메이커 데이터에서 수집할 수 있습니다.

  • 백필(backfill) 중인 게임 세션의 ID.

  • 게임 세션의 현재 플레이어에 대해 사용 가능한 매치메이킹 데이터.

필수 여부: 예

반환 값

매치 채우기 티켓 ID와 함께 StartMatchBackfillOutcome 객체를 반환하거나 오류 메시지를 포함한 결함이 있는 StartMatchBackfillOutcome 객체를 반환합니다.

// Build a backfill request var startBackfillRequest = new AWS.GameLift.Server.Model.StartMatchBackfillRequest() { TicketId = "a ticket ID", //optional MatchmakingConfigurationArn = "the matchmaker configuration ARN", GameSessionId = GameLiftServerAPI.GetGameSessionId().Result, // gets ID for current game session //get player data for all currently connected players MatchmakerData matchmakerData = MatchmakerData.FromJson(gameSession.MatchmakerData); // gets matchmaker data for current players // get matchmakerData.Players // remove data for players who are no longer connected Players = ListOfPlayersRemainingInTheGame }; // Send backfill request var startBackfillOutcome = GameLiftServerAPI.StartMatchBackfill(startBackfillRequest); // Implement callback function for backfill void OnUpdateGameSession(GameSession myGameSession) { // game-specific tasks to prepare for the newly matched players and update matchmaker data as needed }

StopMatchBackfill()

StartMatchBackfill()을 통해 생성된 활성 매치 채우기 요청을 취소합니다. AWS SDK 작업 StopMatchmaking()도 참조하세요. FlexMatch 채우기 기능에 대해 자세히 알아보세요.

구문

GenericOutcome StopMatchBackfill (StopMatchBackfillRequest stopBackfillRequest);

파라미터

StopMatchBackfillRequest

취소할 매치메이킹 티켓을 식별하는 StopMatchBackfillRequest 객체입니다.

  • 취소 중인 채우기 요청에 할당한 티켓 ID

  • 채우기 요청을 보낸 매치메이커

  • 채우기 요청과 연결된 게임 세션

필수 여부: 예

반환 값

성공 또는 실패와 함께 오류 메시지로 구성된 일반적인 결과를 반환합니다.

// Set backfill stop request parameters var stopBackfillRequest = new AWS.GameLift.Server.Model.StopMatchBackfillRequest() { TicketId = "a ticket ID", //optional, if not provided one is autogenerated MatchmakingConfigurationArn = "the matchmaker configuration ARN", //from the game session matchmaker data GameSessionId = GameLiftServerAPI.GetGameSessionId().Result //gets the ID for the current game session }; var stopBackfillOutcome = GameLiftServerAPI.StopMatchBackfillRequest(stopBackfillRequest);

TerminateGameSession()

버전 4.0.1 에서는 이 메서드를 사용하지 않습니다. 대신 게임 세션이 종료된 후에 서버 프로세스가 ProcessEnding()을 호출해야 합니다.

Amazon GameLift 서비스에 서버 프로세스가 현재 게임 세션을 종료했음을 알립니다. 이 작업은 서버 프로세스가 활성 상태를 유지하고 새 게임 세션을 호스팅할 준비가 되면 호출됩니다. 서버 프로세스를 즉시 사용하여 새 게임 세션을 호스팅할 수 있음을 Amazon GameLift에 알리기 때문에 게임 세션 종료 절차가 완료된 후에만 호출해야 합니다.

게임 세션이 중지된 후 서버 프로세스가 종료되는 경우에는 이 작업이 호출되지 않습니다. 대신 ProcessEnding()을 호출하여 게임 세션과 서버 프로세스가 모두 종료되었음을 알립니다.

구문

GenericOutcome TerminateGameSession()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 실패와 함께 오류 메시지로 구성된 일반적인 결과를 반환합니다.

이 예는 게임 세션을 마치는 서버 프로세스를 보여줍니다.

// game-specific tasks required to gracefully shut down a game session, // such as notifying players, preserving game state data, and other cleanup var terminateGameSessionOutcome = GameLiftServerAPI.TerminateGameSession(); var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParams);

UpdatePlayerSessionCreationPolicy()

현재 게임 세션의 새 플레이어 세션 수락 가능성을 업데이트합니다. 모든 새 플레이어 세션을 수락하거나 거부하도록 게임 세션을 설정할 수 있습니다. (Amazon GameLift Service API 참조의 UpdateGameSession() 작업도 참조하세요.)

구문

GenericOutcome UpdatePlayerSessionCreationPolicy(PlayerSessionCreationPolicy playerSessionPolicy)

파라미터

newPlayerSessionPolicy

게임 세션이 새 플레이어를 수락하는지 여부를 나타내는 문자열 값입니다.

유형: PlayerSessionCreationPolicy 열거형. 유효한 값으로는 다음이 포함됩니다.

  • ACCEPT_ALL - 모든 새 플레이어 세션을 수락합니다.

  • DENY_ALL - 모든 새 플레이어 세션을 거부합니다.

필수 여부: 예

반환 값

성공 또는 실패와 함께 오류 메시지로 구성된 일반적인 결과를 반환합니다.

이 예는 모든 플레이어를 수락하도록 현재 게임 세션의 참여 정책을 설정합니다.

var updatePlayerSessionCreationPolicyOutcomex = GameLiftServerAPI.UpdatePlayerSessionCreationPolicy(PlayerSessionCreationPolicy.ACCEPT_ALL);