C# 및 Unity용 Amazon GameLift Server SDK 5.x: 작업 - Amazon GameLift

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

C# 및 Unity용 Amazon GameLift Server SDK 5.x: 작업

Amazon GameLift C# 서버 SDK 5.x 참조를 사용하여 호스팅을 위한 멀티플레이어 게임을 Amazon 와 통합합니다 GameLift. 통합 프로세스에 대한 지침은 섹션을 참조하세요 GameLift 게임 서버에 Amazon 추가. Amazon GameLift 플러그인 for Unity를 사용하는 경우 를 참조하세요Unity용 Amazon GameLift 플러그인(서버 SDK 5.x).

C# 및 Unity용 Amazon GameLift Server SDK 5.x: 데이터 유형

GetSdkVersion()

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

구문

AwsStringOutcome GetSdkVersion();

반환 값

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

var getSdkVersionOutcome = GameLiftServerAPI.GetSdkVersion();

초기화SDK()

관리형 EC2플릿에 대해 Amazon GameLift SDK을 초기화합니다. Amazon과 관련된 다른 초기화가 GameLift 발생하기 전에 시작 시 이 메서드를 호출합니다. 이 메서드는 호스트 환경에서 서버 파라미터를 읽고 서버와 Amazon GameLift 서비스 간의 통신을 설정합니다.

구문

GenericOutcome InitSDK();

반환 값

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

//Call InitSDK to establish a local connection with the GameLift agent to enable further communication. GenericOutcome initSDKOutcome = GameLiftServerAPI.InitSDK();

초기화SDK()

에 대한 Amazon GameLift SDK을 초기화합니다.Anywhere 플릿. Amazon과 관련된 다른 초기화가 GameLift 발생하기 전에 시작 시 이 메서드를 호출합니다. 이 메서드에서는 서버와 Amazon GameLift 서비스 간의 통신을 설정하기 위해 명시적 서버 파라미터가 필요합니다.

구문

GenericOutcome InitSDK(ServerParameters serverParameters);

파라미터

ServerParameters

Amazon에서 게임 서버를 초기화하려면 GameLift Anywhere 플릿에서 다음 정보를 사용하여 ServerParameters 객체를 구성합니다.

  • 게임 서버에 연결하는 데 WebSocket 사용되는 URL의 .

  • 게임 서버를 호스팅하는 데 사용되는 프로세스의 ID입니다.

  • 게임 서버 프로세스를 호스팅하는 컴퓨팅의 ID입니다.

  • Amazon이 포함된 Amazon GameLift 플릿의 ID GameLift Anywhere 컴퓨팅.

  • Amazon GameLift 작업에서 생성된 권한 부여 토큰입니다.

반환 값

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

참고

Anywhere 플릿에 배포된 게임 빌드에 대한 InitSDK()로의 호출이 실패하는 경우 빌드 리소스를 생성할 때 사용된 ServerSdkVersion 파라미터를 확인합니다. 이 값을 사용 중인 서버 SDK 버전으로 명시적으로 설정해야 합니다. 이 파라미터의 기본값은 4.x이며 호환되지 않습니다. 이 문제를 해결하려면 새 빌드를 생성하여 새 플릿에 배포해야 합니다.

//Define the server parameters string websocketUrl = "wss://us-west-1.api.amazongamelift.com"; string processId = "PID1234"; string fleetId = "aarn:aws:gamelift:us-west-1:111122223333:fleet/fleet-9999ffff-88ee-77dd-66cc-5555bbbb44aa"; string hostId = "HardwareAnywhere"; string authToken = "1111aaaa-22bb-33cc-44dd-5555eeee66ff"; ServerParameters serverParameters = new ServerParameters(webSocketUrl, processId, hostId, fleetId, authToken); //Call InitSDK to establish a local connection with the GameLift agent to enable further communication. GenericOutcome initSDKOutcome = GameLiftServerAPI.InitSDK(serverParameters);

ProcessReady()

서버 프로세스가 게임 세션을 호스팅할 준비가 GameLift 되었음을 Amazon에 알립니다. 초기화SDK() 호출 후 이 메서드를 호출합니다. 이 메서드는 프로세스당 한 번만 호출해야 합니다.

구문

GenericOutcome ProcessReady(ProcessParameters processParameters)

파라미터

ProcessParameters

ProcessParameters 객체에는 서버 프로세스에 대한 정보가 들어 있습니다.

반환 값

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

이 예에서는 메서드 및 위임 함수 구현을 모두 보여줍니다.

// Set parameters and call ProcessReady ProcessParameters processParams = new ProcessParameters( this.OnStartGameSession, this.OnProcessTerminate, this.OnHealthCheck, this.OnUpdateGameSession, port, new LogParameters(new List<string>() // Examples of log and error files written by the game server { "C:\\game\\logs", "C:\\game\\error" }) ); GenericOutcome processReadyOutcome = GameLiftServerAPI.ProcessReady(processParams);

ProcessEnding()

서버 프로세스가 종료되고 GameLift 있음을 Amazon에 알립니다. 다른 모든 정리 작업(활성 게임 세션 종료 포함) 후 프로세스를 종료하기 전에 이 방법을 호출합니다. ProcessEnding()의 결과에 따라 프로세스가 성공(0) 또는 오류(-1)로 종료되고 플릿 이벤트가 생성됩니다. 프로세스가 오류로 종료되면 생성된 플릿 이벤트는 입니다SERVER_PROCESS_TERMINATED_UNHEALTHY.

구문

GenericOutcome ProcessEnding()

반환 값

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

이 예제에서는 성공 또는 오류 발생 시 서버 프로세스를 종료하기 전에 ProcessEnding()Destroy()를 호출합니다.

GenericOutcome processEndingOutcome = GameLiftServerAPI.ProcessEnding(); GameLiftServerAPI.Destroy(); if (processEndingOutcome.Success) { Environment.Exit(0); } else { Console.WriteLine("ProcessEnding() failed. Error: " + processEndingOutcome.Error.ToString()); Environment.Exit(-1); }

ActivateGameSession()

서버 프로세스가 게임 세션을 활성화했으며 이제 플레이어 연결을 수신할 준비가 GameLift 되었음을 Amazon에 알립니다. 이 작업은 모든 게임 세션 초기화 후 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 GenericOutcome activateGameSessionOutcome = GameLiftServerAPI.ActivateGameSession(); }

UpdatePlayerSessionCreationPolicy()

현재 게임 세션의 새 플레이어 세션 수락 가능성을 업데이트합니다. 모든 새 플레이어 세션을 수락하거나 거부하도록 게임 세션을 설정할 수 있습니다.

구문

GenericOutcome UpdatePlayerSessionCreationPolicy(PlayerSessionCreationPolicy playerSessionPolicy)

파라미터

playerSessionPolicy

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

유효한 값으로는 다음이 포함됩니다.

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

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

반환 값

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

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

GenericOutcome updatePlayerSessionPolicyOutcome = GameLiftServerAPI.UpdatePlayerSessionCreationPolicy(PlayerSessionCreationPolicy.ACCEPT_ALL);

GetGameSessionId()

활성 서버 프로세스가 호스팅된 게임 세션의 ID를 가져옵니다.

게임 세션으로 활성화되지 않은 유휴 프로세스의 경우 호출은 GameLiftError를 반환합니다.

구문

AwsStringOutcome GetGameSessionId()

반환 값

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

AwsStringOutcome getGameSessionIdOutcome = GameLiftServerAPI.GetGameSessionId();

GetTerminationTime()

종료 시간을 사용할 수 있는 경우 서버 프로세스가 종료되도록 예약된 시간을 반환합니다. 서버 프로세스는 Amazon 에서 onProcessTerminate() 콜백을 수신한 후 이 작업을 수행합니다 GameLift. Amazon은 다음과 같은 이유로 onProcessTerminate()를 GameLift 호출합니다.

  • 서버 프로세스가 불량 상태를 보고했거나 Amazon 에 응답하지 않은 경우 GameLift.

  • 스케일 다운 이벤트 중에 인스턴스를 종료하는 경우

  • 스팟 인스턴스 중단으로 인해 인스턴스가 종료되는 경우

