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

io.scalecube.services.examples.GreetingServiceImpl Maven / Gradle / Ivy

package io.scalecube.services.examples;

import java.time.Duration;
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 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));
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy