package com.jenkov.nioserver;
import java.io.IOException;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
/**
* Project: java-nio-server
* File: Server.java
* Created: 24 Oct 2015
*
* @author jjenkov
*/
public class Server {
private SocketAcceptor socketAcceptor;
private SocketProcessor socketProcessor;
private int tcpPort;
private IMessageReaderFactory messageReaderFactory;
private IMessageProcessor messageProcessor;
public Server(int tcpPort, IMessageReaderFactory messageReaderFactory, IMessageProcessor messageProcessor) {
this.tcpPort = tcpPort;
this.messageReaderFactory = messageReaderFactory;
this.messageProcessor = messageProcessor;
}
public void start() throws IOException {
Queue socketQueue = new ArrayBlockingQueue<>(1024); // TODO: move 1024 to ServerConfig
socketAcceptor = new SocketAcceptor(tcpPort, socketQueue);
MessageBuffer readBuffer = new MessageBuffer();
MessageBuffer writeBuffer = new MessageBuffer();
socketProcessor = new SocketProcessor(socketQueue, readBuffer, writeBuffer, this.messageReaderFactory, this.messageProcessor);
Thread accepterThread = new Thread(socketAcceptor);
Thread processorThread = new Thread(socketProcessor);
accepterThread.start();
processorThread.start();
}
public SocketAcceptor getSocketAcceptor() { return socketAcceptor; }
public SocketProcessor getSocketProcessor() { return socketProcessor; }
}