구문

AwsDateTimeOutcome GetTerminationTime()

반환 값

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

AwsDateTimeOutcome getTerminationTimeOutcome = GameLiftServerAPI.GetTerminationTime();

AcceptPlayerSession()

지정된 플레이어 세션 ID를 가진 플레이어 GameLift 가 서버 프로세스에 연결되었으며 검증이 필요함을 Amazon에 알립니다. Amazon은 플레이어 세션 ID가 유효한지 GameLift 확인합니다. 플레이어 세션이 검증되면 Amazon은 플레이어 슬롯의 상태를 에서 RESERVED로 GameLift 변경합니다ACTIVE.

구문

GenericOutcome AcceptPlayerSession(String playerSessionId)

파라미터

playerSessionId

새 플레이어 세션이 생성될 GameLift 때 에서 발급한 고유 ID입니다.

반환 값

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

이 예제에서는 잘못된 플레이어 세션 검증 및 거부를 포함하여 연결 요청을 처리하는 함수를 보여줍니다IDs.

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

RemovePlayerSession()

플레이어 GameLift 가 서버 프로세스에서 연결 해제되었음을 Amazon에 알립니다. 이에 대한 응답으로 Amazon은 플레이어 슬롯을 사용 가능으로 GameLift 변경합니다.

구문

GenericOutcome RemovePlayerSession(String playerSessionId)

파라미터

playerSessionId

새 플레이어 세션이 생성될 GameLift 때 Amazon에서 발급한 고유 ID입니다.

반환 값

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

GenericOutcome removePlayerSessionOutcome = GameLiftServerAPI.RemovePlayerSession(playerSessionId);

DescribePlayerSessions()

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

구문

DescribePlayerSessionsOutcome DescribePlayerSessions(DescribePlayerSessionsRequest describePlayerSessionsRequest)

파라미터

DescribePlayerSessionsRequest

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

반환 값

성공하는 경우, 요청 파라미터에 적합한 플레이어 세션 객체 집합이 들어 있는 DescribePlayerSessionsOutcome 객체를 반환합니다.

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

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

StartMatchBackfill()

로 생성된 게임 세션에서 열린 슬롯의 새 플레이어를 찾으라는 요청을 보냅니다 FlexMatch. 자세한 내용은 FlexMatch 채우기 기능 을 참조하세요.

이 작업은 비동기식입니다. 새 플레이어가 일치하면 Amazon은 콜백 함수 를 사용하여 업데이트된 매치메이커 데이터를 GameLift 제공합니다OnUpdateGameSession().

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

구문

StartMatchBackfillOutcome StartMatchBackfill (StartMatchBackfillRequest startBackfillRequest);

파라미터

StartMatchBackfillRequest

StartMatchBackfillRequest 객체에는 채우기 요청에 대한 정보가 들어 있습니다.

반환 값

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

// Build a backfill request StartMatchBackfillRequest startBackfillRequest = new StartMatchBackfillRequest() { TicketId = "1111aaaa-22bb-33cc-44dd-5555eeee66ff", //optional MatchmakingConfigurationArn = "arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MyMatchmakerConfig", GameSessionId = GameLiftServerAPI.GetGameSessionId().Result, // gets ID for current game session 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 StartMatchBackfillOutcome 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()

활성 매치 채우기 요청을 취소합니다. 자세한 내용은 FlexMatch 채우기 기능 을 참조하세요.

구문

GenericOutcome StopMatchBackfill (StopMatchBackfillRequest stopBackfillRequest);

파라미터

StopMatchBackfillRequest

중단하려는 매치메이킹 티켓에 대한 세부 정보를 제공하는 StopMatchBackfillRequest 객체입니다.

반환 값

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

// Set backfill stop request parameters StopMatchBackfillRequest stopBackfillRequest = new StopMatchBackfillRequest(){ TicketId = "1111aaaa-22bb-33cc-44dd-5555eeee66ff", //optional, if not provided one is autogenerated MatchmakingConfigurationArn = "arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MyMatchmakerConfig", GameSessionId = GameLiftServerAPI.GetGameSessionId().Result //gets the ID for the current game session }; GenericOutcome stopBackfillOutcome = GameLiftServerAPI.StopMatchBackfillRequest(stopBackfillRequest);

GetComputeCertificate()

게임 서버와 게임 클라이언트 간의 네트워크 연결을 암호화하는 데 사용되는 TLS 인증서 경로를 검색합니다. Amazon에 컴퓨팅 디바이스를 등록할 때 인증서 경로를 사용할 수 있습니다. GameLift Anywhere 플릿. 자세한 내용은 섹션을 참조하세요RegisterCompute.

구문

GetComputeCertificateOutcome GetComputeCertificate();

반환 값

다음을 포함하는 GetComputeCertificateResponse 객체를 반환합니다.

  • CertificatePath: 컴퓨팅 리소스의 TLS 인증서 경로입니다. Amazon GameLift 관리형 플릿을 사용하는 경우 이 경로에는 다음이 포함됩니다.

    • certificate.pem: 최종 사용자 인증서입니다. 전체 인증서 체인은 이 인증서에 추가된 certificateChain.pem의 조합입니다.

    • certificateChain.pem: 루트 인증서와 중간 인증서를 포함하는 인증서 체인입니다.

    • rootCertificate.pem: 루트 인증서입니다.

    • privateKey.pem: 최종 사용자 인증서의 프라이빗 키입니다.

  • ComputeName: 컴퓨팅 리소스의 이름입니다.

GetComputeCertificateOutcome getComputeCertificateOutcome = GameLiftServerAPI.GetComputeCertificate();

GetFleetRoleCredentials()

Amazon이 다른 와 상호 작용 GameLift 할 수 있는 권한을 부여하는 IAM 역할 자격 증명을 검색합니다 AWS 서비스. 자세한 내용은 플릿의 다른 AWS 리소스와 통신 단원을 참조하십시오.

구문

GetFleetRoleCredentialsOutcome GetFleetRoleCredentials(GetFleetRoleCredentialsRequest request);

파라미터

GetFleetRoleCredentialsRequest

AWS 리소스에 대한 제한된 액세스를 게임 서버로 확장하는 역할 자격 증명입니다.

반환 값

GetFleetRoleCredentialsOutcome 객체를 반환합니다.

// form the fleet credentials request GetFleetRoleCredentialsRequest getFleetRoleCredentialsRequest = new GetFleetRoleCredentialsRequest(){ RoleArn = "arn:aws:iam::123456789012:role/service-role/exampleGameLiftAction" }; GetFleetRoleCredentialsOutcome GetFleetRoleCredentialsOutcome credentials = GetFleetRoleCredentials(getFleetRoleCredentialsRequest);

Destroy()

Amazon GameLift 게임 서버를 메모리SDK에서 해제합니다. ProcessEnding() 이후 및 프로세스를 종료하기 전에 이 메서드를 호출하는 것이 가장 좋습니다. Anywhere 플릿을 사용하고 있고 모든 게임 세션 후 서버 프로세스를 종료하지 않는 경우 InitSDK()를 호출Destroy()한 다음 다시 초기화한 다음 Amazon에 프로세스가 로 게임 세션을 호스팅할 준비가 GameLift 되었음을 알립니다ProcessReady().

구문

GenericOutcome Destroy()

반환 값

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

// Operations to end game sessions and the server process GenericOutcome processEndingOutcome = GameLiftServerAPI.ProcessEnding(); // Shut down and destroy the instance of the GameLift Game Server SDK GenericOutcome destroyOutcome = GameLiftServerAPI.Destroy(); // Exit the process with success or failure if (processEndingOutcome.Success) { Environment.Exit(0); } else { Console.WriteLine("ProcessEnding() failed. Error: " + processEndingOutcome.Error.ToString()); Environment.Exit(-1); }