Skip to content

Room API (Client-side)

Properties

state: any

The current room's state. This variable is always synched with the latest state from the server-side. To listen for updates on the whole state, see onStateChange event.

sessionId: string

Unique identifier for the player. This property matches the client.sessionId from the server-side.

id: string

The unique idenfitier of the room. You can share this id with other clients in order to allow them to connect directly to this room.

// get `roomId` from the query string
let roomId = location.href.match(/roomId=([a-zA-Z0-9\-_]+)/)[1];

// joining a room by its id
client.joinById(roomId).then(room => {
  // ...
});

name: string

Name of the room handler. Ex: "battle".

Methods

send (type, message)

Send message a type of message to the room handler. Messages are encoded with MsgPack and can hold any JSON-seriazeable data structure.

//
// sending message with string type
//
room.send("move", { direction: "left"});

//
// sending message with number type
//
room.send(0, { direction: "left"});
//
// sending message with string type
//
await room.Send("move", new { direction = "left" });

//
// sending message with number type
//
await room.Send(0, new { direction = "left" });
--
-- sending message with string type
--
room:send("move", { direction = "left" })

--
-- sending message with number type
--
room:send(0, { direction = "left" })
//
// sending message with string type
//
room.send("move", { direction: "left" });

//
// sending message with number type
//
room.send(0, { direction: "left" });

Use Room#onMessage() from the server-side to read the message.

leave ()

Disconnect from the room.

room.leave();
room.Leave();
room:leave()
room.leave();

Tip

Use Room#onLeave() to handle the disconnection from the server-side.

removeAllListeners()

Removes onMessage, onStateChange, onLeave and onError listeners.

Also removes all .listen() calls if you're using Fossil Delta serializer..

Events

onStateChange

This event is triggered when the server updates its state.

room.onStateChange.once((state) => {
  console.log("this is the first room state!", state);
});

room.onStateChange((state) => {
  console.log("the room state has been updated:", state);
});
room.OnStateChange += (state, isFirstState) => {
  if (isFirstState) {
    Debug.Log ("this is the first room state!");
  }

  Debug.Log ("the room state has been updated");
}
room:on("statechange", function(state)
  print("new state:", state)
end)
room.onStateChange += function(state) {
  trace("new state:" + Std.string(state));
};
room.onStateChange = [=](State>* state) {
  std::cout << "new state" << std::endl;
  // ...
};

onMessage

This event is triggered when the server sends a message directly to the client, or via broadcast.

room.onMessage("powerup", (message) => {
  console.log("message received from server");
  console.log(message);
});
class PowerUpMessage {
  string type;
}

room.OnMessage<PowerUpMessage>("powerup", (message) => {
  Debug.Log ("message received from server");
  Debug.Log(message);
});

/**
 * Handling schema-encoded messages:
 */
room.OnMessage("powerup", (message) => {
  if (message is MyMessage)
  {
    Debug.Log ("MyMessage type has been received");
    Debug.Log(message);
  }
  else if (message is AnotherMessage) {
    // ...
  }
});
room:on_message("powerup", function(message)
  print("message received from server")
  print(message)
end)
room.onMessage("powerup", function(message) {
  trace("message received from server");
  trace(Std.string(message));
});
room.onMessage("powerup", [=](msgpack::object message) -> void {
    std::cout << "message received from server" << std::endl;
    std::cout << message << std::endl;
});

Tip

To send a message from the server directly to the clients you'll need to use either client.send() or room.broadcast()

onLeave

This event is triggered when the client leave the room.

Possible codes:

  • 1000: Regular Socket Shutdown
  • higher than 1000: Abnormal Socket Shutdown (more details)
room.onLeave((code) => {
  console.log("client left the room");
});
room.OnLeave += (code) => {
  Debug.Log ("client left the room");
}
room:on("leave", function()
  print("client left the room")
end)
room.onLeave += function () {
  trace("client left the room");
};
room.onLeave = [=]() -> void {
  std::cout << "client left the room" << std::endl;
};

onError

This event is triggered when some error occurs in the room handler.

room.onError((code, message) => {
  console.log("oops, error ocurred:");
  console.log(message);
});
room.OnError += (code, message) => {
  Debug.Log ("oops, error ocurred:");
  Debug.Log(message);
}
room:on("error", function(code, message)
  print("oops, error ocurred:")
  print(message)
end)
room.onError += function(code, message) {
  trace("oops, error ocurred:");
  trace(message);
};
room.onError = [=] (int code, std::string message) => void {
  std::cout << "oops, error ocurred: " << message << std::endl;
};