/** * Starts the server. */ private CompletableFuture<Void> listen() { if (address != null) { return server.listen(address, c -> { c.handler(GroupMessage.class, this::onMessage); }); } return CompletableFuture.completedFuture(null); }
/** * Starts listening the server. */ private CompletableFuture<Void> listen() { CompletableFuture<Void> future = new CompletableFuture<>(); context.getThreadContext().executor().execute(() -> { internalServer.listen(cluster().member().serverAddress(), context::connectServer).whenComplete((internalResult, internalError) -> { if (internalError == null) { // If the client address is different than the server address, start a separate client server. if (clientServer != null) { clientServer.listen(cluster().member().clientAddress(), context::connectClient).whenComplete((clientResult, clientError) -> { started = true; future.complete(null); }); } else { started = true; future.complete(null); } } else { future.completeExceptionally(internalError); } }); }); return future; }
/** * Starts listening the server. */ private CompletableFuture<Void> listen() { CompletableFuture<Void> future = new CompletableFuture<>(); context.getThreadContext().executor().execute(() -> { internalServer.listen(cluster().member().serverAddress(), context::connectServer).whenComplete((internalResult, internalError) -> { if (internalError == null) { // If the client address is different than the server address, start a separate client server. if (clientServer != null) { clientServer.listen(cluster().member().clientAddress(), context::connectClient).whenComplete((clientResult, clientError) -> { started = true; future.complete(null); }); } else { started = true; future.complete(null); } } else { future.completeExceptionally(internalError); } }); }); return future; }
/** * Starts listening the server. */ private CompletableFuture<Void> listen() { CompletableFuture<Void> future = new CompletableFuture<>(); context.getThreadContext().executor().execute(() -> { internalServer.listen(cluster().member().serverAddress(), c -> context.connectServer(c)).whenComplete((internalResult, internalError) -> { if (internalError == null) { // If the client address is different than the server address, start a separate client server. if (clientServer != null) { clientServer.listen(cluster().member().clientAddress(), c -> context.connectClient(c)).whenComplete((clientResult, clientError) -> { open = true; future.complete(null); }); } else { open = true; future.complete(null); } } else { future.completeExceptionally(internalError); } }); }); return future; }
server.listen(address, this::connectListener).whenComplete((result, error) -> { synchronized (this) { if (error == null) {
server.listen(new Address(new InetSocketAddress(InetAddress.getByName("localhost"), 5555)), connection -> { connection.<String, String>handler(String.class, message -> { threadAssertEquals("Hello world!", message);
server.listen(new Address(new InetSocketAddress(InetAddress.getByName("localhost"), 5555)), connection -> { connection.<String, String>handler(String.class, message -> { threadAssertEquals("Hello world!", message);
/** * 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(); }
server.listen(new Address(new InetSocketAddress(InetAddress.getByName("localhost"), 5556)), connection -> { connection.<String, String>handler(String.class, message -> { threadAssertEquals("Hello world!", message);
@SuppressWarnings("unchecked") public void testCandidateTransitionsToLeaderOnElection() throws Throwable { serverContext.onStateChange(state -> { if (state == CopycatServer.State.LEADER) resume(); }); runOnServer(() -> { for (MemberState member : serverContext.getClusterState().getRemoteMemberStates()) { Server server = transport.server(); server.listen(member.getMember().serverAddress(), c -> { c.handler(VoteRequest.class, (Function) request -> CompletableFuture.completedFuture(VoteResponse.builder() .withTerm(2) .withVoted(true) .build())); }); } }); runOnServer(() -> { int self = serverContext.getCluster().member().id(); serverContext.setTerm(1); state.startElection(); assertEquals(serverContext.getTerm(), 2L); assertEquals(serverContext.getLastVotedFor(), self); }); await(1000); }
@SuppressWarnings("unchecked") public void testCandidateTransitionsToFollowerOnRejection() throws Throwable { serverContext.onStateChange(state -> { if (state == CopycatServer.State.FOLLOWER) resume(); }); runOnServer(() -> { for (MemberState member : serverContext.getClusterState().getRemoteMemberStates()) { Server server = transport.server(); server.listen(member.getMember().serverAddress(), c -> { c.handler(VoteRequest.class, (Function) request -> CompletableFuture.completedFuture(VoteResponse.builder() .withTerm(2) .withVoted(false) .build())); }); } }); runOnServer(() -> { int self = serverContext.getCluster().member().id(); serverContext.setTerm(1); state.startElection(); assertEquals(serverContext.getTerm(), 2L); assertEquals(serverContext.getLastVotedFor(), self); }); await(1000); }