The MatchExpression class represents a matching expression used to compare custom variables or predefined properties when searching for users or Rooms.
Inheritance Hierarchy SystemObject
Sfs2X.Entities.MatchMatchExpression
Namespace:
Sfs2X.Entities.Match
Assembly:
SmartFox2X (in SmartFox2X.dll) Version: 1.8.0.0 (1.8.0)
Syntax public class MatchExpression
The MatchExpression type exposes the following members.
Constructors Properties
| Name | Description |
---|
| Condition |
Returns the matching criteria used during values comparison.
|
| LogicOp |
In case of concatenated expressions, returns the current logical operator.
|
| VarName |
Returns the name of the variable or property against which the comparison is made.
|
| VarValue |
Returns the value against which the variable or property corresponding to varName is compared.
|
TopMethods
| Name | Description |
---|
| And |
Concatenates the current expression with a new one using the logical AND operator.
|
| HasNext |
Checks if the current matching expression is concatenated to another one through a logical operator.
|
| Next |
Get the next matching expression concatenated to the current one.
|
| Or |
Concatenates the current expression with a new one using the logical OR operator.
|
| Rewind |
Moves the iterator cursor to the first matching expression in the chain.
|
| ToString |
Returns a string representation of the matching expression.
(Overrides ObjectToString.) |
TopRemarks
The matching expressions are built like "if" statements in any common programming language. They work like queries in a database and can be used to search for Rooms
or users using custom criteria: in fact a matching expression can compare predefined properties of the Room and user entities
(see the
RoomProperties and
UserProperties classes),but also custom Room or User Variables.
These expressions are easy to create and concatenate, and they can be used for many different filtering operations within the SmartFoxServer 2X framework,
for example to invite players to join a game (see the
CreateSFSGameRequest request description),
to look for specific Rooms or users (see the
FindRoomsRequest and
FindUsersRequest requests descriptions), etc.
Additionally (see the examples for more informations):
- any number of expressions can be linked together with the logical AND and OR operators to create complex queries;
- searching through nested data structures such as SFSObject and SFSArray can be done via a very simple dot-syntax.
Examples
The following example shows how to create a simple matching expression made of two concatenated conditions: it compares the custom "rank" and "country"
User Variables to the passed values. This expression could be used during the creation of a Game Room, to filter the users that the server should take
into account when sending the invitations to join the game (only italian users with a ranking greater than 5 - whatever this number means to our game):
MatchExpression exp = new MatchExpression('rank', NumberMatch.GREATER_THAN, 5).And('country', StringMatch.EQUALS, 'Italy');
The following example creates a matching expression made of three concatenated conditions which compare two predefined Room properties and the custom "isGameStarted"
Room Variable to the passed values; this expression could be used to retrieve all the Game Rooms still waiting for players to join them:
MatchExpression exp = new MatchExpression(RoomProperties.IS_GAME, BoolMatch.EQUALS, true)
.And(RoomProperties.HAS_FREE_PLAYER_SLOTS, BoolMatch.EQUALS, true)
.And("isGameStarted", BoolMatch.EQUALS, false);
The following example creates a matching expression which compares a nested property in a complex data structure; an SFSObject called "avatarData" (could be a User Variable for example)
contains the "shield" object (a nested SFSObject) which in turn contains, among others, the "inUse" property which could be used to retrieve all user
whose avatars are currently equipped with a shield:
MatchExpression exp = new MatchExpression("avatarData.shield.inUse", BoolMatch.EQUALS, true);
The following example is similar to the previous one, but it involves an SFSArray. The "avatarData" object contains the "weapons" SFSArray, from which the expression retrieves
the third element (that .3 means "give me the element at index == 3") that we know being the weapon the user avatar has in his right hand. Again, this element is an SFSObject containing,
among the others, the "name" property which can be compared to the passed string. This example could be used to retrieve all users whose avatars have the Narsil sword in the right hand:
MatchExpression exp = new MatchExpression("avatarData.weapons.3.name", StringMatch.EQUALS, "Narsil");
See Also