All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.scalecube.services.transport.rsocket.RSocketServiceTransport Maven / Gradle / Ivy

package io.scalecube.services.transport.rsocket;

import io.scalecube.services.transport.api.ClientTransport;
import io.scalecube.services.transport.api.HeadersCodec;
import io.scalecube.services.transport.api.ServerTransport;
import io.scalecube.services.transport.api.ServiceMessageCodec;
import io.scalecube.services.transport.api.ServiceTransport;
import io.scalecube.services.transport.api.TransportResources;
import reactor.netty.resources.LoopResources;

/**
 * RSocket service transport. Entry point for getting {@link RSocketClientTransport} and {@link
 * RSocketServerTransport}.
 */
public class RSocketServiceTransport implements ServiceTransport {

  /**
   * Default Instance.
   */
  public static final RSocketServiceTransport INSTANCE = new RSocketServiceTransport();

  private final ServiceMessageCodec messageCodec;
  private final LoopResources loopResources;

  /**
   * Default instance.
   */
  public RSocketServiceTransport() {
    HeadersCodec headersCodec = HeadersCodec.getInstance("application/json");
    messageCodec = new ServiceMessageCodec(headersCodec);
    loopResources = LoopResources.create("rsocket-worker");
  }

  /**
   * Constructor with DI.
   *
   * @param headersCodec  user's headers codec
   * @param loopResources loopResources
   */
  public RSocketServiceTransport(HeadersCodec headersCodec, LoopResources loopResources) {
    this.messageCodec = new ServiceMessageCodec(headersCodec);
    this.loopResources = loopResources;
  }

  /**
   * Fabric method for client transport.
   *
   * @param resources service transport resources
   * @return client's transport
   */
  @Override
  public ClientTransport clientTransport(TransportResources resources) {
    return new RSocketClientTransport(
        messageCodec,
        ((RSocketTransportResources) resources)
            .workerPool()
            .map(DelegatedLoopResources::newClientLoopResources)
            .orElse(loopResources));
  }

  /**
   * Fabric method for server transport.
   *
   * @param resources service transport resources
   * @return server's transport
   */
  @Override
  public ServerTransport serverTransport(TransportResources resources) {
    return new RSocketServerTransport(
        messageCodec,
        ((RSocketTransportResources) resources)
            .workerPool()
            .map(DelegatedLoopResources::newServerLoopResources)
            .orElse(loopResources));
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy