# PlayDrop ゲームサーバー：Colyseus、MongoDB、サーバー SDK

PlayDrop ゲーム向けの任意のホスト型マルチプレイヤー：MongoDB ストレージ付きの Colyseus server.js をアップロードしてテストプレイヤーで試し、フレンドや AI には任意のサーバー SDK を使用できます。

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

ゲームサーバーは任意です。ゲームからは、自前で運用する任意のサーバーを呼び出せます。必要であれば、PlayDrop がゲーム用に MongoDB データベース付きの標準的な Colyseus サーバーをホストします。[PlayDrop Connector](https://www.playdrop.ai/ja/docs/connectors) で `index.html` と同じ場所に `server.js` としてアップロードするか、[PlayDrop Cloud](https://www.playdrop.ai/ja/create) に作成を依頼してください。`@playdrop/server` パッケージも任意です。

## 標準的な Colyseus サーバーを書く

`server.js` から `rooms` マップをエクスポートし、そのルーム名を [catalogue.json](https://www.playdrop.ai/ja/docs/catalogue-json) に `"server": { "rooms": ["game"] }` のように記載します。サーバーは PlayDrop が起動するため、自分で起動しないでください。データは、ルームのライフサイクル内で、`PLAYDROP_MONGO_URL` を通じて標準の MongoDB ドライバーで保存します。

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

## ホスト型サーバーのルール

- Colyseus 0.17（`colyseus` 0.17.10、`@colyseus/schema` 4.0.30）、MongoDB ドライバー 7.5、Node 22。
- 最大 2 MiB の自己完結型 ES モジュール 1 つ。インポートできるのは `colyseus`、`@colyseus/core`、`@colyseus/schema`、`mongodb`、`@playdrop/server` のみです。その他のコードはファイルにバンドルしてください。
- ルームタイプは最大 2 種類、1 ルームあたり 8 人、1 ルームあたり 4 時間、プレイヤー 1 人あたり毎秒 30 メッセージ、1 メッセージあたり 512 KiB まで。
- サーバーからインターネットにはアクセスできません。到達できるのは MongoDB と PlayDrop のサービスのみです。
- プレイヤーはサインインしている必要があります。PlayDrop が参加時に各プレイヤーを検証するため、`onAuth` は実装しないでください。
- MongoDB データベースはゲームごとに 1 つで、バージョンをまたいで保持され、ストレージ容量にカウントされます。その認証情報は決してブラウザに送信しないでください。

## ブラウザを接続してテストする

ブラウザでは、[クライアント SDK](https://www.playdrop.ai/ja/docs/sdk) の `sdk.multiplayer.getConnection()` がサーバーのアドレスとプレイヤーのトークンを返します。Colyseus クライアント（`@colyseus/sdk` 0.17）で参加してください。開発中は、Colyseus 0.17 と MongoDB 8 をローカルで実行し、ローカルサーバーに直接接続します。ホスト型サーバーをテストするには、非公開バージョンをアップロードしてから `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1` を開き、2 つ目のウィンドウで同じリンクを `player=2` にして開きます。各ウィンドウは別々のテストアカウントとしてプレイします。動作を確認したら、ゲームページからそのバージョンを公開してください。

## 任意のサーバー SDK：フレンドと AI

`@playdrop/server` は、`playdrop.social`（このゲームをプレイしているフレンドと、PlayDrop Chat のゲームカード）と `playdrop.ai`（クリエイターが費用を負担するテキスト、画像、3D、動画、効果音、音声、音楽の生成）を追加します。これらの呼び出しはアップロード済みのゲームでのみ動作し、ローカル開発では動作しません。非公開の生成メディアはサーバー上で `playdrop.ai.tasks.downloadFile` を使ってダウンロードし、そのバイトデータは対象のプレイヤーにのみ送信してください。音声生成リクエストで受け付けるのは最大 40 語までです。
