io.scalecube.services.examples.GreetingServiceImpl Maven / Gradle / Ivy
package io.scalecube.services.examples;
import io.scalecube.services.RequestContext;
import io.scalecube.services.api.ServiceMessage;
import java.time.Duration;
import java.util.Collections;
import java.util.List;
import java.util.stream.LongStream;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
public class GreetingServiceImpl implements GreetingService {
@Override
public Mono one(String name) {
return Mono.defer(() -> Mono.just("Echo:" + name));
}
@Override
public Flux manyStream(Long cnt) {
return Flux.defer(
() -> Flux.fromStream(LongStream.range(0, cnt).boxed()).publishOn(Schedulers.parallel()));
}
@Override
public Mono failingOne(String name) {
return Mono.defer(() -> Mono.error(new RuntimeException(name)));
}
@Override
public Flux many(String name) {
return Flux.defer(
() -> Flux.interval(Duration.ofMillis(100)).map(i -> "Greeting (" + i + ") to: " + name));
}
@Override
public Flux failingMany(String name) {
return Flux.defer(
() ->
Flux.push(
sink -> {
sink.next("Echo:" + name);
sink.next("Echo:" + name);
sink.error(new RuntimeException("Echo:" + name));
}));
}
@Override
public Mono pojoOne(GreetingRequest request) {
return Mono.defer(() -> one(request.getText()).map(GreetingResponse::new));
}
@Override
public Mono> pojoList(GreetingRequest request) {
return Mono.defer(
() -> one(request.getText()).map(GreetingResponse::new).map(Collections::singletonList));
}
@Override
public Flux pojoMany(GreetingRequest request) {
return Flux.defer(() -> many(request.getText()).map(GreetingResponse::new));
}
@Override
public Mono emptyOne(String name) {
return Mono.empty();
}
@Override
public Flux emptyMany(String name) {
return Flux.empty();
}
@Override
public Mono neverOne(String name) {
return Mono.never();
}
@Override
public Mono delayOne(String name) {
return Mono.defer(() -> Mono.delay(Duration.ofSeconds(1)).then(Mono.just(name)));
}
@Override
public Flux delayMany(String name) {
return Flux.defer(
() -> Flux.interval(Duration.ofMillis(500), Duration.ofSeconds(2)).map(i -> name));
}
@Override
public Mono emptyGreeting(EmptyGreetingRequest request) {
return Mono.just(new EmptyGreetingResponse());
}
@Override
public Mono emptyGreetingMessage(ServiceMessage request) {
ServiceMessage response =
ServiceMessage.from(request).data(new EmptyGreetingResponse()).build();
return Mono.just(response);
}
@Override
public Mono helloDynamicQualifier(Long value) {
return RequestContext.deferContextual()
.map(context -> context.pathVar("someVar") + "@" + value);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy