package io.muoncore.protocol.reactivestream.server; import io.muoncore.Discovery; import io.muoncore.channel.ChannelConnection; import io.muoncore.codec.Codecs; import io.muoncore.config.AutoConfiguration; import io.muoncore.descriptors.OperationDescriptor; import io.muoncore.descriptors.ProtocolDescriptor; import io.muoncore.descriptors.SchemaDescriptor; import io.muoncore.protocol.ServerProtocolStack; import io.muoncore.message.MuonInboundMessage; import io.muoncore.message.MuonOutboundMessage; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class ReactiveStreamServerStack implements ServerProtocolStack { public static String REACTIVE_STREAM_PROTOCOL = "reactive-stream"; private PublisherLookup publisherLookup; private Codecs codecs; private AutoConfiguration configuration; private Discovery discovery; public ReactiveStreamServerStack( PublisherLookup publisherLookup, Codecs codecs, AutoConfiguration configuration, Discovery discovery) { this.publisherLookup = publisherLookup; this.codecs = codecs; this.configuration = configuration; this.discovery = discovery; } @Override public ChannelConnection<MuonInboundMessage, MuonOutboundMessage> createChannel() { return new ReactiveStreamServerChannel(publisherLookup, codecs, configuration, discovery); } @Override public ProtocolDescriptor getProtocolDescriptor() { List<OperationDescriptor> ops = publisherLookup.getPublishers().stream().map( pub -> new OperationDescriptor(pub.getName(), "[" + pub.getPublisherType() + "]") ).collect(Collectors.toList()); return new ProtocolDescriptor(REACTIVE_STREAM_PROTOCOL, "Reactive Streaming", "Provides the semantics of the Reactive Stream API over a muon event protocol", ops); } @Override public Map<String, SchemaDescriptor> getSchemasFor(String endpoint) { return null; } }