Este repositório permite o uso do netcode.io por meio de extensões de navegador, antes de sua adoção nos navegadores. netcode.io permite o uso seguro de UDP em navegadores da web com a finalidade de oferecer suporte a jogos HTML5 multijogador. Mais informações sobre netcode.io podem ser encontradas aqui.
netcode.io é compatível com os seguintes navegadores por meio de extensões:
O suporte a dispositivos móveis é basicamente impossível até que o suporte a netcode.io apareça nativamente nos navegadores, já que as plataformas móveis não suportam extensões ou mensagens nativas.
Para que isso funcione, é necessária a instalação de uma extensão de navegador e de um auxiliar de aplicativo nativo que realiza a comunicação real do netcode.io. A extensão usa APIs de mensagens nativas fornecidas em navegadores para disponibilizar netcode.io por meio do auxiliar.
Para testar isso em seu navegador, primeiro crie o auxiliar netcode.io.host:
go get github.com/wirepair/netcode
go build
- para o sistema operacional atualenv GOOS=windows GOARCH=amd64 go build
- para compilar para Windows (estilo Linux para definir variáveis de ambiente)env GOOS=linux GOARCH=amd64 go build
- para construir para Linux (estilo linux para definir variáveis de ambiente)env GOOS=darwin GOARCH=amd64 go build
- para compilar para Mac (estilo Linux para definir variáveis de ambiente) ./netcode.io.host
Isso deve ser executado sem erros e instalado como uma extensão de mensagens nativa.
Depois de fazer isso, adicione o diretório browserwebext
como uma extensão descompactada.
A API disponibilizada para clientes Javascript como window.netcode
. Você pode verificar a disponibilidade do netcode.io usando o padrão convencional if (window.netcode) { ... }
.
window.netcode
fornece uma função: createClient(callback)
:
Cria um novo cliente netcode.io que pode ser usado para comunicação UDP segura usando o protocolo netcode.io. O retorno de chamada tem o formato callback(err, client)
. Se err
for definido, ocorreu um erro ao criar o cliente (e client
será nulo). Caso contrário, client
será definido e err
será nulo. O cliente retornado é uma instância de Client
.
protocol
deve ser ipv4
ou ipv6
e determina a qual tipo de endereço de servidor você pode se conectar.
Parâmetros:
protocol
: ipv4
ou ipv6
.callback
: um retorno de chamada no formato callback(err, client)
onde err
é null
ou uma instância de Error
e client
é null
ou uma instância de Client
. Verifica se o auxiliar netcode.io foi instalado pelo usuário. O retorno de chamada tem o formato callback(err, isPresent)
, onde err
é null
ou uma instância de Error
. Se não houver erro, isPresent
será um booleano que indica se o auxiliar nativo foi instalado.
Se o auxiliar netcode.io não tiver sido instalado, você deve direcionar o usuário para https://github.com/RedpointGames/netcode.io-browser/releases/tag/latest onde o auxiliar netcode.io pode ser facilmente instalado em um alguns cliques.
Parâmetros:
callback
: um retorno de chamada no formato callback(err, isPresent)
onde err
é null
ou uma instância de Error
e isPresent
é null
ou booleano. Define a taxa de ticks do cliente netcode.io, expressa como o número de ticks por segundo para recebimento e envio de pacotes. A taxa de ticks para clientes é padronizada como 60
; isto é, 60 vezes por segundo.
Parâmetros:
tickRate
: Um número inteiro igual ou maior que 1
.callback
: um retorno de chamada no formato callback(err)
onde err
é null
ou uma instância de Error
. Conecta-se a um servidor netcode.io usando o token especificado. O token
deve ser uma instância de Uint8Array
e representar um token netcode.io recebido de um servidor de autenticação.
Você não pode usar netcode.io para enviar pacotes UDP para endereços IP arbitrários; em vez disso, você deve ter um servidor de autenticação que use a biblioteca netcode.io (ou uma implementação compatível) que possa gerar e assinar tokens com uma lista de endereços IP de servidores de jogos e uma chave privada compartilhada entre seu servidor de autenticação e os servidores de jogos.
Nos cenários mais comuns, o seu servidor de autenticação fornecerá o token como parte de uma solicitação AJAX. Se estiver usando um sistema de conta de usuário, você fornecerá tokens após o usuário fazer login no jogo, com o token indicando a qual servidor o cliente está autorizado a se conectar.
Parâmetros:
token
: uma instância Uint8Array
que contém os dados do token.callback
: um retorno de chamada no formato callback(err)
onde err
é null
ou uma instância de Error
. Envia um pacote para o servidor conectado com packetBuffer
como dados. packetBuffer
deve ser uma instância de Uint8Array
.
Parâmetros:
token
: uma instância Uint8Array
que contém os dados do pacote a serem enviados.callback
: um retorno de chamada no formato callback(err)
onde err
é null
ou uma instância de Error
. Retorna o estado atual do cliente como uma string. O estado retornado é: connected
, connectionDenied
, connectionRequestTimeout
, connectionResponseTimeout
, connectionTimedOut
, connectTokenExpired
, disconnected
, invalidConnectToken
, sendingConnectionRequest
, sendingConnectionResponse
ou destroyed
.
Parâmetros:
callback
: um retorno de chamada no formato callback(err, state)
onde err
é null
ou uma instância de Error
. state
é null
(no caso de um erro) ou um dos estados listados acima.Destrói o cliente, desconectando-o do servidor e limpando todos os recursos associados. Depois que um cliente é destruído, ele não pode ser reutilizado.
Parâmetros:
callback
: um retorno de chamada no formato callback(err)
onde err
é null
ou uma instância de Error
. Adiciona um ouvinte de eventos ao cliente. Atualmente o único type
suportado é receive
, que é acionado quando o cliente recebe um pacote do servidor.
Para receive
o retorno de chamada tem o formato callback(clientId, buffer)
onde clientId
é o identificador do cliente emitido originalmente pelo servidor de autenticação e buffer
é o pacote recebido como uma instância de Uint8Array
.
Parâmetros:
type
: um dos tipos suportados listados acima.callback
: um retorno de chamada cuja forma difere com base no type
. Este código de extensão de host é fornecido sob a licença do MIT.
Os principais objetivos deste projeto atualmente são:
Todas as solicitações pull devem ser disponibilizadas sob uma licença do MIT.