# Server game PlayDrop: Colyseus, MongoDB, dan SDK server

Multiplayer yang di-hosting secara opsional untuk game PlayDrop: unggah server.js Colyseus dengan penyimpanan MongoDB, uji dengan pemain uji, dan gunakan SDK server opsional untuk fitur teman dan AI.

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

Server game bersifat opsional. Game Anda dapat memanggil server apa pun yang Anda jalankan sendiri. Jika mau, PlayDrop dapat meng-hosting server Colyseus standar dengan database MongoDB untuk game Anda: unggah sebagai `server.js` di samping `index.html` melalui [PlayDrop Connector](https://www.playdrop.ai/id/docs/connectors), atau minta [PlayDrop Cloud](https://www.playdrop.ai/id/create) untuk membuatnya. Paket `@playdrop/server` juga opsional.

## Tulis server Colyseus standar

Ekspor map `rooms` dari `server.js` dan cantumkan nama room-nya di [catalogue.json](https://www.playdrop.ai/id/docs/catalogue-json) sebagai `"server": { "rooms": ["game"] }`. PlayDrop yang menjalankan server, jadi jangan memulai server sendiri. Simpan data dengan driver MongoDB standar melalui `PLAYDROP_MONGO_URL`, di dalam siklus hidup room.

```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) };
```

## Aturan server yang di-hosting

- Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.0.30), driver MongoDB 7.5, dan Node 22.
- Satu modul ES mandiri berukuran maksimal 2 MiB. Modul hanya boleh mengimpor `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb`, dan `@playdrop/server`; bundel kode lainnya ke dalam file tersebut.
- Maksimal 2 jenis room, 8 pemain per room, 4 jam per room, 30 pesan per detik per pemain, dan 512 KiB per pesan.
- Server tidak memiliki akses internet: hanya MongoDB dan layanan PlayDrop yang dapat dijangkau.
- Pemain harus login. PlayDrop memverifikasi setiap pemain saat bergabung; jangan mengimplementasikan `onAuth`.
- Satu database MongoDB per game, dipertahankan di semua versi dan dihitung dalam kuota penyimpanan Anda. Jangan pernah mengirim kredensialnya ke browser.

## Hubungkan browser dan uji

Di browser, `sdk.multiplayer.getConnection()` dari [SDK klien](https://www.playdrop.ai/id/docs/sdk) mengembalikan alamat server dan token pemain; bergabunglah dengan klien Colyseus (`@colyseus/sdk` 0.17). Selama pengembangan, jalankan Colyseus 0.17 dan MongoDB 8 secara lokal, lalu hubungkan langsung ke server lokal Anda. Untuk menguji server yang di-hosting, unggah versi privat, lalu buka `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1` dan tautan yang sama dengan `player=2` di jendela kedua: setiap jendela bermain sebagai akun uji yang berbeda. Setelah berfungsi, jadikan versi tersebut publik dari halaman game.

## SDK server opsional: teman dan AI

`@playdrop/server` menambahkan `playdrop.social` (teman yang memainkan game ini dan kartu game di PlayDrop Chat) dan `playdrop.ai` (pembuatan teks, gambar, 3D, video, efek suara, ucapan, dan musik yang dibayar oleh kreator). Panggilan ini hanya berfungsi pada game yang sudah diunggah, tidak dalam pengembangan lokal. Di server, unduh media privat yang dihasilkan dengan `playdrop.ai.tasks.downloadFile`, lalu kirimkan byte-nya hanya ke pemain yang dituju; permintaan ucapan menerima maksimal 40 kata.
