package com.mastfrog.acteur; import com.google.inject.Inject; import com.google.inject.name.Named; import com.mastfrog.acteur.server.ServerModule; import com.mastfrog.acteur.util.RequestID; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import static io.netty.channel.ChannelFutureListener.CLOSE; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.util.CharsetUtil; import java.io.IOException; import java.util.concurrent.ExecutorService; import org.junit.Test; /** * * @author Tim Boudreau */ public class TestMultiplePages { @Test public void test() throws InterruptedException, IOException { ServerModule<A> m = new ServerModule<>(A.class, 1, 2, 64); m.start(9773); // Thread.sleep(240000); } private static class A extends Application { A() { add(RP1.class); add(RP2.class); add(P.class); } } private final static class P extends Page { P() { add(ActA.class); add(Act.class); System.out.println("Create P on " + Thread.currentThread()); } } private static final class RP1 extends Page { RP1() { add(Rej.class); } } private static final class RP2 extends Page { RP2() { add(Rej.class); } } private static final class Rej extends Acteur { Rej() { setState(new RejectedState()); } } private static final class ActA extends Acteur { ActA() { System.out.println("ActA on " + Thread.currentThread()); next(); } } private static final class Act extends Acteur { @Inject Act(HttpEvent evt, RequestID id) { setResponseBodyWriter(BlockingBodyWriter.class); setState(new RespondWith(HttpResponseStatus.OK)); System.out.println("Create Act on " + Thread.currentThread()); } } private static class BlockingBodyWriter implements ChannelFutureListener { private final RequestID id; private final ExecutorService svc; private final HttpEvent evt; @Inject BlockingBodyWriter(RequestID id, @Named(ServerModule.BACKGROUND_THREAD_POOL_NAME) ExecutorService svc, HttpEvent evt) { this.id = id; this.svc = svc; this.evt = evt; } @Override public void operationComplete(ChannelFuture future) throws Exception { future = future.channel().write(Unpooled.copiedBuffer(id + " Okay, here goes nothing", CharsetUtil.UTF_8)); System.out.println("Initial response on " + Thread.currentThread()); future.addListener(CLOSE); } } }