---
title: Multiplay Room Message
slug: world-sdk-guide-ja/multiplay-room-message
docTags: 
createdAt: 2024-09-20T12:58:20.325Z
---

## Multiplay Room Message

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/KjSzjbgyBG2-xs9nkKZkP_image.png)

ZEPETO Multiplayは、クライアントとサーバー(Room)間のメッセージ送受信のためのインタフェースを提供します。
サーバーは、個々のクライアントにメッセージを送ったり、全体クライアントにメッセージを送ることができます。

メッセージタイプはPrimitive、Schema、(Custom)Objectタイプをサポートします。

## Server API

Server APIは次のMethodを提供しています。

| **API**                    | **説明**                                                                                                      |
| -------------------------- | ----------------------------------------------------------------------------------------------------------- |
| onMessage(Type, Callback)  | ZEPETOマルチプレイサーバーは、クライアントから送信されたメッセージを処理するために、タイプ別にマッピングされたコールバックを登録できます。<br />typeパラメータは、文字列または数字として定義できます。 |
| client.send(Type, Message) | 特定のクライアントにメッセージを送信するための関数です。                                                                                |
| broadcast(Type, Message)   | Roomに接続中の全てのクライアントにメッセージを送るためのインターフェイスです。<br />全体クライアントに発信したり、特定のクライアントだけ除いて発信可能です。                         |

Multiplay Server APIを知りたい場合は、次の記事を参照してください。

:::hint{type="info"}
📘 次のガイドを参考にして. \[[ZEPETO.Multiplay(Server) API](https://developer.zepeto.me/docs/multiplay-server/)]
:::


メッセージ受信
-------

onMessage使用例は次の通りです。

```typescript
onCreate() {
    this.onMessage("action", (client: SandboxPlayer, message: string) => {

        // Triggers when 'action' message is sent.
    });

    this.onMessage("*", (client: SandboxPlayer, type, message: string) => {
      
        // Triggers when any other type of message is sent,
        // excluding "action", which has its own specific handler defined above.
        console.log(`${client.sessionId} sent ${type} ${message}`);
    });
}
```

## メッセージ送信

client.send使用例は次の通りです。

```typescript
onCreate() {
    this.onMessage("echo", (client: SandboxPlayer, message: string) => {
      
        // Send messge to sender
        client.send("echo", `echo message: ${message}`);
    });
}
```

broadcast使用例は次の通りです。

すべてのクライアントへのメッセージ発信例

```typescript
onCreate() {
    this.onMessage("action", (client: SandboxPlayer, message: string) => {
      
        // Broadcast a message to all clients
        this.broadcast("action-taken", "an action has been taken!");
    });
}
```

▼ 特定のクライアントを除いたメッセージ発信例

```typescript
onCreate() {
    this.onMessage("fire", (client: SandboxPlayer, message: string) => {
      
        // Sends "fire" event to every client, except the one who triggered it.
        this.broadcast("fire", message, { except: client });
    });
}
```

## Client API

Client APIは次のMethodを提供しています。

| room.AddMessageHandler(Type, Message) | サーバーから受信したメッセージを受信するにはAddMessageHandlerコールバックを登録することで受信することができます。<br />メッセージコールバック登録の際、受信したいメッセージタイプを定義することができます。 |
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| room.Send(Type, message)              | サーバーにメッセージを発信する際に使用するインターフェイスです。伝えるメッセージタイプを定義することができます。                                                          |

room.AddMessageHandler使用例は次の通りです。

```typescript
this.multiplay.RoomJoined += (room: Room) => {
     
       // Add server message listener type by "fire"
       room.AddMessageHandler("fire", (message: string) => {
         
           // Print server message
           console.log(message);
       });
};
```

room.Send使用例は次の通りです。

```typescript
room.Send("message", "hello");
```

様々なタイプのRoom Message例をご確認ください。

**Server**

```typescript
import { Sandbox, SandboxOptions, SandboxPlayer } from 'ZEPETO.Multiplay';

interface MessageModel {
    str: string,
    isTest: boolean
}

export default class extends Sandbox {

    onCreate(options: SandboxOptions) {
        this.onMessage("action", (client: SandboxPlayer, message: string) => {
          
            // Triggers when 'action' message is sent.
            // Broadcast a message to all clients
            this.broadcast("action-taken", "an action has been taken!");
        });
        this.onMessage("*", (client: SandboxPlayer, type, message: string) => {
           
            // Triggers when any other type of message is sent,
            // excluding "action", which has its own specific handler defined above. 
            console.log(`${client.sessionId} sent ${type} ${message}`);
        });
        this.onMessage("echo", (client: SandboxPlayer, message: number) => {
          
            // Send message to sender
            client.send("echo", `echo message: ${message}`);
        });
        this.onMessage("fire", (client: SandboxPlayer, message: string) => {
          
            // Sends "fire" event to every client, except the one who triggered it.
            this.broadcast("fire", message, { except: client });
        });
        this.onMessage("position", (client: SandboxPlayer, message) => {
            console.log(`[${client.sessionId}] position: (${message.x}, ${message.y}, ${message.z})`);
        });
      
        // When Custom object "MessageModel" type of message is sent.
        this.onMessage<MessageModel>('channel_object', (client: SandboxPlayer, message: MessageModel) => {
            console.log(`[${client.sessionId}] message type: ${typeof (message)}, message: ${message.str}`);
        });
    }
}
```

**Client**

```typescript
import { Room, RoomData } from 'ZEPETO.Multiplay';
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { ZepetoWorldMultiplay } from 'ZEPETO.World';

interface MessageModel {
    str: string,
    isTest: boolean
}

export default class ClientLogic extends ZepetoScriptBehaviour {

    private multiplay: ZepetoWorldMultiplay;

    Start() {

        this.multiplay = this.gameObject.GetComponent<ZepetoWorldMultiplay>();
        this.multiplay.RoomJoined += (room: Room) => {

            // [room.Send] 
            // Send "action" message to server
            room.Send("action", "action message");

            // Send "message" message to server
            room.Send("message", "hello");

            // Send "echo" message to server
            room.Send("echo", 1234);

            // Send RoomData "posData" message to server
            const posData = new RoomData();
            posData.Add("x", this.transform.position.x);
            posData.Add("y", this.transform.position.y);
            posData.Add("z", this.transform.position.z);
            room.Send("position", posData.GetObject());

            // Send Custom object "MessageModel" to server
            let message = {str:'test', isTest: true} as MessageModel;
            room.Send("channel_object", message);


            // [room.AddMessageHandler]
            // Add server message listener type by "echo"
            room.AddMessageHandler("echo", (message: string) => {
              
                // Print server message
                console.log(message);
            });

            // Add server message listener type by "action-taken"
            room.AddMessageHandler("action-taken", (message: string) => {
                // print server message
                console.log(message);
            });

            // Add server message listener type by "fire"
            room.AddMessageHandler("fire", (message: string) => {
                // Print server message
                console.log(message);
            });
        };
    }
}
```

