SDK para Go do servidor Amazon GameLift: ações - Amazon GameLift

SDK para Go do servidor Amazon GameLift: ações

Use a referência do SDK 5.x do servidor Amazon GameLift Go para integrar o jogo multijogador à hospedagem com o Amazon GameLift. Para obter orientação sobre o processo de integração, consulte Adicione o Amazon GameLift ao servidor de jogos.

GameLiftServerAPI.go define as ações do SDK do servidor Go.

SDK do servidor Amazon GameLift para Go: tipos de dados

GetSdkVersion()

Retorna o número da versão atual do SDK compilado no processo de servidor.

Sintaxe

func GetSdkVersion() (string, error)

Valor de retorno

Se bem-sucedido, retornará a versão do SDK como uma sequência. A string retornada inclui o número da versão (exemplo, 5.0.0). Se não for bem-sucedido, retornará uma mensagem de erro como common.SdkVersionDetectionFailed.

Exemplo

version, err := server.GetSdkVersion()

InitSDK()

Inicializa o SDK do Amazon GameLift. Chame esse método na inicialização, antes que qualquer outra inicialização relacionada ao Amazon GameLift ocorra. Esse método configura a comunicação entre o servidor e o serviço do Amazon GameLift.

Sintaxe

func InitSDK(params ServerParameters) error

Parâmetros

Parâmetros do servidor

Para inicializar um servidor de jogos em uma frota do Amazon GameLift Anywhere, construa um objeto ServerParameters com as seguintes informações:

  • O URL do WebSocket usado para se conectar ao seu servidor de jogo.

  • O ID do processo usado para hospedar o servidor de jogos.

  • O ID do computador que hospeda os processos do seu servidor de jogos.

  • O ID da frota do Amazon GameLift contendo sua computação Anywhere do Amazon GameLift.

  • O token de autorização gerado pela operação do Amazon GameLift.

Para inicializar um servidor de jogo em uma frota EC2 gerenciada pela Amazon GameLift, construa um objeto ServerParameters sem parâmetros. Com essa chamada, o atendente do Amazon GameLift configura o ambiente computacional e se conecta automaticamente ao serviço Amazon GameLift para você.

Valor de retorno

Se for bem-sucedido, retornará um erro nil para indicar que o processo do servidor está pronto para ser chamado ProcessReady().

nota

Se as chamadas para InitSDK() estiverem falhando para compilações de jogos implantadas em frotas do Anywhere, verifique o parâmetro ServerSdkVersion usado ao criar o recurso de compilação. Você deve definir explicitamente esse valor para a versão do SDK do servidor em uso. O valor padrão desse parâmetro é 4.x, o que não é compatível. Para resolver esse problema, crie uma nova versão e implante-a em uma nova frota.

Exemplo

Exemplo do Amazon GameLift Anywhere

//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)

Exemplo de EC2 gerenciado pelo Amazon GameLift

//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()

Notifica o Amazon GameLift de que o processo do servidor está pronto para hospedar sessões do jogo. Chame esse método após invocar InitSDK(). Esse método deve ser chamado apenas uma vez por processo.

Sintaxe

func ProcessReady(param ProcessParameters) error

Parâmetros

ProcessParameters

Um objeto ProcessParameters transmite as seguintes informações sobre o processo do servidor:

  • Os nomes dos métodos de retorno de chamada implementados no código do servidor de jogos que o serviço do Amazon GameLift invoca para se comunicar com o processo do servidor.

  • O número da porta em que o processo de servidor está escutando.

  • O tipo de dados LogParameters, contém o caminho para qualquer arquivo específico da sessão de jogo que você deseja que o Amazon GameLift capture e armazene.

Valor de retorno

Retorna um erro com uma mensagem de erro se o método falhar. Se o método for bem-sucedido, ele retornará nil.

Exemplo

Este exemplo ilustra as implementações das funções de chamada e delegação 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()

