@Override public Client client() { return remote.client(); }
@Override public Server server() { return remote.server(); } }
/** * Kills the client. * * @return A completable future to be completed once the client's session has been killed. */ public synchronized CompletableFuture<Void> kill() { if (state == State.CLOSED) return CompletableFuture.completedFuture(null); if (closeFuture == null) { closeFuture = session.kill() .whenComplete((result, error) -> { setState(State.CLOSED); CompletableFuture.runAsync(() -> { context.close(); transport.close(); }); }); } return closeFuture; }
public MembershipGroup(CopycatClient client, Properties options) { super(client, new ResourceType(DistributedGroup.class), options); this.options = new DistributedGroup.Options(Assert.notNull(options, "options")); this.address = this.options.getAddress(); this.server = client.transport().server(); this.connections = new GroupConnectionManager(client.transport().client(), client.context()); }
/** * Sets up a server state. */ @Override @BeforeMethod void beforeMethod() throws Throwable { super.beforeMethod(); registry = new LocalServerRegistry(); transport = new LocalTransport(registry); clientCtx = new SingleThreadContext("test-context", serializer.clone()); server = transport.server(); client = transport.client(); serverCtx.execute(() -> { server.listen(members.get(0).clientAddress(), serverContext::connectClient).whenComplete((result, error) -> { threadAssertNull(error); resume(); }); }); await(); clientCtx.execute(() -> { client.connect(members.get(0).clientAddress()).whenComplete((result, error) -> { threadAssertNull(error); this.connection = result; resume(); }); }); await(); }
/** * Kills the client. * * @return A completable future to be completed once the client's session has been killed. */ public synchronized CompletableFuture<Void> kill() { if (state == State.CLOSED) return CompletableFuture.completedFuture(null); if (closeFuture == null) { closeFuture = session.kill() .whenComplete((result, error) -> { setState(State.CLOSED); CompletableFuture.runAsync(() -> { ioContext.close(); eventContext.close(); transport.close(); }); }); } return closeFuture; }
/** * Creates a new child session. */ private ClientSession newSession() { ClientSession session = new ClientSession(clientId, transport.client(), selector, ioContext, connectionStrategy, sessionTimeout, unstabilityTimeout ); // Update the session change listener. if (changeListener != null) changeListener.close(); changeListener = session.onStateChange(this::onStateChange); // Register all event listeners. eventListeners.forEach(l -> l.register(session)); return session; }
protected CopycatServer(String name, Transport clientTransport, Transport serverTransport, ServerContext context) { this.name = Assert.notNull(name, "name"); this.clientTransport = Assert.notNull(clientTransport, "clientTransport"); this.serverTransport = Assert.notNull(serverTransport, "serverTransport"); this.internalServer = serverTransport.server(); this.clientServer = !context.getCluster().member().serverAddress().equals(context.getCluster().member().clientAddress()) ? clientTransport.server() : null; this.context = Assert.notNull(context, "context"); }
/** * Kills the client. * * @return A completable future to be completed once the client's session has been killed. */ public synchronized CompletableFuture<Void> kill() { if (state == State.CLOSED) return CompletableFuture.completedFuture(null); if (closeFuture == null) { closeFuture = session.kill() .whenComplete((result, error) -> { setState(State.CLOSED); CompletableFuture.runAsync(() -> { ioContext.close(); eventContext.close(); transport.close(); }); }); } return closeFuture; }
/** * Creates a new child session. */ private ClientSession newSession() { ClientSession session = new ClientSession(clientId, transport.client(), selector, ioContext, connectionStrategy, sessionTimeout, unstabilityTimeout ); // Update the session change listener. if (changeListener != null) changeListener.close(); changeListener = session.onStateChange(this::onStateChange); // Register all event listeners. eventListeners.forEach(l -> l.register(session)); return session; }
private CopycatServer(String name, Transport clientTransport, Transport serverTransport, ServerContext context) { this.name = Assert.notNull(name, "name"); this.clientTransport = Assert.notNull(clientTransport, "clientTransport"); this.serverTransport = Assert.notNull(serverTransport, "serverTransport"); this.internalServer = serverTransport.server(); this.clientServer = !context.getCluster().member().serverAddress().equals(context.getCluster().member().clientAddress()) ? clientTransport.server() : null; this.context = Assert.notNull(context, "context"); }
@Override public synchronized CompletableFuture<Void> close() { if (state == State.CLOSED) return CompletableFuture.completedFuture(null); if (closeFuture == null) { // Close the child session and call close listeners once complete. closeFuture = new CompletableFuture<>(); session.close().whenCompleteAsync((result, error) -> { setState(State.CLOSED); CompletableFuture.runAsync(() -> { ioContext.close(); eventContext.close(); transport.close(); if (error == null) { closeFuture.complete(null); } else { closeFuture.completeExceptionally(error); } }); }, eventContext.executor()); } return closeFuture; }
/** * Creates a new child session. */ private ClientSession newSession() { ClientSession session = new ClientSession(transport.client(), selector, new SingleThreadContext(threadFactory, context.serializer().clone()), connectionStrategy, retryStrategy); // Update the session change listener. if (changeListener != null) changeListener.close(); changeListener = session.onStateChange(this::onStateChange); // Register all event listeners. eventListeners.forEach(l -> l.register(session)); return session; }
protected CopycatServer(String name, Transport clientTransport, Transport serverTransport, ServerContext context) { this.name = Assert.notNull(name, "name"); this.clientTransport = Assert.notNull(clientTransport, "clientTransport"); this.serverTransport = Assert.notNull(serverTransport, "serverTransport"); this.internalServer = serverTransport.server(); this.clientServer = !context.getCluster().member().serverAddress().equals(context.getCluster().member().clientAddress()) ? clientTransport.server() : null; this.context = Assert.notNull(context, "context"); }