기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon GameLift Server SDK for Go: 작업
Amazon GameLift Go 서버 SDK 5.x 참조를 사용하여 호스팅을 위한 멀티플레이어 게임을 Amazon 와 통합합니다 GameLift. 통합 프로세스에 대한 지침은 섹션을 참조하세요 GameLift 게임 서버에 Amazon 추가.
GameLiftServerAPI.go
는 Go 서버 SDK 작업을 정의합니다.
Amazon GameLift Server SDK for Go: 데이터 유형
작업
- GetSdkVersion()
- 초기화SDK()
- ProcessReady()
- ProcessEnding()
- ActivateGameSession()
- UpdatePlayerSessionCreationPolicy()
- GetGameSessionId()
- GetTerminationTime()
- AcceptPlayerSession()
- RemovePlayerSession()
- DescribePlayerSessions()
- StartMatchBackfill()
- StopMatchBackfill()
- GetComputeCertificate()
- GetFleetRoleCredentials()
- Destroy()
GetSdkVersion()
서버 프로세스에 SDK 내장된 의 현재 버전 번호를 반환합니다.
구문
func GetSdkVersion() (string, error)
반환 값
성공하면 는 현재 SDK 버전을 문자열로 반환합니다. 반환된 문자열에는 버전 번호(예: 5.0.0
)가 포함됩니다. 실패하면 오류 메시지(예: common.SdkVersionDetectionFailed
)를 반환합니다.
예
version, err := server.GetSdkVersion()
초기화SDK()
Amazon 를 초기화합니다 GameLift SDK. Amazon과 관련된 다른 초기화가 GameLift 발생하기 전에 시작 시 이 메서드를 호출합니다. 이 메서드는 서버와 Amazon GameLift 서비스 간의 통신을 설정합니다.
구문
func InitSDK(params ServerParameters) error
파라미터
- ServerParameters
-
Amazon에서 게임 서버를 초기화하려면 GameLift Anywhere 플릿 , 다음 정보로
ServerParameters
객체를 구성합니다.-
게임 서버에 연결하는 데 WebSocket 사용되는 URL의 .
-
게임 서버를 호스팅하는 데 사용되는 프로세스의 ID입니다.
-
게임 서버 프로세스를 호스팅하는 컴퓨팅의 ID입니다.
-
Amazon이 포함된 Amazon GameLift 플릿의 ID GameLift Anywhere 컴퓨팅.
-
Amazon GameLift 작업에서 생성된 권한 부여 토큰입니다.
Amazon GameLift 관리형 EC2플릿에서 게임 서버를 초기화하려면 파라미터가 없는
ServerParameters
객체를 구성하세요. 이 호출을 통해 Amazon GameLift 에이전트는 컴퓨팅 환경을 설정하고 자동으로 Amazon GameLift 서비스에 연결합니다. -
반환 값
성공하는 경우, 서버 프로세스가 ProcessReady()를 호출할 준비가 되었음을 나타내는 nil
오류를 반환합니다.
참고
Anywhere 플릿에 배포된 게임 빌드에 대한 InitSDK()
로의 호출이 실패하는 경우 빌드 리소스를 생성할 때 사용된 ServerSdkVersion
파라미터를 확인합니다. 이 값을 사용 중인 서버 SDK 버전으로 명시적으로 설정해야 합니다. 이 파라미터의 기본값은 4.x이며 호환되지 않습니다. 이 문제를 해결하려면 새 빌드를 생성하여 새 플릿에 배포해야 합니다.
예
Amazon GameLift Anywhere example
//Define the server parameters serverParameters := ServerParameters { WebSocketURL: "
wss://us-west-1.api.amazongamelift.com
", ProcessID: "PID1234
", HostID: "HardwareAnywhere
", FleetID: "aarn:aws:gamelift:us-west-1:111122223333:fleet/fleet-9999ffff-88ee-77dd-66cc-5555bbbb44aa
", AuthToken: "1111aaaa-22bb-33cc-44dd-5555eeee66ff
" } //Call InitSDK to establish a local connection with the GameLift agent to enable further communication. err := server.InitSDK(serverParameters)
Amazon GameLift 관리형 EC2 예제
//Define the server parameters serverParameters := ServerParameters {} //Call InitSDK to establish a local connection with the GameLift agent to enable further communication. err := server.InitSDK(serverParameters)
ProcessReady()
서버 프로세스가 게임 세션을 호스팅할 준비가 GameLift 되었음을 Amazon에 알립니다. 초기화SDK() 호출 후 이 메서드를 호출합니다. 이 메서드는 프로세스당 한 번만 호출해야 합니다.
구문
func ProcessReady(param ProcessParameters) error
파라미터
- ProcessParameters
-
다음 서버 프로세스 관련 정보를 전달하는 ProcessParameters 객체입니다.
-
Amazon GameLift 서비스가 서버 프로세스와 통신하기 위해 호출하는 게임 서버 코드에 구현된 콜백 메서드의 이름입니다.
-
서버 프로세스가 수신하는 포트 번호입니다.
-
Amazon에서 GameLift 캡처하고 저장하려는 게임 세션별 파일의 경로가 포함된 LogParameters 데이터 유형입니다.
-
반환 값
메서드가 실패하면 오류 메시지와 함께 오류를 반환합니다. 메서드가 성공한 경우 nil
를 반환합니다.
예
이 예에서는 ProcessReady() 호출 및 위임 함수 구현을 모두 보여줍니다.
// Define the process parameters processParams := ProcessParameters { OnStartGameSession: gameProcess.OnStartGameSession, OnUpdateGameSession: gameProcess.OnGameSessionUpdate, OnProcessTerminate: gameProcess.OnProcessTerminate, OnHealthCheck: gameProcess.OnHealthCheck, Port:
port
, LogParameters: LogParameters { // logging and error example []string {"C:\\game\\logs", "C:\\game\\error"
} } } err := server.ProcessReady(processParams)
ProcessEnding()
서버 프로세스가 종료되고 GameLift 있음을 Amazon에 알립니다. 다른 모든 정리 작업(활성 게임 세션 종료 포함) 후 프로세스를 종료하기 전에 이 방법을 호출합니다. ProcessEnding()
의 결과에 따라 프로세스가 성공(0) 또는 오류(-1)로 종료되고 플릿 이벤트가 생성됩니다. 프로세스가 오류로 종료되면 생성된 플릿 이벤트는 입니다SERVER_PROCESS_TERMINATED_UNHEALTHY
.
구문
func ProcessEnding() error
반환 값
0 오류 코드 또는 정의된 오류 코드를 반환합니다.
예
// operations to end game sessions and the server process defer func() { err := server.ProcessEnding() server.Destroy() if err != nil { fmt.Println("ProcessEnding() failed. Error: ", err) os.Exit(-1) } else { os.Exit(0) } }
ActivateGameSession()
서버 프로세스가 게임 세션을 활성화했으며 이제 플레이어 연결을 수신할 준비가 GameLift 되었음을 Amazon에 알립니다. 이 작업은 모든 게임 세션 초기화 후 onStartGameSession()
콜백 함수의 일부로 호출됩니다.
구문
func ActivateGameSession() error
반환 값
메서드가 실패하면 오류 메시지와 함께 오류를 반환합니다.
예
이 예에서는 onStartGameSession()
위임 함수의 일부로 ActivateGameSession()
이 호출되는 것을 보여줍니다.
func OnStartGameSession(GameSession gameSession) { // game-specific tasks when starting a new game session, such as loading map // Activate when ready to receive players err := server.ActivateGameSession(); }
UpdatePlayerSessionCreationPolicy()
현재 게임 세션의 새 플레이어 세션 수락 가능성을 업데이트합니다. 모든 새 플레이어 세션을 수락하거나 거부하도록 게임 세션을 설정할 수 있습니다.
구문
func UpdatePlayerSessionCreationPolicy(policy model.PlayerSessionCreationPolicy) error
파라미터
- playerSessionCreation정책
-
게임 세션이 새 플레이어를 수락하는지 여부를 나타내는 문자열 값입니다.
유효한 값으로는 다음이 포함됩니다.
-
model.AcceptAll
- 모든 새 플레이어 세션을 수락합니다. -
model.DenyAll
- 모든 새 플레이어 세션을 거부합니다.
-
반환 값
오류가 발생하면 오류 메시지와 함께 오류를 반환합니다.
예
이 예는 모든 플레이어를 수락하도록 현재 게임 세션의 참여 정책을 설정합니다.
err := server.UpdatePlayerSessionCreationPolicy(
model.AcceptAll
)
GetGameSessionId()
활성 서버 프로세스가 호스팅된 게임 세션의 ID를 가져옵니다.
구문
func GetGameSessionID() (string, error)
파라미터
이 작업에는 파라미터가 없습니다.
반환 값
성공하면 게임 세션 ID 및 nil 오류를 반환합니다. 게임 세션으로 활성화되지 않은 유휴 프로세스의 경우 호출은 빈 문자열과 nil
오류를 반환합니다.
예
gameSessionID, err := server.GetGameSessionID()
GetTerminationTime()
종료 시간을 사용할 수 있는 경우 서버 프로세스가 종료되도록 예약된 시간을 반환합니다. 서버 프로세스는 Amazon 에서 onProcessTerminate()
콜백을 수신한 후 이 작업을 수행합니다 GameLift. Amazon은 다음과 같은 이유로 onProcessTerminate()
를 GameLift 호출합니다.
-
서버 프로세스가 불량한 상태를 보고했거나 Amazon 에 응답하지 않은 경우 GameLift.
-
스케일 다운 이벤트 중에 인스턴스를 종료하는 경우
-
스팟 인스턴스 중단으로 인해 인스턴스가 종료되는 경우
구문
func GetTerminationTime() (int64, error)
반환 값
성공하면 서버 프로세스가 종료될 예정인 타임스탬프(Epoch 초) 및 nil
오류 종료를 반환합니다. 값은 종료 시간이며, 0001 00:00:00
에서 경과된 틱 수로 표시됩니다. 예를 들어, 날짜 시간 값 2020-09-13 12:26:40 -000Z
는 637355968000000000
틱 수와 같습니다. 사용 가능한 종료 시간이 없는 경우 오류 메시지를 반환합니다.
예
terminationTime, err := server.GetTerminationTime()
AcceptPlayerSession()
지정된 플레이어 세션 ID를 가진 플레이어 GameLift 가 서버 프로세스에 연결되었으며 검증이 필요함을 Amazon에 알립니다. Amazon은 플레이어 세션 ID가 유효한지 GameLift 확인합니다. 플레이어 세션이 검증되면 Amazon은 플레이어 슬롯의 상태를 에서 RESERVED
로 GameLift 변경합니다ACTIVE
.
구문
func AcceptPlayerSession(playerSessionID string) error
파라미터
playerSessionId
-
새 플레이어 세션이 생성될 GameLift 때 Amazon에서 발급한 고유 ID입니다.
반환 값
성공 또는 실패와 함께 오류 메시지로 구성된 일반적인 결과를 반환합니다.
예
이 예제에서는 유효하지 않은 플레이어 세션 의 검증 및 거부를 포함하는 연결 요청을 처리합니다IDs.
func ReceiveConnectingPlayerSessionID(conn Connection, playerSessionID string) { err := server.AcceptPlayerSession(
playerSessionID
) if err != nil { connection.Accept() } else { connection.Reject(err.Error()) } }
RemovePlayerSession()
플레이어 GameLift 가 서버 프로세스에서 연결 해제되었음을 Amazon에 알립니다. 이에 대한 응답으로 Amazon은 플레이어 슬롯을 사용 가능으로 GameLift 변경합니다.
구문
func RemovePlayerSession(playerSessionID string) error
파라미터
playerSessionId
-
새 플레이어 세션이 생성될 GameLift 때 Amazon에서 발급한 고유 ID입니다.
반환 값
성공 또는 실패와 함께 오류 메시지로 구성된 일반적인 결과를 반환합니다.
예
err := server.RemovePlayerSession(
playerSessionID
)
DescribePlayerSessions()
설정, 세션 메타데이터 및 플레이어 데이터 등의 플레이어 세션 데이터를 가져옵니다. 이 메서드를 사용하여 다음에 대한 정보를 얻을 수 있습니다.
-
단일 플레이어 세션
-
게임 세션의 모든 플레이어 세션
-
단일 플레이어 ID와 연결된 모든 플레이어 세션
구문
func DescribePlayerSessions(req request.DescribePlayerSessionsRequest) (result.DescribePlayerSessionsResult, error) { return srv.describePlayerSessions(&req) }
파라미터
- DescribePlayerSessionsRequest
-
검색할 플레이어 세션을 설명하는
DescribePlayerSessionsRequest
객체입니다.
반환 값
성공하는 경우, 요청 파라미터에 적합한 플레이어 세션 객체 집합이 들어 있는 DescribePlayerSessionsResult
객체를 반환합니다.
예
다음은 지정된 게임 세션에 활성 상태로 연결되어 있는 모든 플레이어 세션을 요청하는 예입니다. 제한 값을 생략NextToken하고 10으로 설정하면 Amazon은 요청과 일치하는 처음 10개의 플레이어 세션 레코드를 GameLift 반환합니다.
// create request describePlayerSessionsRequest := request.NewDescribePlayerSessions() describePlayerSessionsRequest.GameSessionID, _ = server.GetGameSessionID() // get ID for the current game session describePlayerSessionsRequest.Limit =
10
// return the first 10 player sessions describePlayerSessionsRequest.PlayerSessionStatusFilter = "ACTIVE
" // Get all player sessions actively connected to the game session describePlayerSessionsResult, err := server.DescribePlayerSessions(describePlayerSessionsRequest)
StartMatchBackfill()
로 생성된 게임 세션에서 열린 슬롯에 대한 새 플레이어를 찾으라는 요청을 보냅니다 FlexMatch. 자세한 내용은 FlexMatch 채우기 기능 을 참조하세요.
이 작업은 비동기식입니다. 새 플레이어가 일치하면 Amazon은 콜백 함수 를 사용하여 업데이트된 매치메이커 데이터를 GameLift 제공합니다OnUpdateGameSession()
.
서버 프로세스는 한 번에 하나의 활성 매치 채우기 요청만 할 수 있습니다. 새 요청을 보내려면 먼저 StopMatchBackfill()을 호출하여 원본 요청을 취소해야 합니다.
구문
func StartMatchBackfill(req request.StartMatchBackfillRequest) (result.StartMatchBackfillResult, error)
파라미터
- StartMatchBackfillRequest
-
StartMatchBackfillRequest 객체는 다음 정보를 전달합니다.
-
채우기 요청에 할당할 티켓 ID. 이 정보는 선택 사항입니다. ID를 입력하지 않으면 Amazon에서 ID를 GameLift 생성합니다.
-
요청을 보낼 매치메이커. 전체 구성ARN이 필요합니다. 이 값은 게임 세션의 매치메이커 데이터에 있습니다.
-
채울 게임 세션의 ID입니다.
-
게임 세션의 현재 플레이어에 대해 사용 가능한 매치메이킹 데이터입니다.
-
반환 값
매치 채우기 티켓 ID와 함께 StartMatchBackfillResult
객체나 오류 메시지를 포함한 결함을 반환합니다.
예
// form the request startBackfillRequest := request.NewStartMatchBackfill() startBackfillRequest.RequestID = "
1111aaaa-22bb-33cc-44dd-5555eeee66ff
" // optional startBackfillRequest.MatchmakingConfigurationArn = "arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MyMatchmakerConfig
" var matchMaker model.MatchmakerData if err := matchMaker.UnmarshalJSON([]byte(gameSession.MatchmakerData)); err != nil { return } startBackfillRequest.Players = matchMaker.Players res, err := server.StartMatchBackfill(startBackfillRequest) // Implement callback function for backfill func OnUpdateGameSession(myGameSession model.GameSession) { // game-specific tasks to prepare for the newly matched players and update matchmaker data as needed }
StopMatchBackfill()
활성 매치 채우기 요청을 취소합니다. 자세한 내용은 FlexMatch 채우기 기능 을 참조하세요.
구문
func StopMatchBackfill(req request.StopMatchBackfillRequest) error
파라미터
- StopMatchBackfillRequest
-
취소할 매치메이킹 티켓을 식별하는 StopMatchBackfillRequest 객체:
-
채우기 요청에 할당된 티켓 ID
-
채우기 요청을 보낸 매치메이커
-
채우기 요청과 연결된 게임 세션
-
반환 값
성공 또는 실패와 함께 오류 메시지로 구성된 일반적인 결과를 반환합니다.
예
stopBackfillRequest := request.NewStopMatchBackfill() // Use this function to create request stopBackfillRequest.TicketID = "
1111aaaa-22bb-33cc-44dd-5555eeee66ff
" stopBackfillRequest.MatchmakingConfigurationArn = "arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MyMatchmakerConfig
" //error err := server.StopMatchBackfill(stopBackfillRequest)
GetComputeCertificate()
게임 서버와 게임 클라이언트 간의 네트워크 연결을 암호화하는 데 사용되는 TLS 인증서 경로를 검색합니다. Amazon에 컴퓨팅 디바이스를 등록할 때 인증서 경로를 사용할 수 있습니다. GameLift Anywhere 플릿. 자세한 내용은 RegisterCompute를 참조하세요.
구문
func GetComputeCertificate() (result.GetComputeCertificateResult, error)
반환 값
다음을 포함하는 GetComputeCertificateResult
객체를 반환합니다.
-
CertificatePath: 컴퓨팅 리소스의 TLS 인증서 경로입니다. Amazon GameLift 관리형 플릿을 사용하는 경우 이 경로에는 다음이 포함됩니다.
-
certificate.pem
: 최종 사용자 인증서입니다. 전체 인증서 체인은 이 인증서에 추가된certificateChain.pem
의 조합입니다. -
certificateChain.pem
: 루트 인증서와 중간 인증서를 포함하는 인증서 체인입니다. -
rootCertificate.pem
: 루트 인증서입니다. -
privateKey.pem
: 최종 사용자 인증서의 프라이빗 키입니다.
-
-
ComputeName: 컴퓨팅 리소스의 이름입니다.
예
tlsCertificate, err := server.GetFleetRoleCredentials(getFleetRoleCredentialsRequest)
GetFleetRoleCredentials()
생성한 서비스 역할 자격 증명을 검색하여 다른 에 대한 권한을 Amazon AWS 서비스 로 확장합니다 GameLift. 이러한 자격 증명을 통해 게임 서버는 AWS 리소스를 사용할 수 있습니다. 자세한 내용은 Amazon에 대한 IAM 서비스 역할 설정 GameLift 단원을 참조하십시오.
구문
func GetFleetRoleCredentials( req request.GetFleetRoleCredentialsRequest, ) (result.GetFleetRoleCredentialsResult, error) { return srv.getFleetRoleCredentials(&req) }
파라미터
- GetFleetRoleCredentialsRequest
-
AWS 리소스에 대한 제한된 액세스를 게임 서버로 확장하는 역할 자격 증명입니다.
반환 값
다음을 포함하는 GetFleetRoleCredentialsResult
객체를 반환합니다.
-
AssumedRoleUserArn - 서비스 역할이 속한 사용자의 Amazon 리소스 이름(ARN)입니다.
-
AssumedRoleId - 서비스 역할이 속한 사용자의 ID입니다.
-
AccessKeyId - AWS 리소스에 대한 액세스를 인증하고 제공하기 위한 액세스 키 ID입니다.
-
SecretAccessKey - 인증을 위한 보안 액세스 키 ID입니다.
-
SessionToken - AWS 리소스와 상호 작용하는 현재 활성 세션을 식별하는 토큰입니다.
-
Expiration - 세션 자격 증명이 만료될 때까지 남은 시간입니다.
예
// form the customer credentials request getFleetRoleCredentialsRequest := request.NewGetFleetRoleCredentials() getFleetRoleCredentialsRequest.RoleArn = "
arn:aws:iam::123456789012:role/service-role/exampleGameLiftAction
" credentials, err := server.GetFleetRoleCredentials(getFleetRoleCredentialsRequest)
Destroy()
Amazon GameLift 게임 서버를 메모리SDK에서 해제합니다. ProcessEnding()
이후 및 프로세스를 종료하기 전에 이 메서드를 호출하는 것이 가장 좋습니다. Anywhere 플릿을 사용하고 있고 모든 게임 세션 후 서버 프로세스를 종료하지 않는 경우 InitSDK()
를 호출Destroy()
한 다음 다시 초기화한 다음 Amazon에 프로세스가 로 게임 세션을 호스팅할 준비가 GameLift 되었음을 알립니다ProcessReady()
.
구문
func Destroy() error { return srv.destroy() }
반환 값
메서드가 실패하면 오류 메시지와 함께 오류를 반환합니다.
예
// operations to end game sessions and the server process defer func() { err := server.ProcessEnding() server.Destroy() if err != nil { fmt.Println("ProcessEnding() failed. Error: ", err) os.Exit(-1) } else { os.Exit(0) } }