Multiplay Room Message
Multiplay Room Message

ZEPETO Multiplayは、クライアントとサーバー(Room)間のメッセージ送受信のためのインタフェースを提供します。 サーバーは、個々のクライアントにメッセージを送ったり、全体クライアントにメッセージを送ることができます。
メッセージタイプはPrimitive、Schema、(Custom)Objectタイプをサポートします。
Server API
Server APIは次のMethodを提供しています。
API | 説明 |
|---|---|
onMessage(Type, Callback) | ZEPETOマルチプレイサーバーは、クライアントから送信されたメッセージを処理するために、タイプ別にマッピングされたコールバックを登録できます。 typeパラメータは、文字列または数字として定義できます。 |
client.send(Type, Message) | 特定のクライアントにメッセージを送信するための関数です。 |
broadcast(Type, Message) | Roomに接続中の全てのクライアントにメッセージを送るためのインターフェイスです。 全体クライアントに発信したり、特定のクライアントだけ除いて発信可能です。 |
Multiplay Server APIを知りたい場合は、次の記事を参照してください。
📘 次のガイドを参考にして. [ZEPETO.Multiplay(Server) API]
メッセージ受信
onMessage使用例は次の通りです。
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使用例は次の通りです。
onCreate() {
this.onMessage("echo", (client: SandboxPlayer, message: string) => {
// Send messge to sender
client.send("echo", `echo message: ${message}`);
});
}broadcast使用例は次の通りです。
すべてのクライアントへのメッセージ発信例
onCreate() {
this.onMessage("action", (client: SandboxPlayer, message: string) => {
// Broadcast a message to all clients
this.broadcast("action-taken", "an action has been taken!");
});
}▼ 特定のクライアントを除いたメッセージ発信例
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コールバックを登録することで受信することができます。 メッセージコールバック登録の際、受信したいメッセージタイプを定義することができます。 |
|---|---|
room.Send(Type, message) | サーバーにメッセージを発信する際に使用するインターフェイスです。伝えるメッセージタイプを定義することができます。 |
room.AddMessageHandler使用例は次の通りです。
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使用例は次の通りです。
room.Send("message", "hello");様々なタイプのRoom Message例をご確認ください。
Server
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
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);
});
};
}
}