
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