Class DefaultRPC

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

public final class DefaultRPC extends DefaultRPCProvider implements RPC
The default implementation of a rpc.
Since:
4.0
  • Field Details

    • sender

      private final RPCSender sender
    • channelSupplier

      private final Supplier<NetworkChannel> channelSupplier
    • arguments

      private final Object[] arguments
    • targetMethod

      private final RPCMethodMetadata targetMethod
    • dropResult

      private boolean dropResult
    • executionTimeout

      private Duration executionTimeout
  • Constructor Details

  • Method Details

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

      @NonNull public @NonNull RPCSender sender()
      Get the sender from which the rpc call is coming (better known as the base class in which the method to call by this rpc is located in).
      Specified by:
      sender in interface RPC
      Returns:
      the sender of this rpc.
    • className

      @NonNull public @NonNull String className()
      Get the fully qualified name of the class the target method is located in.
      Specified by:
      className in interface RPC
      Returns:
      the fully qualified name of the class the target method is located in.
    • methodName

      @NonNull public @NonNull String methodName()
      Get the name of the method which should get called.
      Specified by:
      methodName in interface RPC
      Returns:
      the name of the method which should get called.
    • methodDescriptor

      @NonNull public @NonNull String methodDescriptor()
      Get the descriptor string of the method that should be invoked.
      Specified by:
      methodDescriptor in interface RPC
      Returns:
      the descriptor string of the method that should be invoked.
    • arguments

      @NonNull public @NonNull Object[] arguments()
      Get the arguments which should get used to call the method. The main identification of a method happens based on the name and the amount of arguments supplied. Invalid arguments might cause exceptions on the receiver site.
      Specified by:
      arguments in interface RPC
      Returns:
      the arguments which should get used to call the method.
    • expectedResultType

      @NonNull public @NonNull Type expectedResultType()
      Get the expected result type of the method invocation. Can be void.
      Specified by:
      expectedResultType in interface RPC
      Returns:
      the expected result type of the method invocation.
    • targetMethod

      @NonNull public @NonNull RPCMethodMetadata targetMethod()
      Get the full metadata of the target method.
      Specified by:
      targetMethod in interface RPC
      Returns:
      the full metadata of the target method.
    • timeout

      @NonNull public @NonNull RPC timeout(@Nullable @Nullable Duration timeout)
      Sets the timeout that should be applied to the RPC. The default value is derived from the target in the target class (using the RPCTimeout annotation). If no timeout is set, the fire methods will wait for a method result forever.
      Specified by:
      timeout in interface RPC
      Parameters:
      timeout - the timeout to apply to the method invocation.
      Returns:
      this RPC, for chaining.
    • timeout

      @Nullable public @Nullable Duration timeout()
      Get the timeout that is applied to this RPC, if any.
      Specified by:
      timeout in interface RPC
      Returns:
      the timeout applied to this RPC.
    • dropResult

      @NonNull public @NonNull RPC dropResult()
      Disables that this rpc is waiting for a result from the target network component. By default, the current component will always wait for the target method to be executed on the receiver site, event if the method returns void.
      Specified by:
      dropResult in interface RPC
      Returns:
      the same instance used to call the method, for chaining.
    • resultDropped

      public boolean resultDropped()
      Get whether the result of the method call is discarded and the execution of the method should not be waited for.
      Specified by:
      resultDropped in interface RPC
      Returns:
      true if the result of this RPC gets discarded, false otherwise.
    • 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

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