Notifica o Amazon GameLift de que o processo do servidor está sendo encerrado. Chame esse método depois de todas as outras tarefas de limpeza (incluindo o encerramento da sessão ativa do jogo) e antes de encerrar o processo. Dependendo do resultado ProcessEnding(), o processo sai com sucesso (0) ou erro (-1) e gera um evento de frota. Se o processo for encerrado com um erro, o evento de frota gerado será SERVER_PROCESS_TERMINATED_UNHEALTHY.

Sintaxe

func ProcessEnding() error

Valor de retorno

Retorna um código de erro 0 ou um código de erro definido.

Exemplo

// 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()

Notifica o Amazon GameLift de que o processo do servidor ativou uma sessão do jogo e já está pronto para receber as conexões do jogador. Essa ação é chamada como parte da função de retorno de chamada onStartGameSession(), após toda a inicialização da sessão do jogo.

Sintaxe

func ActivateGameSession() error

Valor de retorno

Retorna um erro com uma mensagem de erro se o método falhar.

Exemplo

Este exemplo mostra chamado ActivateGameSession() como parte da função de delegação onStartGameSession().

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()

Atualiza a capacidade da sessão do jogo atual para aceitar novas sessões de jogador. Atualiza a capacidade da sessão do jogo atual para aceitar novas sessões de jogador.

Sintaxe

func UpdatePlayerSessionCreationPolicy(policy model.PlayerSessionCreationPolicy) error

Parâmetros

playerSessionCreationPolicy

Valor de string que indica se a sessão do jogo aceita novos jogadores.

Os valores válidos são:

  • model.AcceptAll – Aceite todas as novas sessões de jogador.

  • model.DenyAll – Recuse todas as novas sessões de jogador.

Valor de retorno

Retorna um erro com uma mensagem de erro se ocorrer uma falha.

Exemplo

Este exemplo define a política de ingresso da sessão do jogo atual para aceitar todos os jogadores.

err := server.UpdatePlayerSessionCreationPolicy(model.AcceptAll)

GetGameSessionId()

Recupera o ID da sessão de jogo hospedada pelo processo do servidor ativo.

Sintaxe

func GetGameSessionID() (string, error)

Parâmetros

Essa ação não tem um parâmetro.

Valor de retorno

Se bem-sucedido, retornará o ID da sessão de jogo e nenhum erro. Para processos inativos que ainda não foram ativados com uma sessão de jogo, a chamada retorna uma string vazia e um erro nil.

Exemplo

gameSessionID, err := server.GetGameSessionID()

GetTerminationTime()

Retorna a hora em que um processo do servidor está programado para ser desligado se essa informação estiver disponível. Um processo do servidor realiza essa ação depois de receber um retorno de chamada onProcessTerminate() do serviço Amazon GameLift. O Amazon GameLift faz chamadas onProcessTerminate() pelos motivos a seguir:

  • Quando o processo do servidor relatou problemas de saúde ou não respondeu ao Amazon GameLift.

  • Ao encerrar a instância durante um evento de redução.

  • Quando uma instância é encerrada devido a uma interrupção na instância spot.

Sintaxe

func GetTerminationTime() (int64, error)

Valor de retorno

Se for bem-sucedido, retornará o registro de data e hora em segundos em que o processo do servidor está programado para ser encerrado e um erro nil de encerramento. O valor é o tempo de rescisão, expresso em tiques decorridos de 0001 00:00:00. Por exemplo, o valor da data e hora 2020-09-13 12:26:40 -000Z é igual aos tiques 637355968000000000. Se nenhum horário de rescisão estiver disponível, o retornará uma mensagem de erro.

Exemplo

terminationTime, err := server.GetTerminationTime()

AcceptPlayerSession()

Notifica o Amazon GameLift de que um jogador com o ID da sessão do jogador especificado se conectou ao processo do servidor e precisa de validação. O Amazon GameLift verifica se o ID da sessão do jogador é válido. Depois que a sessão do jogador é validada, o Amazon GameLift altera o status do slot do jogador de RESERVED para ACTIVE.

Sintaxe

func AcceptPlayerSession(playerSessionID string) error

Parâmetros

playerSessionId

ID exclusiva emitida pelo Amazon GameLift quando uma nova sessão de jogador é criada.

Valor de retorno

Retorna um resultado genérico que consiste em sucesso ou falha com uma mensagem de erro.

Exemplo

Este exemplo trata de uma solicitação de conexão que inclui a validação e a rejeição de IDs de sessão de jogadores inválidas.

func ReceiveConnectingPlayerSessionID(conn Connection, playerSessionID string) { err := server.AcceptPlayerSession(playerSessionID) if err != nil { connection.Accept() } else { connection.Reject(err.Error()) } }

RemovePlayerSession()

Notifica o Amazon GameLift de que um jogador se desconectou do processo do servidor. Em resposta, o Amazon GameLift altera o espaço do jogador para disponível.

Sintaxe

func RemovePlayerSession(playerSessionID string) error

Parâmetros

playerSessionId

ID exclusiva emitida pelo Amazon GameLift quando uma nova sessão de jogador é criada.

Valor de retorno

Retorna um resultado genérico que consiste em sucesso ou falha com uma mensagem de erro.

Exemplo

err := server.RemovePlayerSession(playerSessionID)

DescribePlayerSessions()

Recupera dados da sessão do jogador, que incluem configurações, metadados da sessão e dados do jogador. Use esse método para obter informações sobre o seguinte:

  • Uma sessão para um jogador

  • Todas as sessões de jogador em uma sessão de jogo

  • Todas as sessões de jogadores associadas a um único ID de jogador

Sintaxe

func DescribePlayerSessions(req request.DescribePlayerSessionsRequest) (result.DescribePlayerSessionsResult, error) { return srv.describePlayerSessions(&req) }

Parâmetros

DescribePlayerSessionsRequest

Um objeto DescribePlayerSessionsRequest descreve quais sessões de jogador recuperar.

Valor de retorno

Se bem-sucedido, retorna um objeto DescribePlayerSessionsResult que contém um conjunto de objetos de sessão do jogador que atendem aos parâmetros de solicitação.

Exemplo

Este exemplo solicita todas as sessões de jogador conectadas ativamente a uma sessão de jogo especificada. Ao omitir NextToken e definir o valor Limite como 10, o Amazon GameLift retorna os primeiros 10 registros de sessão do jogador que correspondem à solicitação.

// 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()

Envia uma solicitação para encontrar novos jogadores para os slots abertos em uma sessão de jogo criada com o FlexMatch. Para obter mais informações, consulte o recurso de locação do FlexMatch.

Esta ação é assíncrona. Se novos jogadores forem combinados, o Amazon GameLift entregará os dados atualizados do marcador de jogos usando a função de retorno de chamada OnUpdateGameSession().

Um processo de servidor pode ter apenas uma solicitação de alocação de correspondência ativa por vez. Para enviar uma nova solicitação, primeiro chame StopMatchBackfill() para cancelar a solicitação original.

Sintaxe

func StartMatchBackfill(req request.StartMatchBackfillRequest) (result.StartMatchBackfillResult, error)

Parâmetros

StartMatchBackfillRequest

Um objeto StartMatchbackfillRequest comunica as seguintes informações:

  • ID do tíquete a ser atribuído à solicitação de alocação. Essas informações são opcionais; se nenhum ID for fornecido, o Amazon GameLift gerará um.

  • O marcador de jogos para o qual a solicitação é enviada. O ARN completo da configuração é necessário. Esse valor está nos dados do marcador de jogos da sessão de jogo.

  • O ID da sessão de jogo a ser preenchida.

  • Os dados disponíveis de marcação para os jogadores atuais da sessão do jogo.

Valor de retorno

Retorna um objeto StartMatchBackfillResult com o ID do tíquete de alocação de correspondência ou um falha com uma mensagem de erro.

Exemplo

// 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()

Cancela uma solicitação de alocação de correspondência ativa. Para obter mais informações, consulte o recurso de alocação do FlexMatch.

Sintaxe

func StopMatchBackfill(req request.StopMatchBackfillRequest) error

Parâmetros

StopMatchBackfillRequest

Um objeto StopMatchbackfillRequest que identifica o tíquete de matchmaking a ser cancelado:

  • O ID do tíquete atribuído à solicitação de alocação.

  • O marcador de jogo que recebeu a solicitação de alocação.

  • A sessão do jogo associada à solicitação de alocação.

Valor de retorno

Retorna um resultado genérico que consiste em sucesso ou falha com uma mensagem de erro.

Exemplo

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)

etComputeCertificate()

Recupera o caminho para o certificado TLS usado para criptografar a conexão de rede entre o servidor do jogo e o cliente do jogo. Você poderá usar o caminho do certificado ao registrar seu dispositivo computacional em uma frota Anywhere do Amazon GameLift. Para obter mais informações, consulte RegisterCompute.

Sintaxe

func GetComputeCertificate() (result.GetComputeCertificateResult, error)

Valor de retorno

Retorna um objeto GetComputeCertificateResult que contém o seguinte:

  • certificatePath: o caminho para o certificado TLS em seu recurso computacional. Ao usar uma frota gerenciada do Amazon GameLift, esse caminho contém:

    • certificate.pem: o certificado do usuário final. A cadeia completa de certificados é a combinação de certificateChain.pem anexados a esse certificado.

    • certificateChain.pem: a cadeia de certificados que contém o certificado raiz e os certificados intermediários.

    • rootCertificate.pem: o certificado raiz.

    • privateKey.pem: a chave privada para o certificado do usuário final.

  • computeName: o nome do seu recurso computacional.

Exemplo

tlsCertificate, err := server.GetFleetRoleCredentials(getFleetRoleCredentialsRequest)

GetFleetRoleCredentials()

Recupera as credenciais do perfil de serviço que você cria para estender as permissões para os outros Serviços da AWS no Amazon GameLift. Essas credenciais permitem que seu servidor de jogo use seus recursos AWS. Para ter mais informações, consulte Configurar um perfil de serviço do IAM para o Amazon GameLift.

Sintaxe

func GetFleetRoleCredentials( req request.GetFleetRoleCredentialsRequest, ) (result.GetFleetRoleCredentialsResult, error) { return srv.getFleetRoleCredentials(&req) }

Parâmetros

Obtenha a solicitação de credenciais do FleetRole

Credenciais de função que ampliam o acesso limitado aos seus recursos AWS no servidor do jogo.

Valor de retorno

Retorna um objeto GetFleetRoleCredentialsResult que contém o seguinte:

  • AssumedRoleUserArn – O nome do recurso da Amazon (ARN) do usuário ao qual o perfil de serviço pertence.

  • AssumedRoleId – O ID do usuário ao qual o perfil de serviço pertence.

  • AccessKeyID – O ID da chave de acesso para autenticar e fornecer acesso aos seus recursos AWS.

  • SecretAccessKey – O ID da chave de acesso secreta para autenticação.

  • SessionToken – Um token para identificar a sessão ativa atual interagindo com seus recursos AWS.

  • Expiração – A quantidade de tempo até que suas credenciais de sessão expirem.

Exemplo

// form the customer credentials request getFleetRoleCredentialsRequest := request.NewGetFleetRoleCredentials() getFleetRoleCredentialsRequest.RoleArn = "arn:aws:iam::123456789012:role/service-role/exampleGameLiftAction" credentials, err := server.GetFleetRoleCredentials(getFleetRoleCredentialsRequest)

Destroy()

Libera o SDK do servidor de jogos do Amazon GameLift da memória. Como melhor prática, chame esse método antes ProcessEnding() e depois de encerrar o processo. Se você estiver usando uma frota Anywhere e não estiver encerrando os processos do servidor após cada sessão de jogo, chame Destroy() e reinicialize InitSDK() antes de notificar o Amazon GameLift de que o processo está pronto para hospedar uma sessão de jogo com ProcessReady().

Sintaxe

func Destroy() error { return srv.destroy() }

Valor de retorno

Retorna um erro com uma mensagem de erro se o método falhar.

Exemplo

// 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) } }