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

graphql.kickstart.execution.subscriptions.DefaultSubscriptionSession Maven / Gradle / Ivy

package graphql.kickstart.execution.subscriptions;

import graphql.ExecutionResult;
import graphql.execution.reactive.SingleSubscriberPublisher;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.reactivestreams.Publisher;
import org.reactivestreams.Subscription;

@Slf4j
@RequiredArgsConstructor
public class DefaultSubscriptionSession implements SubscriptionSession {

  @Getter private final GraphQLSubscriptionMapper mapper;
  private SingleSubscriberPublisher publisher = new SingleSubscriberPublisher<>();
  private SessionSubscriptions subscriptions = new SessionSubscriptions();

  @Override
  public void send(String message) {
    Objects.requireNonNull(message, "message is required");
    publisher.offer(message);
  }

  @Override
  public void sendMessage(Object payload) {
    Objects.requireNonNull(payload, "payload is required");
    send(mapper.serialize(payload));
  }

  @Override
  public void subscribe(String id, Publisher dataPublisher) {
    dataPublisher.subscribe(new SessionSubscriber(this, id));
  }

  @Override
  public void add(String id, Subscription subscription) {
    subscriptions.add(id, subscription);
  }

  @Override
  public void unsubscribe(String id) {
    subscriptions.cancel(id);
  }

  @Override
  public void sendDataMessage(String id, Object payload) {
    send(mapper.serialize(payload));
  }

  @Override
  public void sendErrorMessage(String id, Object payload) {
    send(mapper.serialize(payload));
  }

  @Override
  public void sendCompleteMessage(String id) {
    // default empty implementation
  }

  @Override
  public void close(String reason) {
    log.debug("Closing subscription session {}", getId());
    subscriptions.close();
    publisher.noMoreData();
  }

  @Override
  public Map getUserProperties() {
    return new HashMap<>();
  }

  @Override
  public boolean isOpen() {
    return true;
  }

  @Override
  public String getId() {
    return null;
  }

  @Override
  public SessionSubscriptions getSubscriptions() {
    return subscriptions;
  }

  @Override
  public Object unwrap() {
    throw new UnsupportedOperationException();
  }

  @Override
  public Publisher getPublisher() {
    return publisher;
  }

  @Override
  public String toString() {
    return getId();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy