AbstractServer.java
package eu.javaexperience.server;
import eu.javaexperience.io.IOStream;
import eu.javaexperience.io.IOStreamServer;
import eu.javaexperience.multithread.BlockingJob;
import eu.javaexperience.multithread.ScalableThreadpoolManageStrategy;
public abstract class AbstractServer<S extends IOStream> extends AbstractJobServer<S>
{
public AbstractServer(IOStreamServer<S> srv, ScalableThreadpoolManageStrategy poolStrategy)
{
super(srv, poolStrategy);
}
public AbstractServer(IOStreamServer<S> srv, int initialWorkerCount)
{
super(srv, initialWorkerCount);
}
@Override
protected BlockingJob<S> initalizeJob()
{
return new BlockingJob<S>()
{
@Override
public S acceptJob() throws Throwable
{
S ret = srv.accept();
manageLoad();
return ret;
}
@Override
public void exec(S subject) throws Throwable
{
execute(subject);
manageLoad();
}
};
}
protected abstract void execute(S subject);
}