Interface ISFSApi

All Known Implementing Classes:
SFSApi

public interface ISFSApi
  • Method Details

    • getResponseAPI

      com.smartfoxserver.api.response.ISFSResponseApi getResponseAPI()
      Internal
    • getScheduler

      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.

      Returns:
      a reference to server's Task Scheduler
      See Also:
    • getMailService

      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.

      Returns:
      the mail service
    • runInSeparateThread

      Future<?> runInSeparateThread(Runnable task)
      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.

      Parameters:
      task - the Task to be run
      Returns:
      the Future representing the running Task
    • runInSeparateThread

      <T> Future<T> runInSeparateThread(Callable<T> task)
      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());
       
        
      Parameters:
      task - the Task to be run
      Returns:
      the Future representing the running Task
    • checkSecurePassword

      boolean checkSecurePassword(ISession session, String originalPass, String encryptedPass)
      Check an encrypted password sent by the User at login time.
      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
      Throws:
      IllegalArgumentException - if invalid hash strings are passed
    • login

      User login(ISession session, String name, String pass, String zoneName, ISFSObject params)
      Internal
    • login

      User login(ISession session, String name, String pass, String zoneName, ISFSObject params, boolean forceLogout)
      Internal
    • logout

      void logout(User user)
      Log a User out of the current Zone
      Parameters:
      user - the User
      See Also:
    • createNPC

      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:

      Parameters:
      userName - the NPC name
      zone - the Zone
      Returns:
      the User
      Throws:
      SFSLoginException
    • createNPC

      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:

      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
    • kickUser

      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.
      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

      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.

      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

      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.

      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

      void banUserFromRoom(List<User> bannedUsers, Room theRoom, String message, int timeInterval, 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.

      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
      timeInterval - the duration of the banishment
      timeUnit - the time unit to use (minutes or hours)
    • killConnection

      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

      Parameters:
      user - The user to disconnect
    • disconnectUser

      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 kickUser(User, User, String, int) method.

      Parameters:
      user - the User
      See Also:
    • disconnectUser

      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)
      Parameters:
      user - the User
      reason - the reason for disconnection
      See Also:
    • disconnectUser

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

      void disconnect(ISession session)
      Disconnect a Session abruptly.
      Parameters:
      session - the Session
    • disconnect

      void disconnect(ISession session, int delaySeconds)
      Works like disconnect(ISession) with an extra delay in seconds
      Parameters:
      session - the Session
      delaySeconds - the delay before the disconnection
    • createRoom

      Room createRoom(Zone zone, CreateRoomSettings settings, User owner) throws SFSCreateRoomException
      Create a new Room
      Parameters:
      zone - the Zone in which the Room is going to be created
      settings - 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

      Room createRoom(Zone zone, CreateRoomSettings settings, User owner, boolean joinIt, Room roomToLeave) throws SFSCreateRoomException
      Create a new Room
      Parameters:
      zone - the Zone in which the Room is going to be created
      settings - 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

      Room createRoom(Zone zone, CreateRoomSettings settings, User owner, boolean joinIt, Room roomToLeave, boolean fireClientEvent, boolean fireServerEvent) throws SFSCreateRoomException
      Parameters:
      zone - the Zone in which the Room is going to be created
      settings - 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:
    • findUsers

      List<User> findUsers(Collection<User> userList, MatchExpression expression, int limit)
      Find one or more User(s) in the specified collection of Users.
      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:
    • findRooms

      List<Room> findRooms(Collection<Room> roomList, MatchExpression expression, int limit)
      Find one or more Room(s) in the specified collection of Rooms.
      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:
    • getUserById

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

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

      User getUserBySession(ISession session)
      Finds a User from its Session
      Parameters:
      session - the Session
      Returns:
      the User. It can be null if not User was found linked to that Session
    • joinRoom

      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 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.

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

      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
      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

      void joinRoom(User user, Room roomToJoin, String password, boolean asSpectator, Room roomToLeave, boolean fireClientEvent, boolean fireServerEvent) throws SFSJoinRoomException
      Join the user in a Room.
      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

      void leaveRoom(User user, Room room)
      Removes a User from a previously joined Room
      Parameters:
      user - the User
      room - the Room
    • leaveRoom

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

      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.
      Parameters:
      targetRoom - the Room to be emptied
      See Also:
    • emptyRoom

      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.
      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

      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.
      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

      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.
      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

      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.
      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:
    • removeRoom

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

      void removeRoom(Room room, boolean fireClientEvent, boolean fireServerEvent)
      Removes a Room from its Zone
      Parameters:
      room - the Room
      fireClientEvent - fires client side Event
      fireServerEvent - fires server side Event
    • sendPublicMessage

      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.
      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

      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.
      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

      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.
      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
    • sendGenericMessage

      void sendGenericMessage(com.smartfoxserver.api.GenericMessageType type, User sender, int targetRoomId, String message, ISFSObject params, Collection<ISession> recipients)
      Internal
    • sendModeratorMessage

      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.
      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

      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.
      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

      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.

      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

      void sendExtensionResponse(String cmdName, ISFSObject params, List<User> recipients, Room room, TransportType txType)
      Internal
    • sendExtensionResponse

      void sendExtensionResponse(String cmdName, ISFSObject params, User recipient, Room room, TransportType txType)
      Internal
    • setRoomVariables

      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.

      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

      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.

      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

      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.

      Parameters:
      owner - the User for which variables are set
      variables - a list of UserVariables
      See Also:
    • setUserVariables

      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.

      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

      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)
      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

      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.
      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

      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.
      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

      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
      Parameters:
      user - the User
      groupId - the group name
    • unsubscribeRoomGroup

      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
      Parameters:
      user - the User
      groupId - the group name
    • spectatorToPlayer

      void spectatorToPlayer(User user, Room targetRoom, boolean fireClientEvent, boolean fireServerEvent) throws SFSRoomException
      Turns a spectator in a Game Room to a Player. The action will fail if no player slot is available.
      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

      void playerToSpectator(User user, Room targetRoom, boolean fireClientEvent, boolean fireServerEvent) throws SFSRoomException
      Turns a player in a Game Room to a spectator. The action will fail if no spectator slot is available.
      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

      com.smartfoxserver.util.ServerUptime getUptime()
      Provides the server's uptime
      Returns:
      the server's uptime
    • getSFSVersion

      String getSFSVersion()
      Provides the current SmartFoxServer version
      Returns:
      the server version