Photon .NET Client API
Public Member Functions | Properties | List of all members
ExitGames.Client.Photon.LoadBalancing.Room Class Reference

This class represents a room a client joins/joined. Mostly used through LoadBalancingClient.CurrentRoom, after joining any room. Contains a list of current players, their properties and those of this room, too. A room instance has a number of "well known" properties like IsOpen, MaxPlayers which can be changed. Your own, custom properties can be set via SetCustomProperties() while being in the room. More...

Inheritance diagram for ExitGames.Client.Photon.LoadBalancing.Room:
ExitGames.Client.Photon.LoadBalancing.RoomInfo

Public Member Functions

virtual void SetCustomProperties (Hashtable propertiesToSet, Hashtable expectedProperties=null)
 Updates and synchronizes this Room's Custom Properties. Optionally, expectedProperties can be provided as condition. More...
 
void SetPropertiesListedInLobby (string[] propsToListInLobby)
 Enables you to define the properties available in the lobby if not all properties are needed to pick a room. More...
 
virtual bool AddPlayer (Player player)
 Checks if the player is in the room's list already and calls StorePlayer() if not. More...
 
virtual Player StorePlayer (Player player)
 Updates a player reference in the Players dictionary (no matter if it existed before or not). More...
 
virtual Player GetPlayer (int id)
 Tries to find the player with given actorNumber (a.k.a. ID). Only useful when in a Room, as IDs are only valid per Room. More...
 
- Public Member Functions inherited from ExitGames.Client.Photon.LoadBalancing.RoomInfo
override bool Equals (object other)
 Makes RoomInfo comparable (by name). More...
 
override int GetHashCode ()
 Accompanies Equals, using the name's HashCode as return. More...
 
override string ToString ()
 Returns most interesting room values as string. More...
 
string ToStringFull ()
 Returns most interesting room values as string, including custom properties. More...
 

Properties

new string Name [get, set]
 The name of a room. Unique identifier (per Loadbalancing group) for a room/match. More...
 
new bool IsOpen [get, set]
 Defines if the room can be joined. This does not affect listing in a lobby but joining the room will fail if not open. If not open, the room is excluded from random matchmaking. Due to racing conditions, found matches might become closed while users are trying to join. Simply re-connect to master and find another. Use property "IsVisible" to not list the room. More...
 
new bool IsVisible [get, set]
 Defines if the room is listed in its lobby. Rooms can be created invisible, or changed to invisible. To change if a room can be joined, use property: open. More...
 
new byte MaxPlayers [get, set]
 Sets a limit of players to this room. This property is synced and shown in lobby, too. If the room is full (players count == maxplayers), joining this room will fail. More...
 
new byte PlayerCount [get]
 Gets the count of players in this Room (using this.Players.Count). More...
 
Dictionary< int, PlayerPlayers [get, set]
 While inside a Room, this is the list of players who are also in that room. More...
 
int MasterClientId [get, set]
 The ID (actorID, actorNumber) of the player who's the master of this Room. Note: This changes when the current master leaves the room. More...
 
string[] PropsListedInLobby [get, set]
 Gets a list of custom properties that are in the RoomInfo of the Lobby. This list is defined when creating the room and can't be changed afterwards. Compare: LoadBalancingClient.OpCreateRoom() More...
 
- Properties inherited from ExitGames.Client.Photon.LoadBalancing.RoomInfo
Hashtable CustomProperties [get]
 Read-only "cache" of custom properties of a room. Set via Room.SetCustomProperties. More...
 
string Name [get]
 The name of a room. Unique identifier for a room/match (per AppId + game-Version). More...
 
int PlayerCount [get, set]
 Count of players currently in room. This property is overwritten by the Room class (used when you're in a Room). More...
 
bool IsLocalClientInside [get, set]
 State if the local client is already in the game or still going to join it on gameserver (in lobby: false). More...
 
byte MaxPlayers [get]
 The limit of players for this room. This property is shown in lobby, too. If the room is full (players count == maxplayers), joining this room will fail. More...
 
bool IsOpen [get]
 Defines if the room can be joined. This does not affect listing in a lobby but joining the room will fail if not open. If not open, the room is excluded from random matchmaking. Due to racing conditions, found matches might become closed even while you join them. Simply re-connect to master and find another. Use property "IsVisible" to not list the room. More...
 
bool IsVisible [get]
 Defines if the room is listed in its lobby. Rooms can be created invisible, or changed to invisible. To change if a room can be joined, use property: open. More...
 

Additional Inherited Members

- Protected Attributes inherited from ExitGames.Client.Photon.LoadBalancing.RoomInfo
byte maxPlayers = 0
 Backing field for property. More...
 
bool isOpen = true
 Backing field for property. More...
 
bool isVisible = true
 Backing field for property. More...
 
string name
 Backing field for property. More...
 
string[] propsListedInLobby
 Backing field for property. More...
 

Detailed Description

This class represents a room a client joins/joined. Mostly used through LoadBalancingClient.CurrentRoom, after joining any room. Contains a list of current players, their properties and those of this room, too. A room instance has a number of "well known" properties like IsOpen, MaxPlayers which can be changed. Your own, custom properties can be set via SetCustomProperties() while being in the room.

Typically, this class should be extended by a game-specific implementation with logic and extra features.

Member Function Documentation

virtual bool ExitGames.Client.Photon.LoadBalancing.Room.AddPlayer ( Player  player)
inlinevirtual

Checks if the player is in the room's list already and calls StorePlayer() if not.

Parameters
playerThe new player - identified by ID.
Returns
False if the player could not be added (cause it was in the list already).
virtual Player ExitGames.Client.Photon.LoadBalancing.Room.GetPlayer ( int  id)
inlinevirtual

Tries to find the player with given actorNumber (a.k.a. ID). Only useful when in a Room, as IDs are only valid per Room.

Parameters
idID to look for.
Returns
The player with the ID or null.
virtual void ExitGames.Client.Photon.LoadBalancing.Room.SetCustomProperties ( Hashtable  propertiesToSet,
Hashtable  expectedProperties = null 
)
inlinevirtual

Updates and synchronizes this Room's Custom Properties. Optionally, expectedProperties can be provided as condition.

Custom Properties are a set of string keys and arbitrary values which is synchronized for the players in a Room. They are available when the client enters the room, as they are in the response of OpJoin and OpCreate.

Custom Properties either relate to the (current) Room or a Player (in that Room).

Both classes locally cache the current key/values and make them available as property: CustomProperties. This is provided only to read them. You must use the method SetCustomProperties to set/modify them.

Any client can set any Custom Properties anytime. It's up to the game logic to organize how they are best used.

You should call SetCustomProperties only with key/values that are new or changed. This reduces traffic and performance.

Unless you define some expectedProperties, setting key/values is always permitted. In this case, the property-setting client will not receive the new values from the server but instead update its local cache in SetCustomProperties.

If you define expectedProperties, the server will skip updates if the server property-cache does not contain all expectedProperties with the same values. In this case, the property-setting client will get an update from the server and update it's cached key/values at about the same time as everyone else.

The benefit of using expectedProperties can be only one client successfully sets a key from one known value to another. As example: Store who owns an item in a Custom Property "ownedBy". It's 0 initally. When multiple players reach the item, they all attempt to change "ownedBy" from 0 to their actorNumber. If you use expectedProperties {"ownedBy", 0} as condition, the first player to take the item will have it (and the others fail to set the ownership).

Properties get saved with the game state for Turnbased games (which use IsPersistent = true).

Parameters
propertiesToSetHashtable of Custom Properties that changes.
expectedPropertiesProvide some keys/values to use as condition for setting the new values.
void ExitGames.Client.Photon.LoadBalancing.Room.SetPropertiesListedInLobby ( string[]  propsToListInLobby)
inline

Enables you to define the properties available in the lobby if not all properties are needed to pick a room.

Limit the amount of properties sent to users in the lobby as this improves speed and stability.

Parameters
propsToListInLobbyAn array of custom room property names to forward to the lobby.
virtual Player ExitGames.Client.Photon.LoadBalancing.Room.StorePlayer ( Player  player)
inlinevirtual

Updates a player reference in the Players dictionary (no matter if it existed before or not).

Parameters
playerThe Player instance to insert into the room.

Property Documentation

new bool ExitGames.Client.Photon.LoadBalancing.Room.IsOpen
getset

Defines if the room can be joined. This does not affect listing in a lobby but joining the room will fail if not open. If not open, the room is excluded from random matchmaking. Due to racing conditions, found matches might become closed while users are trying to join. Simply re-connect to master and find another. Use property "IsVisible" to not list the room.

As part of RoomInfo this can't be set. As part of a Room (which the player joined), the setter will update the server and all clients.

new bool ExitGames.Client.Photon.LoadBalancing.Room.IsVisible
getset

Defines if the room is listed in its lobby. Rooms can be created invisible, or changed to invisible. To change if a room can be joined, use property: open.

As part of RoomInfo this can't be set. As part of a Room (which the player joined), the setter will update the server and all clients.

int ExitGames.Client.Photon.LoadBalancing.Room.MasterClientId
getset

The ID (actorID, actorNumber) of the player who's the master of this Room. Note: This changes when the current master leaves the room.

new byte ExitGames.Client.Photon.LoadBalancing.Room.MaxPlayers
getset

Sets a limit of players to this room. This property is synced and shown in lobby, too. If the room is full (players count == maxplayers), joining this room will fail.

As part of RoomInfo this can't be set. As part of a Room (which the player joined), the setter will update the server and all clients.

new string ExitGames.Client.Photon.LoadBalancing.Room.Name
getset

The name of a room. Unique identifier (per Loadbalancing group) for a room/match.

The name can't be changed once it's set. The setter is used to apply the name, if created by the server.

new byte ExitGames.Client.Photon.LoadBalancing.Room.PlayerCount
get

Gets the count of players in this Room (using this.Players.Count).

Dictionary<int, Player> ExitGames.Client.Photon.LoadBalancing.Room.Players
getset

While inside a Room, this is the list of players who are also in that room.

string [] ExitGames.Client.Photon.LoadBalancing.Room.PropsListedInLobby
getset

Gets a list of custom properties that are in the RoomInfo of the Lobby. This list is defined when creating the room and can't be changed afterwards. Compare: LoadBalancingClient.OpCreateRoom()

You could name properties that are not set from the beginning. Those will be synced with the lobby when added later on.


The documentation for this class was generated from the following file: