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

io.scalecube.services.gateway.transport.GatewayClientTransports Maven / Gradle / Ivy

package io.scalecube.services.gateway.transport;

import io.netty.buffer.ByteBuf;
import io.rsocket.Payload;
import io.scalecube.services.api.ServiceMessage;
import io.scalecube.services.gateway.transport.http.HttpGatewayClient;
import io.scalecube.services.gateway.transport.http.HttpGatewayClientCodec;
import io.scalecube.services.gateway.transport.rsocket.RSocketGatewayClient;
import io.scalecube.services.gateway.transport.rsocket.RSocketGatewayClientCodec;
import io.scalecube.services.gateway.transport.websocket.WebsocketGatewayClient;
import io.scalecube.services.gateway.transport.websocket.WebsocketGatewayClientCodec;
import io.scalecube.services.transport.api.ClientTransport;
import io.scalecube.services.transport.api.DataCodec;
import io.scalecube.services.transport.api.HeadersCodec;
import io.scalecube.services.transport.api.ReferenceCountUtil;
import java.util.function.Function;
import reactor.core.publisher.Hooks;

public class GatewayClientTransports {

  private static final String CONTENT_TYPE = "application/json";
  private static final HeadersCodec HEADERS_CODEC = HeadersCodec.getInstance(CONTENT_TYPE);

  static {
    Hooks.onNextDropped(
        obj ->
            ReferenceCountUtil.safestRelease(
                obj instanceof ServiceMessage ? ((ServiceMessage) obj).data() : obj));
  }

  public static final GatewayClientCodec WEBSOCKET_CLIENT_CODEC =
      new WebsocketGatewayClientCodec(DataCodec.getInstance(CONTENT_TYPE));
  public static final GatewayClientCodec RSOCKET_CLIENT_CODEC =
      new RSocketGatewayClientCodec(HEADERS_CODEC, DataCodec.getInstance(CONTENT_TYPE));
  public static final GatewayClientCodec HTTP_CLIENT_CODEC =
      new HttpGatewayClientCodec(DataCodec.getInstance(CONTENT_TYPE));

  private GatewayClientTransports() {
    // utils
  }

  /**
   * ClientTransport that is capable of communicating with Gateway over rSocket.
   *
   * @param cs client settings for gateway client transport
   * @return client transport
   */
  public static ClientTransport rsocketGatewayClientTransport(GatewayClientSettings cs) {
    final Function function =
        settings -> new RSocketGatewayClient(settings, RSOCKET_CLIENT_CODEC);
    return new GatewayClientTransport(function.apply(cs));
  }

  /**
   * ClientTransport that is capable of communicating with Gateway over websocket.
   *
   * @param cs client settings for gateway client transport
   * @return client transport
   */
  public static ClientTransport websocketGatewayClientTransport(GatewayClientSettings cs) {
    final Function function =
        settings -> new WebsocketGatewayClient(settings, WEBSOCKET_CLIENT_CODEC);
    return new GatewayClientTransport(function.apply(cs));
  }

  /**
   * ClientTransport that is capable of communicating with Gateway over http.
   *
   * @param cs client settings for gateway client transport
   * @return client transport
   */
  public static ClientTransport httpGatewayClientTransport(GatewayClientSettings cs) {
    final Function function =
        settings -> new HttpGatewayClient(settings, HTTP_CLIENT_CODEC);
    return new GatewayClientTransport(function.apply(cs));
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy