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

io.scalecube.services.gateway.client.http.HttpGatewayClientCodec Maven / Gradle / Ivy

The newest version!
package io.scalecube.services.gateway.client.http;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.ByteBufOutputStream;
import io.scalecube.services.api.ServiceMessage;
import io.scalecube.services.exceptions.MessageCodecException;
import io.scalecube.services.gateway.ReferenceCountUtil;
import io.scalecube.services.gateway.client.GatewayClientCodec;
import io.scalecube.services.transport.api.DataCodec;

public final class HttpGatewayClientCodec implements GatewayClientCodec {

  private final DataCodec dataCodec;

  /**
   * Constructor for codec which encode/decode client message to/from {@link ByteBuf}.
   *
   * @param dataCodec data message codec.
   */
  public HttpGatewayClientCodec(DataCodec dataCodec) {
    this.dataCodec = dataCodec;
  }

  @Override
  public ByteBuf encode(ServiceMessage message) {
    ByteBuf content;

    if (message.hasData(ByteBuf.class)) {
      content = message.data();
    } else {
      content = ByteBufAllocator.DEFAULT.buffer();
      try {
        dataCodec.encode(new ByteBufOutputStream(content), message.data());
      } catch (Throwable t) {
        ReferenceCountUtil.safestRelease(content);
        throw new MessageCodecException(
            "Failed to encode data on message q=" + message.qualifier(), t);
      }
    }

    return content;
  }

  @Override
  public ServiceMessage decode(ByteBuf encodedMessage) {
    return ServiceMessage.builder().data(encodedMessage).build();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy