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

io.scalecube.services.transport.DefaultServiceMessageAcceptor Maven / Gradle / Ivy

package io.scalecube.services.transport;

import io.scalecube.services.api.ServiceMessage;
import io.scalecube.services.codec.ServiceMessageDataCodec;
import io.scalecube.services.transport.api.ServiceMethodDispatcher;
import io.scalecube.services.transport.server.api.ServiceMessageAcceptor;

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

public class DefaultServiceMessageAcceptor implements ServiceMessageAcceptor {

  private final LocalServiceDispatchers localServiceDispatchers;
  private final ServiceMessageDataCodec messageDataCodec;

  public DefaultServiceMessageAcceptor(LocalServiceDispatchers localServiceDispatchers) {
    this.localServiceDispatchers = localServiceDispatchers;
    this.messageDataCodec = new ServiceMessageDataCodec();
  }

  @Override
  @SuppressWarnings("unchecked")
  public Flux requestChannel(Flux request) {
    // FIXME: need to seek handler and invoke it.
    throw new UnsupportedOperationException("requestChannel is not implemented");
  }

  @Override
  @SuppressWarnings("unchecked")
  public Flux requestStream(ServiceMessage request) {
    ServiceMethodDispatcher dispatcher = localServiceDispatchers.getDispatcher(request.qualifier());
    ServiceMessage message = messageDataCodec.decode(request, dispatcher.requestType());
    return dispatcher.requestStream(message).map(messageDataCodec::encode);
  }

  @Override
  @SuppressWarnings("unchecked")
  public Mono requestResponse(ServiceMessage request) {
    ServiceMethodDispatcher dispatcher = localServiceDispatchers.getDispatcher(request.qualifier());
    ServiceMessage message = messageDataCodec.decode(request, dispatcher.requestType());
    return dispatcher.requestResponse(message).map(messageDataCodec::encode);
  }

  @Override
  @SuppressWarnings("unchecked")
  public Mono fireAndForget(ServiceMessage request) {
    ServiceMethodDispatcher dispatcher = localServiceDispatchers.getDispatcher(request.qualifier());
    ServiceMessage message = messageDataCodec.decode(request, dispatcher.requestType());
    return dispatcher.fireAndForget(message);
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy