Class DefaultRPCChain

java.lang.Object
eu.cloudnetservice.driver.network.rpc.defaults.DefaultRPCProvider
eu.cloudnetservice.driver.network.rpc.defaults.rpc.DefaultRPCChain
All Implemented Interfaces:
ChainableRPC, RPCChain, RPCExecutable, RPCProvider

public final class DefaultRPCChain extends DefaultRPCProvider implements RPCChain
Represents the default implementation of a rpc chain.
Since:
4.0
  • Field Details

    • chainHead

      private final RPC chainHead
    • chainTail

      private final RPC chainTail
    • fullChain

      private final List<RPC> fullChain
    • channelSupplier

      private final Supplier<NetworkChannel> channelSupplier
  • Constructor Details

  • Method Details

    • of

      Constructs a new rpc chain using the given root and tail rpc.
      Parameters:
      root - the root rpc for the chain.
      next - the tail rpc for the chain.
      channelSupplier - the target channel supplier to use for method invocation if no channel is provided.
      Returns:
      the constructed rpc chain.
      Throws:
      NullPointerException - if the given root rpc, tail rpc or channel supplier is null.
    • join

      Adds a join statement to the current rpc chain. This method always returns a new rpc chain with the given rpc as the last rpc. Therefore, the result type expectation when firring the rpc chain is based on the last rpc given to the chain using this method.

      A chain can be re-used infinite times and even joined on without making a change to the original rpc chain.

      Specified by:
      join in interface ChainableRPC
      Parameters:
      rpc - the rpc to join on the result of the current chain.
      Returns:
      a new rpc chain instance with the given rpc as its head rpc.
    • tail

      @NonNull public @NonNull RPC tail()
      Get the current last call of the chain (the head). All result expectations are based on this rpc.
      Specified by:
      tail in interface RPCChain
      Returns:
      the last call in the rpc chain.
    • joins

      @NonNull public @NonNull Collection<RPC> joins()
      Get all joins of the rpc in the order in which they get called. The first call in the chain will be the first element of this collection (method call order).
      Specified by:
      joins in interface RPCChain
      Returns:
      all joins of the rpc in the order in which they get called.
    • fireAndForget

      public void fireAndForget()
      Fires the current rpc into the first channel of the associated network component and doesn't wait for the result of the rpc to become available. This method will not suspend the current thread.
      Specified by:
      fireAndForget in interface RPCExecutable
    • fireSync

      public <T> @UnknownNullability T fireSync()
      Fires the current rpc into the first channel of the associated network component and waits for the result to become available, or times out after 30 seconds. This method will suspend the calling thread.
      Specified by:
      fireSync in interface RPCExecutable
      Type Parameters:
      T - the expected return type.
      Returns:
      the result of the method invocation, might be null if the remote method returned null.
    • fire

      @NonNull public <T> @NonNull CompletableFuture<T> fire()
      Fires the current rpc into the first channel of the associated network component and returns a future which will be completed with the return value of the method execution when it's available or completed with a timeout exception when the query packet future times out.
      Specified by:
      fire in interface RPCExecutable
      Type Parameters:
      T - the expected return type.
      Returns:
      a task completed with the result of the method invocation, null if the remote method returned null.
    • fireAndForget

      public void fireAndForget(@NonNull @NonNull NetworkChannel component)
      Fires the current rpc into the given network channel and doesn't wait for the result of the rpc to become available. This method will not suspend the current thread.
      Specified by:
      fireAndForget in interface RPCExecutable
      Parameters:
      component - the network channel to which the rpc should be sent.
    • fireSync

      @NonNull public <T> T fireSync(@NonNull @NonNull NetworkChannel component)
      Fires the current rpc into the given network channel and waits for the result to become available, or times out after 30 seconds. This method will suspend the calling thread.
      Specified by:
      fireSync in interface RPCExecutable
      Type Parameters:
      T - the expected return type.
      Parameters:
      component - the network channel to which the rpc should be sent.
      Returns:
      the result of the method invocation, might be null if the remote method returned null.
    • fire

      Fires the current rpc into the given network channel and returns a future which will be completed with the return value of the method execution when it's available or completed with a timeout exception when the query packet future times out. Note: if the target method return a task, this method does not return a task wrapping a task, but rather the return value in the task directly.
      Specified by:
      fire in interface RPCExecutable
      Type Parameters:
      T - the expected return type.
      Parameters:
      component - the network channel to which the rpc should be sent.
      Returns:
      a task completed with the result of the method invocation, null if the remote method returned null.