# Room モジュール

## 概要

Diarkis Room モジュールは、遠隔地にいる複数のユーザーがパケットを送受信できるデジタル空間を作ることができます。これは、サーバ・リレー・システムであり、テンポの速いゲームが可能です。

一つの Diarkis サーバーに、Diarkis Room で作成された複数のルームを持つことができます。各ルームは何人のユーザーを参加させるかを決めることができます。

技術的な詳細については、サーバー [APIドキュメント](https://docs.diarkis.io/docs/server/current/diarkis/room/index.html) をお読みください。

Diarkis Room は、Diarkis P2P (peer-to-peer) フォールバック用の [TURN](https://en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT) としても使用されます。

## Diarkis Room とは

Diarkis Room は、リモート・ユーザーがサーバーを介してパケットを交換できるようにする中継サーバーです。サーバーはカスタマイズ可能で、受信パケットを検証したり、サーバー上のパケットを好きなように操作することができます。

## Diarkis Room で出来ないこと

Diarkis Room は専用のゲーム・サーバー（Dedicated Game Server）ではありません。サーバー上でゲームを実行することはありません。サーバー上でゲームのロジックを実装することは可能ですが、物理演算やコリジョン判定などの実装には基本的には不向きです。

## Diarkis Room の特徴

メンバーが自由にメッセージを送受信（ブロードキャスト）することができます。また Property や State を共有することができます。それらは、メンバーが自由に追加・変更・削除できるルームに付随する値です。

Property は任意のタイミングでルームの状態を保持、同期します。ルームのメンバーと自動的に同期したい場合は State を使うことで一定間隔でルームの状態を同期することが可能です。

## Diarkis Room のパケット交換図（ブロードキャストとメッセージ）

下図は、Diarkis Room のブロードキャストとメッセージの仕組みを説明したものです。

Diarkis Room には、ルームのメンバー間でパケットを交換する2つの方法があります。

ブロードキャストは全ルーム・メンバーにメッセージを送信し、メッセージはルームの選択されたメンバーにメッセージを送信します。

<figure><img src="https://669307705-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlFJ89PMX2ike3NyauXNM%2Fuploads%2Fgit-blob-6097ca0c75b718a37ecccd93a75aef3b5c11b9b0%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

## Diarkis Room Property（状態の保存）

Diarkis Room は、Property でルームの状態を保持することができます。同期は任意のタイミングで行うことができ、Room に関連する低、中頻度の情報のやりとりに適しています。

## Diarkis Room State（状態の同期）

また Diarkis Room には、State を使ってメンバーと自動的に状態を同期する方法があります。Room に配置しているオブジェクトなど、これから入室するメンバーを含めてすべてのメンバーに自動的に同期したい場合に最適です。

<figure><img src="https://669307705-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlFJ89PMX2ike3NyauXNM%2Fuploads%2Fgit-blob-0bd14d2e558960707039f80f321db0dfd11e1ce6%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>
