Class AbstractServer<T extends Remote,A extends ServerAdmin>

Type Parameters:
T - the type of remote interface served by this server
A - the type of the admin interface this server provides
All Implemented Interfaces:
Server<T,A>, Serializable, Remote
Direct Known Subclasses:
EntityServer

public abstract class AbstractServer<T extends Remote,A extends ServerAdmin> extends UnicastRemoteObject implements Server<T,A>
A default Server implementation.
See Also:
  • Constructor Details

  • Method Details

    • connections

      public final Map<RemoteClient,T> connections()
      Returns:
      a map containing the current connections
    • connection

      public final T connection(UUID clientId)
      Parameters:
      clientId - the client id
      Returns:
      the connection associated with the given client
      Throws:
      IllegalArgumentException - in case no such client is connected
    • connectionCount

      public final int connectionCount()
      Returns:
      the current number of connections
    • getConnectionLimit

      public final int getConnectionLimit()
      Returns:
      the maximum number of concurrent connections accepted by this server, a negative number means no limit while 0 means the server is closed.
    • setConnectionLimit

      public final void setConnectionLimit(int connectionLimit)
      Parameters:
      connectionLimit - the maximum number of concurrent connections accepted by this server, a negative number means no limit while 0 means the server is closed.
    • getMaintenanceInterval

      public final int getMaintenanceInterval()
      Returns:
      the maintenance check interval in ms
    • setMaintenanceInterval

      public final void setMaintenanceInterval(int maintenanceInterval)
      Parameters:
      maintenanceInterval - the new maintenance interval in ms
    • serverInformation

      public final ServerInformation serverInformation()
      Specified by:
      serverInformation in interface Server<T extends Remote,A extends ServerAdmin>
      Returns:
      static information about this server
    • connectionsAvailable

      public final boolean connectionsAvailable()
      Specified by:
      connectionsAvailable in interface Server<T extends Remote,A extends ServerAdmin>
      Returns:
      true if there are connections available
    • connect

      public final T connect(ConnectionRequest connectionRequest) throws RemoteException, ConnectionNotAvailableException, LoginException
      Description copied from interface: Server
      Establishes a connection to this Server
      Specified by:
      connect in interface Server<T extends Remote,A extends ServerAdmin>
      Parameters:
      connectionRequest - the information required for establishing a connection
      Returns:
      a remote connection instance
      Throws:
      RemoteException - in case of a communication error
      ConnectionNotAvailableException - in case the server isn't accepting more connections
      LoginException - in case the login fails
    • disconnect

      public final void disconnect(UUID clientId)
      Description copied from interface: Server
      Disconnects the connection identified by the given key.
      Specified by:
      disconnect in interface Server<T extends Remote,A extends ServerAdmin>
      Parameters:
      clientId - the UUID identifying the client that should be disconnected
    • shutdown

      public final void shutdown()
      Shuts down this server.
    • addAuthenticator

      public final void addAuthenticator(Authenticator authenticator)
      Adds a Authenticator instance to this server. If Authenticator.clientType() is empty, the authenticator is shared between all client types, otherwise it is only used for clients of the given type.
      Parameters:
      authenticator - the authenticator to add
      Throws:
      IllegalStateException - in case an authenticator with the same clientType has been added
    • setAdmin

      protected final void setAdmin(A admin)
      Sets the admin instance for this server
      Parameters:
      admin - the admin instance
      Throws:
      IllegalStateException - in case an admin instance has already been set
    • getAdmin

      protected final A getAdmin()
      Returns:
      the admin instance associated with this server
      Throws:
      IllegalStateException - in case no admin instance has been set
      See Also:
    • addShutdownListener

      protected final void addShutdownListener(Runnable listener)
      Parameters:
      listener - a listener notified when this server is shutting down.
    • connect

      protected abstract T connect(RemoteClient remoteClient) throws RemoteException, LoginException
      Establishes the actual client connection.
      Parameters:
      remoteClient - the remote client
      Returns:
      a connection for the given client
      Throws:
      RemoteException - in case of an exception
      LoginException - in case of an error during the login
    • disconnect

      protected abstract void disconnect(T connection) throws RemoteException
      Disconnects the given connection.
      Parameters:
      connection - the connection to disconnect
      Throws:
      RemoteException - in case of an exception
    • maintainConnections

      protected abstract void maintainConnections(Collection<AbstractServer.ClientConnection<T>> connections) throws RemoteException
      Maintains the given connections, that is, disconnects inactive or invalid connections, if required.
      Parameters:
      connections - all current connections
      Throws:
      RemoteException - in case of an exception
    • clients

      protected final Collection<RemoteClient> clients(String clientType)
      Parameters:
      clientType - the client type
      Returns:
      all clients of the given type
    • registry

      protected final Registry registry() throws RemoteException
      Returns:
      the Registry instance
      Throws:
      RemoteException - in case of an exception
    • logShutdownAndReturn

      protected final <T extends Throwable> T logShutdownAndReturn(T exception)
      Logs the given exception and shuts down this server
      Type Parameters:
      T - the exception type
      Parameters:
      exception - the exception
      Returns:
      the exception
    • auxiliaryServers

      protected final Collection<AuxiliaryServer> auxiliaryServers()
      Returns:
      an unmodifiable view of the auxialiary servers running along side this server
    • validateUserCredentials

      protected static void validateUserCredentials(User userToCheck, User requiredUser) throws ServerAuthenticationException
      Validates the given user credentials
      Parameters:
      userToCheck - the credentials to check
      requiredUser - the required credentials
      Throws:
      ServerAuthenticationException - in case either User instance is null or if the username or password do not match