partey_workadventure/messages/protos/messages.proto

563 lines
13 KiB
Protocol Buffer
Raw Normal View History

syntax = "proto3";
2022-03-28 17:08:12 +02:00
import "google/protobuf/wrappers.proto";
/*********** PARTIAL MESSAGES **************/
message PositionMessage {
int32 x = 1;
int32 y = 2;
enum Direction {
UP = 0;
RIGHT = 1;
DOWN = 2;
LEFT = 3;
}
Direction direction = 3;
bool moving = 4;
}
2020-09-18 17:47:18 +02:00
message PointMessage {
int32 x = 1;
int32 y = 2;
}
message ViewportMessage {
int32 left = 1;
int32 top = 2;
int32 right = 3;
int32 bottom = 4;
}
2020-09-28 18:52:54 +02:00
message SilentMessage {
bool silent = 1;
}
2020-10-20 16:39:23 +02:00
message CharacterLayerMessage {
string url = 1;
string name = 2;
Refactoring Woka management (#1810) * Wrap websockets with HyperExpress * Add endpoints on pusher to resolve wokas * getting textures urls from pusher * Adding OpenAPI documentation for the pusher. The pusher now exposes a "/openapi" endpoint and a "/swagger-ui/" endpoint. * revert FRONT_URL * playerTextures metadata is being loaded via Phaser.Loader * fetch textures every time character or customize scene is open * Heavy changes: refactoring the pusher to always send the textures (and the front to accept them) * Sending character layer details to admin * Cleaning commented code * Fixing regex * Fix woka endpoints on pusher * Change error wording on pusher * Working on integration of the woka-list with the new admin endpoint. * Switching from "name" to "id" in texture object + using zod for woka/list validation * Add position on default woka data * Remove async on pusher option method * Fix woka list url * add options for /register * Fxiing loading the Woka list * Actually returning something in logout-callback * Copying messages to back too * remove customize button if no body parts are available (#1952) * remove customize button if no body parts are available * remove unused position field from PlayerTexturesCollection interface * removed unused label field * fix LocalUser test * little PlayerTextures class refactor * Fixing linting * Fixing missing Openapi packages in prod * Fixing back build Co-authored-by: Hanusiak Piotr <piotr@ltmp.co> Co-authored-by: David Négrier <d.negrier@thecodingmachine.com> * Add returns on pusher endpoints Co-authored-by: Alexis Faizeau <a.faizeau@workadventu.re> Co-authored-by: Hanusiak Piotr <piotr@ltmp.co> Co-authored-by: Piotr Hanusiak <wacneg@gmail.com>
2022-03-11 17:02:58 +01:00
string layer = 3;
2020-10-20 16:39:23 +02:00
}
2021-04-06 18:54:45 +02:00
message CompanionMessage {
2021-04-02 21:21:11 +02:00
string name = 1;
}
/*********** CLIENT TO SERVER MESSAGES *************/
message PingMessage {
}
message SetPlayerDetailsMessage {
google.protobuf.UInt32Value outlineColor = 3;
google.protobuf.BoolValue removeOutlineColor = 4;
google.protobuf.BoolValue showVoiceIndicator = 5;
google.protobuf.BoolValue away = 6;
}
message UserMovesMessage {
PositionMessage position = 1;
ViewportMessage viewport = 2;
}
2020-09-29 16:01:22 +02:00
message WebRtcSignalToServerMessage {
int32 receiverId = 1;
string signal = 2;
}
2020-10-12 11:22:41 +02:00
message ReportPlayerMessage {
string reportedUserUuid = 1;
2020-10-12 11:22:41 +02:00
string reportComment = 2;
}
message EmotePromptMessage {
2021-12-07 22:14:51 +01:00
string emote = 2;
}
message EmoteEventMessage {
2021-12-07 22:14:51 +01:00
int32 actorUserId = 1;
string emote = 2;
}
2020-10-16 19:13:26 +02:00
message QueryJitsiJwtMessage {
string jitsiRoom = 1;
string tag = 2; // FIXME: rather than reading the tag from the query, we should read it from the current map!
}
message FollowRequestMessage {
2021-12-15 14:48:45 +01:00
int32 leader = 1;
2021-12-12 00:24:39 +01:00
}
message FollowConfirmationMessage {
2021-12-15 14:48:45 +01:00
int32 leader = 1;
int32 follower = 2;
}
message FollowAbortMessage {
2021-12-15 14:48:45 +01:00
int32 leader = 1;
int32 follower = 2;
2021-12-12 00:24:39 +01:00
}
message LockGroupPromptMessage {
bool lock = 1;
}
2020-09-28 18:52:54 +02:00
message ClientToServerMessage {
oneof message {
UserMovesMessage userMovesMessage = 2;
SilentMessage silentMessage = 3;
ViewportMessage viewportMessage = 4;
ItemEventMessage itemEventMessage = 5;
SetPlayerDetailsMessage setPlayerDetailsMessage = 6;
2020-09-29 16:01:22 +02:00
WebRtcSignalToServerMessage webRtcSignalToServerMessage = 7;
WebRtcSignalToServerMessage webRtcScreenSharingSignalToServerMessage = 8;
PlayGlobalMessage playGlobalMessage = 9;
StopGlobalMessage stopGlobalMessage = 10;
2020-10-12 11:22:41 +02:00
ReportPlayerMessage reportPlayerMessage = 11;
2020-10-16 19:13:26 +02:00
QueryJitsiJwtMessage queryJitsiJwtMessage = 12;
EmotePromptMessage emotePromptMessage = 13;
VariableMessage variableMessage = 14;
FollowRequestMessage followRequestMessage = 15;
FollowConfirmationMessage followConfirmationMessage = 16;
FollowAbortMessage followAbortMessage = 17;
LockGroupPromptMessage lockGroupPromptMessage = 18;
2020-09-28 18:52:54 +02:00
}
}
2020-09-24 17:24:37 +02:00
/************ BI-DIRECTIONAL MESSAGES **************/
message ItemEventMessage {
int32 itemId = 1;
string event = 2;
string stateJson = 3;
string parametersJson = 4;
}
message VariableMessage {
string name = 1;
string value = 2;
}
/**
* A variable, along the tag describing who it is targeted at
*/
message VariableWithTagMessage {
string name = 1;
string value = 2;
string readableBy = 3;
}
message PlayGlobalMessage {
2021-07-20 15:16:51 +02:00
string type = 1;
string content = 2;
bool broadcastToWorld = 3;
}
message StopGlobalMessage {
string id = 1;
}
/*********** SERVER TO CLIENT MESSAGES *************/
message UserMovedMessage {
int32 userId = 1;
PositionMessage position = 2;
}
message SubMessage {
oneof message {
UserMovedMessage userMovedMessage = 1;
2020-09-24 10:05:16 +02:00
GroupUpdateMessage groupUpdateMessage = 2;
GroupDeleteMessage groupDeleteMessage = 3;
2020-09-24 14:50:28 +02:00
UserJoinedMessage userJoinedMessage = 4;
2020-09-24 16:11:47 +02:00
UserLeftMessage userLeftMessage = 5;
2020-09-24 17:24:37 +02:00
ItemEventMessage itemEventMessage = 6;
EmoteEventMessage emoteEventMessage = 7;
VariableMessage variableMessage = 8;
ErrorMessage errorMessage = 9;
PlayerDetailsUpdatedMessage playerDetailsUpdatedMessage = 10;
}
}
message BatchMessage {
string event = 1;
repeated SubMessage payload = 2;
}
2020-09-18 17:47:18 +02:00
message GroupUpdateMessage {
int32 groupId = 1;
PointMessage position = 2;
2022-03-28 17:08:12 +02:00
google.protobuf.UInt32Value groupSize = 3;
google.protobuf.BoolValue locked = 4;
2020-09-18 17:47:18 +02:00
}
message GroupDeleteMessage {
int32 groupId = 1;
}
2020-09-24 14:50:28 +02:00
message UserJoinedMessage {
int32 userId = 1;
string name = 2;
2020-10-20 16:39:23 +02:00
repeated CharacterLayerMessage characterLayers = 3;
2020-09-24 14:50:28 +02:00
PositionMessage position = 4;
2021-04-06 18:54:45 +02:00
CompanionMessage companion = 5;
string visitCardUrl = 6;
string userUuid = 7;
2021-12-23 10:22:19 +01:00
uint32 outlineColor = 8;
bool hasOutline = 9;
bool away = 10;
2020-09-24 14:50:28 +02:00
}
2020-09-24 16:11:47 +02:00
message UserLeftMessage {
int32 userId = 1;
}
2020-09-28 18:52:54 +02:00
/*
* ErrorMessage is only used to console.error the message in the front
*/
2020-09-28 18:52:54 +02:00
message ErrorMessage {
string message = 1;
}
/*
* ErrorScreenMessage is used to show the ErrorScreen in the front
*/
message ErrorScreenMessage {
2022-04-12 10:23:36 +02:00
string type = 1;
string code = 2;
string title = 3;
string subtitle = 4;
string details = 5;
int32 timeToRetry = 6;
bool canRetryManual = 7;
string urlToRedirect = 8;
string buttonTitle = 9;
string image = 10;
2022-04-12 10:23:36 +02:00
}
2020-09-28 18:52:54 +02:00
message ItemStateMessage {
int32 itemId = 1;
string stateJson = 2;
}
2022-02-28 13:47:08 +01:00
message GroupUsersUpdateMessage {
int32 groupId = 1;
repeated int32 userIds = 2;
}
2020-09-28 18:52:54 +02:00
message RoomJoinedMessage {
//repeated UserJoinedMessage user = 1;
//repeated GroupUpdateMessage group = 2;
2020-09-28 18:52:54 +02:00
repeated ItemStateMessage item = 3;
int32 currentUserId = 4;
repeated string tag = 5;
repeated VariableMessage variable = 6;
string userRoomToken = 7;
Refactoring Woka management (#1810) * Wrap websockets with HyperExpress * Add endpoints on pusher to resolve wokas * getting textures urls from pusher * Adding OpenAPI documentation for the pusher. The pusher now exposes a "/openapi" endpoint and a "/swagger-ui/" endpoint. * revert FRONT_URL * playerTextures metadata is being loaded via Phaser.Loader * fetch textures every time character or customize scene is open * Heavy changes: refactoring the pusher to always send the textures (and the front to accept them) * Sending character layer details to admin * Cleaning commented code * Fixing regex * Fix woka endpoints on pusher * Change error wording on pusher * Working on integration of the woka-list with the new admin endpoint. * Switching from "name" to "id" in texture object + using zod for woka/list validation * Add position on default woka data * Remove async on pusher option method * Fix woka list url * add options for /register * Fxiing loading the Woka list * Actually returning something in logout-callback * Copying messages to back too * remove customize button if no body parts are available (#1952) * remove customize button if no body parts are available * remove unused position field from PlayerTexturesCollection interface * removed unused label field * fix LocalUser test * little PlayerTextures class refactor * Fixing linting * Fixing missing Openapi packages in prod * Fixing back build Co-authored-by: Hanusiak Piotr <piotr@ltmp.co> Co-authored-by: David Négrier <d.negrier@thecodingmachine.com> * Add returns on pusher endpoints Co-authored-by: Alexis Faizeau <a.faizeau@workadventu.re> Co-authored-by: Hanusiak Piotr <piotr@ltmp.co> Co-authored-by: Piotr Hanusiak <wacneg@gmail.com>
2022-03-11 17:02:58 +01:00
// We send the current skin of the current player.
repeated CharacterLayerMessage characterLayer = 8;
2020-09-28 18:52:54 +02:00
}
2020-09-29 16:01:22 +02:00
message WebRtcStartMessage {
int32 userId = 1;
bool initiator = 3;
string webrtcUserName = 4;
string webrtcPassword = 5;
2020-09-29 16:01:22 +02:00
}
2020-09-28 18:52:54 +02:00
2020-09-29 16:01:22 +02:00
message WebRtcDisconnectMessage {
int32 userId = 1;
}
2020-09-28 18:52:54 +02:00
2020-09-29 16:01:22 +02:00
message WebRtcSignalToClientMessage {
int32 userId = 1;
string signal = 2;
string webrtcUserName = 4;
string webrtcPassword = 5;
2020-09-29 16:01:22 +02:00
}
2020-09-28 18:52:54 +02:00
message TeleportMessageMessage{
string map = 1;
}
2020-10-16 19:13:26 +02:00
message SendJitsiJwtMessage {
string jitsiRoom = 1;
string jwt = 2;
}
message SendUserMessage{
string type = 1;
string message = 2;
}
message WorldFullWarningMessage{
}
message WorldFullWarningToRoomMessage{
2021-12-07 22:14:51 +01:00
string roomId = 1;
}
message RefreshRoomPromptMessage{
2021-12-07 22:14:51 +01:00
string roomId = 1;
}
message RefreshRoomMessage{
2021-12-07 22:14:51 +01:00
string roomId = 1;
int32 versionNumber = 2;
}
message WorldFullMessage{
}
message TokenExpiredMessage{
}
Refactoring Woka management (#1810) * Wrap websockets with HyperExpress * Add endpoints on pusher to resolve wokas * getting textures urls from pusher * Adding OpenAPI documentation for the pusher. The pusher now exposes a "/openapi" endpoint and a "/swagger-ui/" endpoint. * revert FRONT_URL * playerTextures metadata is being loaded via Phaser.Loader * fetch textures every time character or customize scene is open * Heavy changes: refactoring the pusher to always send the textures (and the front to accept them) * Sending character layer details to admin * Cleaning commented code * Fixing regex * Fix woka endpoints on pusher * Change error wording on pusher * Working on integration of the woka-list with the new admin endpoint. * Switching from "name" to "id" in texture object + using zod for woka/list validation * Add position on default woka data * Remove async on pusher option method * Fix woka list url * add options for /register * Fxiing loading the Woka list * Actually returning something in logout-callback * Copying messages to back too * remove customize button if no body parts are available (#1952) * remove customize button if no body parts are available * remove unused position field from PlayerTexturesCollection interface * removed unused label field * fix LocalUser test * little PlayerTextures class refactor * Fixing linting * Fixing missing Openapi packages in prod * Fixing back build Co-authored-by: Hanusiak Piotr <piotr@ltmp.co> Co-authored-by: David Négrier <d.negrier@thecodingmachine.com> * Add returns on pusher endpoints Co-authored-by: Alexis Faizeau <a.faizeau@workadventu.re> Co-authored-by: Hanusiak Piotr <piotr@ltmp.co> Co-authored-by: Piotr Hanusiak <wacneg@gmail.com>
2022-03-11 17:02:58 +01:00
message InvalidTextureMessage{
}
message WorldConnexionMessage{
string message = 2;
}
2021-01-17 03:07:46 +01:00
message BanUserMessage{
string type = 1;
string message = 2;
}
/**
* Messages going from back and pusher to the front
*/
2020-09-28 18:52:54 +02:00
message ServerToClientMessage {
oneof message {
BatchMessage batchMessage = 1;
ErrorMessage errorMessage = 2;
RoomJoinedMessage roomJoinedMessage = 3;
WebRtcStartMessage webRtcStartMessage = 4;
WebRtcSignalToClientMessage webRtcSignalToClientMessage = 5;
WebRtcSignalToClientMessage webRtcScreenSharingSignalToClientMessage = 6;
WebRtcDisconnectMessage webRtcDisconnectMessage = 7;
TeleportMessageMessage teleportMessageMessage = 10;
2020-10-16 19:13:26 +02:00
SendJitsiJwtMessage sendJitsiJwtMessage = 11;
SendUserMessage sendUserMessage = 12;
2021-01-17 03:07:46 +01:00
BanUserMessage banUserMessage = 13;
//AdminRoomMessage adminRoomMessage = 14;
WorldFullWarningMessage worldFullWarningMessage = 15;
WorldFullMessage worldFullMessage = 16;
RefreshRoomMessage refreshRoomMessage = 17;
WorldConnexionMessage worldConnexionMessage = 18;
//EmoteEventMessage emoteEventMessage = 19;
TokenExpiredMessage tokenExpiredMessage = 20;
FollowRequestMessage followRequestMessage = 21;
FollowConfirmationMessage followConfirmationMessage = 22;
FollowAbortMessage followAbortMessage = 23;
Refactoring Woka management (#1810) * Wrap websockets with HyperExpress * Add endpoints on pusher to resolve wokas * getting textures urls from pusher * Adding OpenAPI documentation for the pusher. The pusher now exposes a "/openapi" endpoint and a "/swagger-ui/" endpoint. * revert FRONT_URL * playerTextures metadata is being loaded via Phaser.Loader * fetch textures every time character or customize scene is open * Heavy changes: refactoring the pusher to always send the textures (and the front to accept them) * Sending character layer details to admin * Cleaning commented code * Fixing regex * Fix woka endpoints on pusher * Change error wording on pusher * Working on integration of the woka-list with the new admin endpoint. * Switching from "name" to "id" in texture object + using zod for woka/list validation * Add position on default woka data * Remove async on pusher option method * Fix woka list url * add options for /register * Fxiing loading the Woka list * Actually returning something in logout-callback * Copying messages to back too * remove customize button if no body parts are available (#1952) * remove customize button if no body parts are available * remove unused position field from PlayerTexturesCollection interface * removed unused label field * fix LocalUser test * little PlayerTextures class refactor * Fixing linting * Fixing missing Openapi packages in prod * Fixing back build Co-authored-by: Hanusiak Piotr <piotr@ltmp.co> Co-authored-by: David Négrier <d.negrier@thecodingmachine.com> * Add returns on pusher endpoints Co-authored-by: Alexis Faizeau <a.faizeau@workadventu.re> Co-authored-by: Hanusiak Piotr <piotr@ltmp.co> Co-authored-by: Piotr Hanusiak <wacneg@gmail.com>
2022-03-11 17:02:58 +01:00
InvalidTextureMessage invalidTextureMessage = 24;
2022-03-28 13:16:29 +02:00
GroupUsersUpdateMessage groupUsersUpdateMessage = 25;
ErrorScreenMessage errorScreenMessage = 26;
2020-09-28 18:52:54 +02:00
}
}
/************************** SERVICES **************************/
message JoinRoomMessage {
PositionMessage positionMessage = 1;
string name = 2;
repeated CharacterLayerMessage characterLayer = 3;
string userUuid = 4;
string roomId = 5;
repeated string tag = 6;
2021-01-15 03:19:58 +01:00
string IPAddress = 7;
2021-04-06 18:54:45 +02:00
CompanionMessage companion = 8;
string visitCardUrl = 9;
string userRoomToken = 10;
bool away = 11;
}
message UserJoinedZoneMessage {
int32 userId = 1;
string name = 2;
repeated CharacterLayerMessage characterLayers = 3;
PositionMessage position = 4;
Zone fromZone = 5;
2021-04-06 18:54:45 +02:00
CompanionMessage companion = 6;
string visitCardUrl = 7;
string userUuid = 8;
2021-12-23 10:22:19 +01:00
uint32 outlineColor = 9;
bool hasOutline = 10;
bool away = 11;
}
message UserLeftZoneMessage {
int32 userId = 1;
Zone toZone = 2;
}
message GroupUpdateZoneMessage {
int32 groupId = 1;
PointMessage position = 2;
2022-03-28 13:16:29 +02:00
int32 groupSize = 3;
Zone fromZone = 4;
2022-03-28 13:16:29 +02:00
bool locked = 5;
}
message GroupLeftZoneMessage {
int32 groupId = 1;
Zone toZone = 2;
}
message PlayerDetailsUpdatedMessage {
int32 userId = 1;
SetPlayerDetailsMessage details = 2;
}
message Zone {
int32 x = 1;
int32 y = 2;
}
message ZoneMessage {
string roomId = 1;
int32 x = 2;
int32 y = 3;
}
2021-07-06 15:30:49 +02:00
message RoomMessage {
string roomId = 1;
}
message PusherToBackMessage {
oneof message {
JoinRoomMessage joinRoomMessage = 1;
UserMovesMessage userMovesMessage = 2;
SilentMessage silentMessage = 3;
2020-12-11 16:47:59 +01:00
ItemEventMessage itemEventMessage = 4;
SetPlayerDetailsMessage setPlayerDetailsMessage = 5;
WebRtcSignalToServerMessage webRtcSignalToServerMessage = 6;
WebRtcSignalToServerMessage webRtcScreenSharingSignalToServerMessage = 7;
ReportPlayerMessage reportPlayerMessage = 10;
QueryJitsiJwtMessage queryJitsiJwtMessage = 11;
2021-01-17 03:07:46 +01:00
SendUserMessage sendUserMessage = 12;
BanUserMessage banUserMessage = 13;
EmotePromptMessage emotePromptMessage = 14;
VariableMessage variableMessage = 15;
FollowRequestMessage followRequestMessage = 16;
FollowConfirmationMessage followConfirmationMessage = 17;
FollowAbortMessage followAbortMessage = 18;
LockGroupPromptMessage lockGroupPromptMessage = 19;
}
}
message BatchToPusherMessage {
repeated SubToPusherMessage payload = 2;
}
message SubToPusherMessage {
oneof message {
UserJoinedZoneMessage userJoinedZoneMessage = 1;
GroupUpdateZoneMessage groupUpdateZoneMessage = 2;
UserMovedMessage userMovedMessage = 3;
GroupLeftZoneMessage groupLeftZoneMessage = 4;
UserLeftZoneMessage userLeftZoneMessage = 5;
ItemEventMessage itemEventMessage = 6;
2020-12-11 12:23:50 +01:00
SendUserMessage sendUserMessage = 7;
2021-01-17 03:07:46 +01:00
BanUserMessage banUserMessage = 8;
EmoteEventMessage emoteEventMessage = 9;
ErrorMessage errorMessage = 10;
PlayerDetailsUpdatedMessage playerDetailsUpdatedMessage = 11;
}
}
2021-07-06 15:30:49 +02:00
message BatchToPusherRoomMessage {
repeated SubToPusherRoomMessage payload = 2;
}
message SubToPusherRoomMessage {
oneof message {
VariableWithTagMessage variableMessage = 1;
ErrorMessage errorMessage = 2;
2021-07-06 15:30:49 +02:00
}
}
/*message BatchToAdminPusherMessage {
repeated SubToAdminPusherMessage payload = 2;
}*/
/*message SubToAdminPusherMessage {
oneof message {
string userUuidJoinedRoom = 1;
string userUuidLeftRoom = 2;
}
}
message ServerToAdminClientMessage {
repeated SubToAdminPusherMessage payload = 2;
}*/
2021-01-18 15:07:40 +01:00
message UserJoinedRoomMessage {
string uuid = 1;
string ipAddress = 2;
string name = 3;
}
message UserLeftRoomMessage {
string uuid = 1;
}
message ServerToAdminClientMessage {
oneof message {
2021-01-18 15:07:40 +01:00
UserJoinedRoomMessage userJoinedRoom = 1;
UserLeftRoomMessage userLeftRoom = 2;
}
}
message AdminPusherToBackMessage {
oneof message {
string subscribeToRoom = 1;
// TODO ban, unban
}
}
2020-12-11 12:23:50 +01:00
// A message sent by an administrator to a recipient
message AdminMessage {
string message = 1;
string recipientUuid = 2;
string roomId = 3;
2021-03-11 01:25:36 +01:00
string type = 4;
2020-12-11 12:23:50 +01:00
}
// A message sent by an administrator to everyone in a specific room
message AdminRoomMessage {
string message = 1;
string roomId = 2;
string type = 3;
}
2020-12-11 12:23:50 +01:00
// A message sent by an administrator to absolutely everybody
message AdminGlobalMessage {
string message = 1;
}
message BanMessage {
string recipientUuid = 1;
string roomId = 2;
2021-03-11 01:25:36 +01:00
string type = 3;
string message = 4;
2020-12-11 12:23:50 +01:00
}
message EmptyMessage {
}
2021-07-06 15:30:49 +02:00
/**
* Service handled by the "back". Pusher servers connect to this service.
*/
service RoomManager {
2021-07-06 15:30:49 +02:00
rpc joinRoom(stream PusherToBackMessage) returns (stream ServerToClientMessage); // Holds a connection between one given client and the back
rpc listenZone(ZoneMessage) returns (stream BatchToPusherMessage); // Connection used to send to a pusher messages related to a given zone of a given room
rpc listenRoom(RoomMessage) returns (stream BatchToPusherRoomMessage); // Connection used to send to a pusher messages related to a given room
rpc adminRoom(stream AdminPusherToBackMessage) returns (stream ServerToAdminClientMessage);
2020-12-11 12:23:50 +01:00
rpc sendAdminMessage(AdminMessage) returns (EmptyMessage);
rpc sendGlobalAdminMessage(AdminGlobalMessage) returns (EmptyMessage);
rpc ban(BanMessage) returns (EmptyMessage);
rpc sendAdminMessageToRoom(AdminRoomMessage) returns (EmptyMessage);
rpc sendWorldFullWarningToRoom(WorldFullWarningToRoomMessage) returns (EmptyMessage);
rpc sendRefreshRoomPrompt(RefreshRoomPromptMessage) returns (EmptyMessage);
}