From d63ff1c387eaa074f1354c9ea911ce9f52ae1e74 Mon Sep 17 00:00:00 2001 From: Ryland Degnan Date: Tue, 12 Sep 2017 06:16:06 -0700 Subject: [PATCH] Fix types in RSocketFactory --- .../main/java/io/rsocket/RSocketFactory.java | 121 ++++++++---------- .../rsocket/integration/IntegrationTest.java | 2 - .../integration/TcpIntegrationTest.java | 9 +- .../java/io/rsocket/test/ClientSetupRule.java | 1 - 4 files changed, 57 insertions(+), 76 deletions(-) diff --git a/rsocket-core/src/main/java/io/rsocket/RSocketFactory.java b/rsocket-core/src/main/java/io/rsocket/RSocketFactory.java index 5ab369a59..21553f228 100644 --- a/rsocket-core/src/main/java/io/rsocket/RSocketFactory.java +++ b/rsocket-core/src/main/java/io/rsocket/RSocketFactory.java @@ -35,13 +35,13 @@ import reactor.core.publisher.Mono; /** Factory for creating RSocket clients and servers. */ -public interface RSocketFactory { +public class RSocketFactory { /** * Creates a factory that establishes client connections to other RSockets. * * @return a client factory */ - static ClientRSocketFactory connect() { + public static ClientRSocketFactory connect() { return new ClientRSocketFactory(); } @@ -50,51 +50,51 @@ static ClientRSocketFactory connect() { * * @return a server factory. */ - static ServerRSocketFactory receive() { + public static ServerRSocketFactory receive() { return new ServerRSocketFactory(); } - interface Start { + public interface Start { Mono start(); } - interface SetupPayload { + public interface SetupPayload { T setupPayload(Payload payload); } - interface Transport { - Start transport(Supplier t); + public interface Acceptor { + T acceptor(Supplier acceptor); - default Start transport(T t) { - return transport(() -> t); + default T acceptor(A acceptor) { + return acceptor(() -> acceptor); } } - interface Acceptor { - Transport acceptor(Supplier acceptor); + public interface ClientTransportAcceptor { + Start transport(Supplier transport); - default Transport acceptor(A acceptor) { - return acceptor(() -> acceptor); + default Start transport(ClientTransport transport) { + return transport(() -> transport); + } + } + + public interface ServerTransportAcceptor { + Start transport(Supplier> transport); + + default Start transport(ServerTransport transport) { + return transport(() -> transport); } } - interface Fragmentation< - R extends Acceptor, - T extends io.rsocket.transport.Transport, - A, - B extends Closeable> { - R fragment(int mtu); + public interface Fragmentation { + T fragment(int mtu); } - interface ErrorConsumer< - R extends Acceptor, - T extends io.rsocket.transport.Transport, - A, - B extends Closeable> { - R errorConsumer(Consumer errorConsumer); + public interface ErrorConsumer { + T errorConsumer(Consumer errorConsumer); } - interface KeepAlive { + public interface KeepAlive { T keepAlive(); T keepAlive(Duration tickPeriod, Duration ackTimeout, int missedAcks); @@ -106,7 +106,7 @@ interface KeepAlive { T keepAliveMissedAcks(int missedAcks); } - interface MimeType { + public interface MimeType { T mimeType(String metadataMimeType, String dataMimeType); T dataMimeType(String dataMimeType); @@ -114,19 +114,18 @@ interface MimeType { T metadataMimeType(String metadataMimeType); } - class ClientRSocketFactory - implements KeepAlive, + public static class ClientRSocketFactory + implements Acceptor>, + ClientTransportAcceptor, + KeepAlive, MimeType, - Acceptor, RSocket>, - Transport, - Fragmentation, RSocket>, - ErrorConsumer, RSocket>, + Fragmentation, + ErrorConsumer, SetupPayload { private Supplier> acceptor = () -> rSocket -> new AbstractRSocket() {}; - private Supplier transportClient; private Consumer errorConsumer = Throwable::printStackTrace; private int mtu = 0; private PluginRegistry plugins = new PluginRegistry(Plugins.defaultPlugins()); @@ -209,25 +208,14 @@ public ClientRSocketFactory metadataMimeType(String metadataMimeType) { } @Override - public Start transport(Supplier t) { - return new ClientTransport().transport(t); - } - - protected class ClientTransport - implements Transport { - @Override - public Start transport( - Supplier transportClient) { - ClientRSocketFactory.this.transportClient = transportClient; - return new StartClient(); - } + public Start transport(Supplier transportClient) { + return new StartClient(transportClient); } @Override - public Transport acceptor( - Supplier> acceptor) { + public ClientTransportAcceptor acceptor(Supplier> acceptor) { this.acceptor = acceptor; - return new ClientTransport(); + return StartClient::new; } @Override @@ -249,6 +237,12 @@ public ClientRSocketFactory setupPayload(Payload payload) { } protected class StartClient implements Start { + private final Supplier transportClient; + + StartClient(Supplier transportClient) { + this.transportClient = transportClient; + } + @Override public Mono start() { return transportClient @@ -305,13 +299,12 @@ public Mono start() { } } - class ServerRSocketFactory - implements Acceptor, - Fragmentation, - ErrorConsumer { + public static class ServerRSocketFactory + implements Acceptor, + Fragmentation, + ErrorConsumer { private Supplier acceptor; - private Supplier transportServer; private Consumer errorConsumer = Throwable::printStackTrace; private int mtu = 0; private PluginRegistry plugins = new PluginRegistry(Plugins.defaultPlugins()); @@ -334,10 +327,9 @@ public ServerRSocketFactory addServerPlugin(RSocketInterceptor interceptor) { } @Override - public Transport acceptor( - Supplier acceptor) { + public ServerTransportAcceptor acceptor(Supplier acceptor) { this.acceptor = acceptor; - return new ServerTransport(); + return ServerStart::new; } @Override @@ -352,18 +344,15 @@ public ServerRSocketFactory errorConsumer(Consumer errorConsumer) { return this; } - private class ServerTransport - implements Transport { - @Override - public Start transport(Supplier transportServer) { - ServerRSocketFactory.this.transportServer = transportServer; - return new ServerStart(); + private class ServerStart implements Start { + private final Supplier> transportServer; + + ServerStart(Supplier> transportServer) { + this.transportServer = transportServer; } - } - private class ServerStart implements Start { @Override - public Mono start() { + public Mono start() { return transportServer .get() .start( diff --git a/rsocket-examples/src/test/java/io/rsocket/integration/IntegrationTest.java b/rsocket-examples/src/test/java/io/rsocket/integration/IntegrationTest.java index 5449f6df8..78be2a3c5 100644 --- a/rsocket-examples/src/test/java/io/rsocket/integration/IntegrationTest.java +++ b/rsocket-examples/src/test/java/io/rsocket/integration/IntegrationTest.java @@ -122,8 +122,6 @@ public Flux requestStream(Payload payload) { }) .transport(serverTransport) .start() - // TODO fix the Types through RSocketFactory.Start - .cast(NettyContextCloseable.class) .block(); client = diff --git a/rsocket-examples/src/test/java/io/rsocket/integration/TcpIntegrationTest.java b/rsocket-examples/src/test/java/io/rsocket/integration/TcpIntegrationTest.java index fbc4b7ccf..300ad5ba9 100644 --- a/rsocket-examples/src/test/java/io/rsocket/integration/TcpIntegrationTest.java +++ b/rsocket-examples/src/test/java/io/rsocket/integration/TcpIntegrationTest.java @@ -20,7 +20,6 @@ import static org.junit.Assert.assertFalse; import io.rsocket.AbstractRSocket; -import io.rsocket.Closeable; import io.rsocket.Payload; import io.rsocket.RSocket; import io.rsocket.RSocketFactory; @@ -47,15 +46,11 @@ public class TcpIntegrationTest { @Before public void startup() { TcpServerTransport serverTransport = TcpServerTransport.create(0); - RSocketFactory.Start transport = + server = RSocketFactory.receive() .acceptor((setup, sendingSocket) -> Mono.just(new RSocketProxy(handler))) - .transport(serverTransport); - server = - transport + .transport(serverTransport) .start() - // TODO fix the Types through RSocketFactory.Start - .cast(NettyContextCloseable.class) .block(); } diff --git a/rsocket-test/src/main/java/io/rsocket/test/ClientSetupRule.java b/rsocket-test/src/main/java/io/rsocket/test/ClientSetupRule.java index 67419d3a7..ba7fb73fe 100644 --- a/rsocket-test/src/main/java/io/rsocket/test/ClientSetupRule.java +++ b/rsocket-test/src/main/java/io/rsocket/test/ClientSetupRule.java @@ -49,7 +49,6 @@ public ClientSetupRule( .acceptor((setup, sendingSocket) -> Mono.just(new TestRSocket())) .transport(serverTransportSupplier.apply(address)) .start() - .map(s -> (S) s) // TODO fix casting .block(); this.clientConnector =