package ar.com.javacuriosities.nio.server; import java.io.IOException; import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; import ar.com.javacuriosities.nio.server.clients.ClientSocket; import ar.com.javacuriosities.nio.server.message.MessageBuffer; import ar.com.javacuriosities.nio.server.message.processor.IMessageProcessor; import ar.com.javacuriosities.nio.server.message.reader.IMessageReaderFactory; import ar.com.javacuriosities.nio.server.tasks.AccepterTask; import ar.com.javacuriosities.nio.server.tasks.ProcessorTask; /* * El server solo utiliza 2 threads uno para aceptar conexiones y otro para ir procesando los request */ public class NIOServer { private int port = 0; // Runnables que maneja el server private AccepterTask accepterTask = null; private ProcessorTask processorTask = null; private IMessageReaderFactory messageReaderFactory = null; private IMessageProcessor messageProcessor = null; public NIOServer(int port, IMessageReaderFactory messageReaderFactory, IMessageProcessor messageProcessor) { this.port = port; this.messageReaderFactory = messageReaderFactory; this.messageProcessor = messageProcessor; } public void start() throws IOException { MessageBuffer readBuffer = new MessageBuffer(); MessageBuffer writeBuffer = new MessageBuffer(); Queue<ClientSocket> clientSocketQueue = new ArrayBlockingQueue<ClientSocket>(1024); accepterTask = new AccepterTask(clientSocketQueue, port); processorTask = new ProcessorTask(clientSocketQueue, readBuffer, writeBuffer, messageReaderFactory, messageProcessor); Thread accepterThread = new Thread(this.accepterTask); Thread processorThread = new Thread(this.processorTask); accepterThread.start(); processorThread.start(); } }