Class SFSApi

java.lang.Object
com.smartfoxserver.api.SFSApi
All Implemented Interfaces:
ISFSApi

public class SFSApi extends Object implements ISFSApi

Overview

The SFSApi class provides central access to the server side API. Here you find the vast majority of the methods for interacting with the server: creating Rooms, joining, message handling, setting User/Room variables and many more...

Specialized API

Additionally there are specialized API for specific tasks such as:
  • Game API: for quick games, challenges, invitations, etc...
  • BuyddList API: for managing buddy lists
  • MMO API: for MMO related functions, MMORoom creation, MMOItems etc...
See Also:
  • Field Details

    • sfs

      protected final SmartFoxServer sfs
    • log

      protected final org.slf4j.Logger log
    • globalUserManager

      protected com.smartfoxserver.entities.managers.IUserManager globalUserManager
    • responseAPI

      protected final com.smartfoxserver.api.response.ISFSResponseApi responseAPI
  • Constructor Details

  • Method Details

    • getScheduler

      public TaskScheduler getScheduler()
      Gets a reference to the global Task Scheduler. With this you can run delayed or repetitive tasks in the Extension code. The Scheduler is backed by virtual threads, so you can add as many tasks as needed.

      Specified by:
      getScheduler in interface ISFSApi
      Returns:
      a reference to server's Task Scheduler
      See Also:
    • getMailService

      public IMailerService getMailService()
      Access the SFSPostOffice to send email notifications and messages

      NOTE: before sending emails make sure the service is configured with a valid SMTP, via the AdminTool, under Server Configurator, Mailer

      The service is based on the SimpleEmail API (included in SFS3) which can also be used stand-alone in Extensions if necessary. For example to implement more sophisticated email sending procedures. You can check their documentation for further details.

      Specified by:
      getMailService in interface ISFSApi
      Returns:
      the mail service
    • runInSeparateThread

      public Future<?> runInSeparateThread(Runnable task)
      Description copied from interface: ISFSApi
      Runs a task in a separate (virtual) thread. This doesn't add new threads in the system but rather uses the global virtual thread ExecutorService to run the task concurrently.

      This is especially useful for I/O bound tasks, such as reading from an external resources such as an HTTP service or remote database.

      NOTE: always remember to catch all possible Exceptions inside your Runnable, otherwise they will silently escape with no notice.

      NOTE 2: There should be very few casesin which you need to use this method. Extension calls are already handled by a separate virtual threads, so there is no penalty in running blocking code directly in the current Extension's thread.

      Specified by:
      runInSeparateThread in interface ISFSApi
      Parameters:
      task - the Task to be run
      Returns:
      the Future representing the running Task
    • runInSeparateThread

      public <T> Future<T> runInSeparateThread(Callable<T> task)
      Description copied from interface: ISFSApi
      Similar to the above but uses a Callable which in turn can be used to return a result from the concurrent Task

      NOTE: always remember to catch all possible Exceptions inside your Callable, otherwise they will silently escape with no notice. NOTE 2: There should be very few casesin which you need to use this method. Extension calls are already handled by virtual threads, so there is no penalty in running blocking code directly in the Extension's thread.

      Example:

      
       
       class SlowCalculator implements Callable<Integer>
       {
       	int x,y;
       	
       	public SlowCalculator(int x, int y)
       	{
       		this.x = x; this.y = y;
       	}
       
       	public Integer call()
       	{
       		Thread.sleep(1000L);
       		return x + y;
       	}
       }
       
       var future = getApi().runInSeparateThread(new SlowCalculator(5,10));
       trace("Callable result: " + future.get());
       
        
      Specified by:
      runInSeparateThread in interface ISFSApi
      Parameters:
      task - the Task to be run
      Returns:
      the Future representing the running Task
    • getResponseAPI

      public com.smartfoxserver.api.response.ISFSResponseApi getResponseAPI()
      Specified by:
      getResponseAPI in interface ISFSApi
    • getUserById

      public User getUserById(int userId)
      Finds a User from its unique ID
      Specified by:
      getUserById in interface ISFSApi
      Parameters:
      userId - the User ID
      Returns:
      the User. It can be null if no User was found with that ID
    • getUserByName

      public User getUserByName(String name)
      Finds a User from its name
      Specified by:
      getUserByName in interface ISFSApi
      Parameters:
      name - the User name
      Returns:
      the User. It can be null if not User was found with that name (case sensitive)
    • getUserBySession

      public User getUserBySession(ISession session)
      Finds a User from its Session
      Specified by:
      getUserBySession in interface ISFSApi
      Parameters:
      session - the Session
      Returns:
      the User. It can be null if not User was found linked to that Session
    • kickUser

      public void kickUser(User userToKick, User modUser, String kickMessage, int delaySeconds)
      Kicks the User out. The operation allows to send a moderator message to the client prior to disconnecting it.
      Specified by:
      kickUser in interface ISFSApi
      Parameters:
      userToKick - the User to be kicked
      modUser - the mod/admin user, can be null to indicate generically the "Server"
      kickMessage - the moderator message
      delaySeconds - number of seconds before the disconnection is performed (recommended 5-10, to allow reading the message)
    • banUser

      public void banUser(User userToBan, User modUser, String banMessage, BanMode mode, int durationMinutes, int delaySeconds)
      Ban a User. The operation allows to send a moderator message to the client prior to disconnecting it.

      The length of the ban and the rules under which the ban can be removed are specified in your Zone configuration.

      Specified by:
      banUser in interface ISFSApi
      Parameters:
      userToBan - the User to be banned
      modUser - the mod/admin user, can be null to indicate generically the "Server"
      banMessage - the moderator message
      mode - choose between banning by ip address or by User name
      durationMinutes - the duration of the ban in minutes
      delaySeconds - number of seconds before the disconnection is performed
    • banUser

      public void banUser(User userToBan, User modUser, String banMessage, String reason, BanMode mode, int durationMinutes, int delaySeconds)
      Ban a User. The operation allows to send a moderator message to the client prior to disconnecting it.

      The length of the ban and the rules under which the ban can be removed are specified in your Zone configuration.

      Specified by:
      banUser in interface ISFSApi
      Parameters:
      userToBan - the User to be banned
      modUser - the mod/admin user, can be null to indicate generically the "Server"
      banMessage - a moderator message
      reason - the reason for the banishment (will appear in the AdminTool's BanManager but it's not sent to the User)
      mode - choose between banning by ip address or by User name
      durationMinutes - the duration of the banishment in minutes
      delaySeconds - number of seconds before the disconnection is performed
    • banUserFromRoom

      public void banUserFromRoom(List<User> bannedUsers, Room theRoom, String message, int interval, TimeUnit timeUnit)
      Bans a User from a Room.

      NOTE:This is a soft ban compared to the other forms of banishment, as the this is volatile (i.e. it's not stored by the server so it doesn't survive server restarts) and short-lived.

      The target User can be banned for a number of minutes (1..60) or hours (1..24). Afterwards they will be able to join again.

      If a message is provided, it will be sent prior to kicking the User out of the Room. The message is received as Moderator Message, and coming from the Room's owner.

      Specified by:
      banUserFromRoom in interface ISFSApi
      Parameters:
      bannedUsers - a list of Users to be banned
      theRoom - the target Room (the Users must be joined here)
      message - a custom message, that is received as Moderator Message on the client side
      interval - the duration of the banishment
      timeUnit - the time unit to use (minutes or hours)
    • findRooms

      public List<Room> findRooms(Collection<Room> roomList, MatchExpression expression, int limit)
      Find one or more Room(s) in the specified collection of Rooms.
      Specified by:
      findRooms in interface ISFSApi
      Parameters:
      roomList - the Collection of Rooms to search (for instance the Zone's own User list)
      expression - the matching expression
      limit - stop the search after a certain amount of matches (e.g. limit = 10, will return the first 10 Rooms matching the expression). limit = 0 will return all matches.
      Returns:
      the Rooms matching the passed expression
      See Also:
    • findUsers

      public List<User> findUsers(Collection<User> userList, MatchExpression expression, int limit)
      Find one or more User(s) in the specified collection of Users.
      Specified by:
      findUsers in interface ISFSApi
      Parameters:
      userList - the Collection of Users to search (for instance the Zone's own User list)
      expression - the matching expression
      limit - stop the search after a certain amount of matches (e.g. limit = 10, will return the first 10 Users matching the expression). limit = 0 will return all matches.
      Returns:
      the Users matching the passed expression
      See Also:
    • disconnect

      public void disconnect(ISession session, int delaySeconds)
      Description copied from interface: ISFSApi
      Works like ISFSApi.disconnect(ISession) with an extra delay in seconds
      Specified by:
      disconnect in interface ISFSApi
      Parameters:
      session - the Session
      delaySeconds - the delay before the disconnection
    • disconnect

      public void disconnect(ISession session)
      Removes a Session and the User connected with that session, if one exists
      Specified by:
      disconnect in interface ISFSApi
      Parameters:
      session - the session
    • disconnectUser

      public void disconnectUser(User user, IDisconnectionReason reason, int delaySeconds)
      Works like ISFSApi.disconnectUser(User, IDisconnectionReason) with an extra delay in seconds
      Specified by:
      disconnectUser in interface ISFSApi
      Parameters:
      user - the User
      reason - the reason for disconnection
      delaySeconds - the delay before the disconnection
      See Also:
    • disconnectUser

      public void disconnectUser(User user, IDisconnectionReason reason)
      Disconnect a User indicating a specific disconnection reason (for example because the User was Idle). NOTE: Sending a disconnection reason to the client allow avoiding that the User attempts a transparent reconnection (when available)
      Specified by:
      disconnectUser in interface ISFSApi
      Parameters:
      user - the User
      reason - the reason for disconnection
      See Also:
    • killConnection

      public void killConnection(User user)
      Simulates a sudden connection drop to test the reconnection system (HRC)

      When the HRC is active in the current Zone the client API will attempt the reconnection For more info see this tutorial.

      NOTE This will have no effect if the User's Zone is not enabled for reconnections

      Specified by:
      killConnection in interface ISFSApi
      Parameters:
      user - The user to disconnect
    • disconnectUser

      public void disconnectUser(User user)
      Disconnect the User abruptly.

      This will result in a sudden disconnection of the client with an Unknown disconnection reason. on the client side. If you want a more graceful disconnection see the ISFSApi.kickUser(User, User, String, int) method.

      Specified by:
      disconnectUser in interface ISFSApi
      Parameters:
      user - the User
      See Also:
    • removeRoom

      public void removeRoom(Room room)
      Removes a Room from its Zone, provided the Room is empty. If not you should invoke ISFSApi.emptyRoom(Room) first or invite users to leave within a certain time frame.
      Specified by:
      removeRoom in interface ISFSApi
      Parameters:
      room - the Room
    • removeRoom

      public void removeRoom(Room room, boolean fireClientEvent, boolean fireServerEvent)
      Removes a Room from its Zone
      Specified by:
      removeRoom in interface ISFSApi
      Parameters:
      room - the Room
      fireClientEvent - fires client side Event
      fireServerEvent - fires server side Event
    • checkSecurePassword

      public boolean checkSecurePassword(ISession session, String originalPass, String encryptedPass)
      Check an encrypted password sent by the User at login time.
      Specified by:
      checkSecurePassword in interface ISFSApi
      Parameters:
      session - the client session
      originalPass - the original un-encrypted password (typically coming from the user DB)
      encryptedPass - the encrypted password sent by the client
      Returns:
      true if the password is correct, false otherwise. Always return false if any of the two password is null or its length == 0
    • login

      public User login(ISession sender, String name, String pass, String zoneName, ISFSObject paramsOut)
      Specified by:
      login in interface ISFSApi
    • login

      public User login(ISession sender, String name, String pass, String zoneName, ISFSObject paramsOut, boolean forceLogout)
      Specified by:
      login in interface ISFSApi
    • logout

      public void logout(User user)
      Log a User out of the current Zone
      Specified by:
      logout in interface ISFSApi
      Parameters:
      user - the User
      See Also:
    • createNPC

      public User createNPC(String userName, Zone zone) throws SFSLoginException
      Create a connection-less NPC (Non-Player Character). The NPC will be seen in the system as a regular User although it can be recognized from the User.isNpc() flag.

      NOTE: NPCs must be created once the server engine is up and running. The init() method of an Extension runs before the engine is ready so you will to add a listener to the SFSEventType.SERVER_READY event and wait for that event before instantiating any NPC.

      Example:

      Specified by:
      createNPC in interface ISFSApi
      Parameters:
      userName - the NPC name
      zone - the Zone
      Returns:
      the User
      Throws:
      SFSLoginException
    • createNPC

      public User createNPC(String userName, Zone zone, boolean forceLogin) throws SFSLoginException
      Create a connection-less NPC (Non-Player Character). The NPC will be seen in the system as a regular User although it can be recognized from the User.isNpc() flag.

      NOTE: NPCs must be created once the server engine is up and running. The init() method of an Extension runs before the engine is ready so you will to add a listener to the SFSEventType.SERVER_READY event and wait for that event before instantiating any NPC.

      Example:

      Specified by:
      createNPC in interface ISFSApi
      Parameters:
      userName - the NPC name
      zone - the Zone
      forceLogin - if a User already exists with that name, it will disconnect it first
      Returns:
      the User
      Throws:
      SFSLoginException
    • createRoom

      public Room createRoom(Zone zone, CreateRoomSettings params, User owner) throws SFSCreateRoomException
      Create a new Room
      Specified by:
      createRoom in interface ISFSApi
      Parameters:
      zone - the Zone in which the Room is going to be created
      params - the Room settings
      owner - the Room owner, use null to indicate that the Room is owned by the Server itself
      Returns:
      the Room
      Throws:
      SFSCreateRoomException
      See Also:
    • createRoom

      public Room createRoom(Zone zone, CreateRoomSettings params, User owner, boolean joinIt, Room roomToLeave) throws SFSCreateRoomException
      Create a new Room
      Specified by:
      createRoom in interface ISFSApi
      Parameters:
      zone - the Zone in which the Room is going to be created
      params - the Room settings
      owner - the Room owner, use null to indicate that the Room is owned by the Server itself
      joinIt - if true the Room will be joined by the sender right after creation
      roomToLeave - a previous Room to leave after the join, or null to indicate no Room should be left
      Returns:
      the Room
      Throws:
      SFSCreateRoomException
      See Also:
    • createRoom

      public Room createRoom(Zone zone, CreateRoomSettings params, User owner, boolean joinIt, Room roomToLeave, boolean fireClientEvent, boolean fireServerEvent) throws SFSCreateRoomException
      Specified by:
      createRoom in interface ISFSApi
      Parameters:
      zone - the Zone in which the Room is going to be created
      params - the Room settings
      owner - the Room owner, when null it indicates that the Room is owned by the Server itself
      joinIt - if true the Room will be joined by the owner right after creation
      roomToLeave - a previous Room to leave after the join, or null to indicate no Room should be left
      fireClientEvent - fire a client side Event
      fireServerEvent - fire a server side Event
      Returns:
      the Room
      Throws:
      SFSCreateRoomException
      See Also:
    • joinRoom

      public void joinRoom(User user, Room room) throws SFSJoinRoomException
      Join the user in a room.

      This is the quickest way to join a User in non password-protected Rooms. By default the User leaves the previously joined Room (if any).

      In game rooms the user is joined as player, meaning that he/she is assigned a player id. You can use the overloaded method ISFSApi.joinRoom(User, Room, String, boolean, Room, boolean, boolean) for more options, e.g. for joining as a spectator.

      Thread safety notes: The same User can be in one join transaction at a time. If you need to join a player in multiple Rooms there are no concurrency concerns, as long as you're working in the same thread (which is expected). In case you have multiple threads attempting to join the same User in multiple Rooms make sure to synchronize the call.

      Specified by:
      joinRoom in interface ISFSApi
      Parameters:
      user - the User
      room - the Room in which to join the User
      Throws:
      SFSJoinRoomException
    • joinRoom

      public void joinRoom(User user, Room roomToJoin, String password, boolean asSpectator, Room roomToLeave) throws SFSJoinRoomException
      Join the user in a room.
      A client update and server side event will be also fired
      Specified by:
      joinRoom in interface ISFSApi
      Parameters:
      user - the User
      roomToJoin - the Room in which to join the User
      password - an optional password if the room requires it. Use null if no password is needed
      asSpectator - join the room as spectator, in case of a game Room
      roomToLeave - optionally specify a Room that should be left after a successful join. Pass null to indicate that no Room should be left, allowing the User to be joined in multiple Rooms at the same time
      Throws:
      SFSJoinRoomException
    • joinRoom

      public void joinRoom(User user, Room roomToJoin, String password, boolean asSpectator, Room roomToLeave, boolean fireClientEvent, boolean fireServerEvent) throws SFSJoinRoomException
      Join the user in a Room.
      Specified by:
      joinRoom in interface ISFSApi
      Parameters:
      user - the User
      roomToJoin - the room to join
      password - an optional password if the room requires it. Use null if no password is needed
      asSpectator - join the room as spectator, in case of a game room
      roomToLeave - optional Room that should be left if the Join operation is successful. Pass null to indicate that no Room should be left, allowing the User to be joined in multiple Rooms at the same time
      fireClientEvent - fires client side Event
      fireServerEvent - fires server side Event
      Throws:
      SFSJoinRoomException
    • leaveRoom

      public void leaveRoom(User user, Room room)
      Removes a User from a previously joined Room
      Specified by:
      leaveRoom in interface ISFSApi
      Parameters:
      user - the User
      room - the Room
    • leaveRoom

      public void leaveRoom(User user, Room room, boolean fireClientEvent, boolean fireServerEvent)
      Removes a User from a previously joined Room
      Specified by:
      leaveRoom in interface ISFSApi
      Parameters:
      user - the User
      room - the Room
      fireClientEvent - fires client side Event
      fireServerEvent - fires server side Event
    • emptyRoom

      public void emptyRoom(Room targetRoom)
      Removes all Users from the target Room. The Room is deactivated first to block other join requests, then its emptied and left deactivated. The Room may be removed after this call if the relative SFSRoomRemoveMode attribute is configured to do so.
      Specified by:
      emptyRoom in interface ISFSApi
      Parameters:
      targetRoom - the Room to be emptied
      See Also:
    • emptyRoom

      public void emptyRoom(Room targetRoom, boolean deactivateRoom)
      Removes all Users from the target Room. The Room can be deactivated first to block other join requests, and will remain in the required state. The Room may be removed after this call if the relative SFSRoomRemoveMode attribute is configured to do so.
      Specified by:
      emptyRoom in interface ISFSApi
      Parameters:
      targetRoom - the Room to be emptied
      deactivateRoom - use true to deactivate the Room and avoid concurrent and/or subsequent join operations
      See Also:
    • emptyRoom

      public void emptyRoom(Room targetRoom, boolean deactivateRoom, boolean fireClientEvent, boolean fireServerEvent)
      Removes all Users from the target Room. The Room can be deactivated first to block other join requests, and will remain in the required state. The Room may be removed after this call if the relative SFSRoomRemoveMode attribute is configured to do so.
      Specified by:
      emptyRoom in interface ISFSApi
      Parameters:
      targetRoom - the Room to be emptied
      deactivateRoom - use true to deactivate the Room and avoid concurrent and/or subsequent join operations
      fireClientEvent - fires client side Event
      fireServerEvent - fires server side Event
      See Also:
    • quickJoinOrCreateRoom

      public void quickJoinOrCreateRoom(User user, MatchExpression expression, Collection<String> groupList, CreateRoomSettings settings) throws SFSJoinRoomException, SFSCreateRoomException
      Searches for a Room that matches the provided MatchExpression and joins the User in the first occurrence found. If nothing is found proceeds with creating a Room with the provided configuration and joins the User there instead.
      Specified by:
      quickJoinOrCreateRoom in interface ISFSApi
      Parameters:
      user - the User requesting to join
      expression - a MatchExpression to filter specific Rooms
      groupList - one or more valid Room group names where to apply the MatchExpression
      settings - the room settings to use for creating a new Room if the search fails
      Throws:
      SFSJoinRoomException
      SFSCreateRoomException
      See Also:
    • quickJoinOrCreateRoom

      public void quickJoinOrCreateRoom(User user, MatchExpression expression, Collection<String> groupList, CreateRoomSettings settings, Room roomToLeave) throws SFSJoinRoomException, SFSCreateRoomException
      Searches for a Room that matches the provided MatchExpression and joins the User in the first Room found. If nothing is found proceeds with creating a Room with the provided configuration and joins the User there.
      Specified by:
      quickJoinOrCreateRoom in interface ISFSApi
      Parameters:
      user - the User requesting to join
      expression - a MatchExpression to filter specific Rooms
      groupList - one or more valid Room group names where to apply the MatchExpression
      settings - the Room settings to create a new Room, if the search fails
      roomToLeave - a Room currently joined by the User that should be left upon successful joining
      Throws:
      SFSJoinRoomException
      SFSCreateRoomException
      See Also:
    • sendPublicMessage

      public void sendPublicMessage(Room targetRoom, User sender, String message, ISFSObject params)
      Sends a public chat message. The message is broadcast to all Users in the same Room including the sender.
      Specified by:
      sendPublicMessage in interface ISFSApi
      Parameters:
      targetRoom - the Room where the message is sent
      sender - the User sending the message
      message - the message
      params - an optional object with additional parameters (e.g. text color, font size, etc...)
      See Also:
    • sendPrivateMessage

      public void sendPrivateMessage(User sender, User recipient, String message, ISFSObject params)
      Sends a private chat message. The message is sent to both the sender and receiver. The sender and receiver can be in any Rooms or even not joined in any rooms at all.
      Specified by:
      sendPrivateMessage in interface ISFSApi
      Parameters:
      sender - the sender of the message
      recipient - the recipient of the message
      message - the chat message
      params - an optional object with extra parameters (e.g. the font type, color etc...)
      See Also:
    • sendBuddyMessage

      public void sendBuddyMessage(User sender, User recipient, String message, ISFSObject params) throws SFSBuddyListException
      Sends a Buddy message to a specific user. The recipient must be in the sender's buddy list for this to work The message is sent to both the sender and receiver.
      Specified by:
      sendBuddyMessage in interface ISFSApi
      Parameters:
      sender - the sender of the message
      recipient - the recipient of the message
      message - the chat message
      params - a custom SFSObjects with extra parameters (e.g. the font type, color etc...)
      Throws:
      SFSBuddyListException - in case it's not possible to send the message
    • sendModeratorMessage

      public void sendModeratorMessage(User sender, String message, ISFSObject params, Collection<ISession> recipients)
      Sends a moderator message to a number of Users. The sender parameter must be either a real User with "SuperUser" privileges or null. In the second case the sender becomes the "Server" itself.
      Specified by:
      sendModeratorMessage in interface ISFSApi
      Parameters:
      sender - the moderator user sending this message or null, indicating a Server originated mod message
      message - the message
      params - an optional object with custom parameters
      recipients - the recipients of the message
      See Also:
    • sendAdminMessage

      public void sendAdminMessage(User sender, String message, ISFSObject params, Collection<ISession> recipients)
      Sends a admin message to a number of Users. The sender parameter must be either a real User with "SuperUser" privileges or null. In this last case the sender becomes the "Server" itself.
      Specified by:
      sendAdminMessage in interface ISFSApi
      Parameters:
      sender - the admin user sending this message or null, indicating a Server originated admin message
      message - the message
      params - an optional object with custom parameters
      recipients - the recipients of the message
      See Also:
    • sendObjectMessage

      public void sendObjectMessage(Room targetRoom, User sender, ISFSObject message, Collection<User> recipients)

      Send an Object message. This message is an SFSObject populated any data. Typically this is used for sending game data (moves, state, updates etc.) to players or other game/app related updates. The message is sent to all users in the specified target room (sender excluded). It's also possible to pass a collection of recipients, provided they are joined in the same Room.

      NOTE: The sender must be joined in the target Room.

      Specified by:
      sendObjectMessage in interface ISFSApi
      Parameters:
      targetRoom - the Room where the message will be sent to
      sender - the sender of the message
      message - the message data
      recipients - use null to send the message to all clients in the Room, or specify a collection of recipients
    • sendExtensionResponse

      public void sendExtensionResponse(String cmdName, ISFSObject params, List<User> recipients, Room room, TransportType txType)
      Specified by:
      sendExtensionResponse in interface ISFSApi
    • sendExtensionResponse

      public void sendExtensionResponse(String cmdName, ISFSObject params, User recipient, Room room, TransportType txType)
      Specified by:
      sendExtensionResponse in interface ISFSApi
    • setRoomVariables

      public void setRoomVariables(User user, Room targetRoom, List<RoomVariable> variables)
      Set Room Variables and update all clients.

      Only variables that change are broadcast to the other Users in the Room. Variables can be deleted using this request by setting their value to null.

      Specified by:
      setRoomVariables in interface ISFSApi
      Parameters:
      user - the sender, null sets ownership of the variables to the Server itself
      targetRoom - the Room in which variables should be set
      variables - a list of Room variables
      See Also:
    • setRoomVariables

      public void setRoomVariables(User user, Room targetRoom, List<RoomVariable> variables, boolean fireClientEvent, boolean fireServerEvent, boolean overrideOwnership)
      Set Room Variables and update all clients.

      Only variables that change are broadcast to the other Users in the Room. Variables can be deleted using this request by setting their value to null.

      Specified by:
      setRoomVariables in interface ISFSApi
      Parameters:
      user - the sender, null sets ownership of the variables to the Server itself
      targetRoom - the Room in which variables should be set
      variables - a list of RoomVariables
      fireClientEvent - fires client side Event
      fireServerEvent - fires server side Event
      overrideOwnership - allow to override the ownership of variables. This means that a User would be able to modify variables that he doesn't own.
      See Also:
    • setUserVariables

      public void setUserVariables(User owner, List<UserVariable> variables)
      Set User Variables.

      Only variables that change are broadcast to Users in the Room. Variables can be deleted by setting their value to null.

      Specified by:
      setUserVariables in interface ISFSApi
      Parameters:
      owner - the User for which variables are set
      variables - a list of UserVariables
      See Also:
    • setUserVariables

      public void setUserVariables(User owner, List<UserVariable> variables, boolean fireClientEvent, boolean fireServerEvent)
      Set User Variables.

      Only variables that change are broadcast to Users in the Room. Variables can be deleted by setting their value to null.

      Specified by:
      setUserVariables in interface ISFSApi
      Parameters:
      owner - the User for which variables are set
      variables - a list of UserVariables
      fireClientEvent - fires client side Event
      fireServerEvent - fires server side Event
      See Also:
    • changeRoomName

      public void changeRoomName(User owner, Room targetRoom, String newName) throws SFSRoomException
      Rename an existing Room. Errors can be triggered in these cases:
      • the new name collides with another Room
      • the new name length is out of the range allowed by the Zone configuration
      • the new name contains bad words (if word filter is configured)
      Specified by:
      changeRoomName in interface ISFSApi
      Parameters:
      owner - the User, it can be null if this is called on the server side
      targetRoom - the Room
      newName - the new Room name
      Throws:
      SFSRoomException
    • changeRoomPassword

      public void changeRoomPassword(User owner, Room targetRoom, String newPassword) throws SFSRoomException
      Changes the Room password and the Room password-state. The password state indicates if a Room is private and requires a password for accessing it or not. Passing null or an empty string will make the Room public. Passing a valid string as the password will make the Room private.
      Specified by:
      changeRoomPassword in interface ISFSApi
      Parameters:
      owner - the User, it can be null if this is called on the server side
      targetRoom - the Room
      newPassword - the new password
      Throws:
      SFSRoomException
    • changeRoomCapacity

      public void changeRoomCapacity(User owner, Room targetRoom, int maxUsers, int maxSpectators) throws SFSRoomException
      Changes the capacity (max number of Users and Spectators) in the Room. In case the Room size is shrunk extra players or spectators will not be kicked out of the Room.
      Specified by:
      changeRoomCapacity in interface ISFSApi
      Parameters:
      owner - owner of the Room, null to indicate the Server itself
      targetRoom - the Room
      maxUsers - new maxUsers value
      maxSpectators - new maxSpectators value
      Throws:
      SFSRoomException
    • subscribeRoomGroup

      public void subscribeRoomGroup(User user, String groupId)
      Subscribe User to a Room Group. This enables the User to receive events for Rooms (new Room added/removed, Room count changes) in that Group
      Specified by:
      subscribeRoomGroup in interface ISFSApi
      Parameters:
      user - the User
      groupId - the group name
    • unsubscribeRoomGroup

      public void unsubscribeRoomGroup(User user, String groupId)
      Unsubscribe User to a Room Group. Removes the subscription, therefore events from the Rooms in the Group will not trigger for the User
      Specified by:
      unsubscribeRoomGroup in interface ISFSApi
      Parameters:
      user - the User
      groupId - the group name
    • sendGenericMessage

      public void sendGenericMessage(com.smartfoxserver.api.GenericMessageType type, User sender, int targetRoomId, String message, ISFSObject params, Collection<ISession> recipients)
      Specified by:
      sendGenericMessage in interface ISFSApi
    • spectatorToPlayer

      public void spectatorToPlayer(User user, Room targetRoom, boolean fireClientEvent, boolean fireServerEvent) throws SFSRoomException
      Description copied from interface: ISFSApi
      Turns a spectator in a Game Room to a Player. The action will fail if no player slot is available.
      Specified by:
      spectatorToPlayer in interface ISFSApi
      Parameters:
      user - the User
      targetRoom - the Room in which the spectator will be turned into a player
      fireClientEvent - if true send an update to the client (recommended)
      fireServerEvent - if true fire a server side event
      Throws:
      SFSRoomException
    • playerToSpectator

      public void playerToSpectator(User user, Room targetRoom, boolean fireClientEvent, boolean fireServerEvent) throws SFSRoomException
      Description copied from interface: ISFSApi
      Turns a player in a Game Room to a spectator. The action will fail if no spectator slot is available.
      Specified by:
      playerToSpectator in interface ISFSApi
      Parameters:
      user - the User
      targetRoom - the Room in which the player will be turned into a spectator
      fireClientEvent - if true send an update to the client (recommended)
      fireServerEvent - if true fire a server side event
      Throws:
      SFSRoomException
    • getUptime

      public com.smartfoxserver.util.ServerUptime getUptime()
      Description copied from interface: ISFSApi
      Provides the server's uptime
      Specified by:
      getUptime in interface ISFSApi
      Returns:
      the server's uptime
    • getSFSVersion

      public String getSFSVersion()
      Description copied from interface: ISFSApi
      Provides the current SmartFoxServer version
      Specified by:
      getSFSVersion in interface ISFSApi
      Returns:
      the server version