package io.muoncore.protocol.reactivestream.client; import io.muoncore.Muon; import io.muoncore.exception.MuonException; import lombok.AllArgsConstructor; import org.reactivestreams.Subscriber; import java.net.URI; @AllArgsConstructor public class ReactiveStreamClient { private Muon muon; public void subscribe(URI uri, Subscriber<StreamData> subscriber) { if (!uri.getScheme().equals("stream")) throw new IllegalArgumentException("URI Scheme is invalid. Requires scheme: stream://"); if (muon.getDiscovery().findService( svc -> svc.getIdentifier().equals(uri.getHost())).isPresent()) { ReactiveStreamClientProtocol proto = new ReactiveStreamClientProtocol( uri, muon.getTransportClient().openClientChannel(), subscriber, muon.getCodecs(), muon.getConfiguration(), muon.getDiscovery()); proto.start(); } else { throw new MuonException("The service " + uri.getHost() + " is not currently available"); } } }