# Servidores de jogo do PlayDrop: Colyseus, MongoDB e o SDK de servidor

Multijogador hospedado opcional para jogos do PlayDrop: envie um server.js do Colyseus com armazenamento no MongoDB, teste-o com jogadores de teste e use o SDK de servidor opcional para amigos e IA.

Source: https://www.playdrop.ai/pt-br/docs/server-sdk

Um servidor de jogo é opcional. Seu jogo pode chamar qualquer servidor que você mesmo execute. Se preferir, o PlayDrop hospeda para o seu jogo um servidor Colyseus padrão com um banco de dados MongoDB: envie-o como `server.js` ao lado do `index.html` pelo [PlayDrop Connector](https://www.playdrop.ai/pt-br/docs/connectors) ou peça ao [PlayDrop Cloud](https://www.playdrop.ai/pt-br/create) que o crie. O pacote `@playdrop/server` também é opcional.

## Escreva um servidor Colyseus padrão

Exporte um mapa `rooms` no `server.js` e liste os nomes das salas no [catalogue.json](https://www.playdrop.ai/pt-br/docs/catalogue-json) como `"server": { "rooms": ["game"] }`. O PlayDrop executa o servidor, então não o inicie você mesmo. Armazene os dados com o driver padrão do MongoDB por meio do `PLAYDROP_MONGO_URL`, dentro do ciclo de vida da sala.

```js
import { Room, defineRoom } from "colyseus";
import { MongoClient } from "mongodb";

class GameRoom extends Room {
  async onCreate() {
    this.mongo = new MongoClient(process.env.PLAYDROP_MONGO_URL);
    await this.mongo.connect();
  }
  onJoin(client) {
    // client.auth is the verified PlayDrop player, for example client.auth.userId.
  }
  async onDispose() { await this.mongo?.close(); }
}

export const rooms = { game: defineRoom(GameRoom) };
```

## Regras do servidor hospedado

- Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.0.30), driver do MongoDB 7.5 e Node 22.
- Um único módulo ES autocontido de até 2 MiB. Ele só pode importar `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb` e `@playdrop/server`; empacote qualquer outro código no próprio arquivo.
- Até 2 tipos de sala, 8 jogadores por sala, 4 horas por sala, 30 mensagens por segundo por jogador e 512 KiB por mensagem.
- Sem acesso à internet a partir do servidor: somente o MongoDB e os serviços do PlayDrop são acessíveis.
- Os jogadores precisam estar logados. O PlayDrop verifica cada jogador ao entrar; não implemente `onAuth`.
- Um banco de dados MongoDB por jogo, mantido entre as versões e contabilizado na sua cota de armazenamento. Nunca envie as credenciais dele ao navegador.

## Conecte o navegador e teste

No navegador, `sdk.multiplayer.getConnection()` do [SDK de cliente](https://www.playdrop.ai/pt-br/docs/sdk) retorna o endereço do servidor e o token do jogador; entre na sala com o cliente Colyseus (`@colyseus/sdk` 0.17). Durante o desenvolvimento, execute o Colyseus 0.17 e o MongoDB 8 localmente e conecte-se diretamente ao seu servidor local. Para testar o servidor hospedado, envie uma versão privada e abra `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1` e o mesmo link com `player=2` em uma segunda janela: cada janela joga como uma conta de teste diferente. Quando tudo funcionar, torne a versão pública na página do jogo.

## SDK de servidor opcional: amigos e IA

`@playdrop/server` adiciona `playdrop.social` (amigos que jogam este jogo e cards de jogo no PlayDrop Chat) e `playdrop.ai` (geração de texto, imagem, 3D, vídeo, som, fala e música paga pelo criador). Essas chamadas só funcionam em jogos enviados, não no desenvolvimento local. No servidor, baixe a mídia privada gerada com `playdrop.ai.tasks.downloadFile` e envie os bytes somente ao jogador de destino; solicitações de fala aceitam no máximo 40 palavras.
