2015-10-22 20:02:55 +02:00
|
|
|
package com.jenkov.nioserver;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.util.Queue;
|
2015-10-24 14:48:03 +02:00
|
|
|
import java.util.concurrent.ArrayBlockingQueue;
|
2015-10-22 20:02:55 +02:00
|
|
|
|
|
|
|
/**
|
2019-12-28 10:43:48 +01:00
|
|
|
* Project: <strong>java-nio-server</strong><br>
|
|
|
|
* File: <strong>Server.java</strong><br>
|
|
|
|
* Created: <strong>24 Oct 2015</strong><br>
|
|
|
|
*
|
|
|
|
* @author jjenkov
|
2015-10-22 20:02:55 +02:00
|
|
|
*/
|
2015-10-24 14:48:03 +02:00
|
|
|
public class Server {
|
2015-10-22 20:02:55 +02:00
|
|
|
|
2020-01-03 16:19:40 +01:00
|
|
|
private SocketAcceptor socketAcceptor;
|
2019-12-28 10:43:48 +01:00
|
|
|
private SocketProcessor socketProcessor;
|
2015-10-22 20:02:55 +02:00
|
|
|
|
2019-12-28 10:43:48 +01:00
|
|
|
private int tcpPort;
|
|
|
|
private IMessageReaderFactory messageReaderFactory;
|
|
|
|
private IMessageProcessor messageProcessor;
|
2015-10-22 20:02:55 +02:00
|
|
|
|
2019-12-28 10:43:48 +01:00
|
|
|
public Server(int tcpPort, IMessageReaderFactory messageReaderFactory, IMessageProcessor messageProcessor) {
|
|
|
|
this.tcpPort = tcpPort;
|
|
|
|
this.messageReaderFactory = messageReaderFactory;
|
|
|
|
this.messageProcessor = messageProcessor;
|
|
|
|
}
|
2015-10-22 20:02:55 +02:00
|
|
|
|
2019-12-28 10:43:48 +01:00
|
|
|
public void start() throws IOException {
|
2015-10-22 20:02:55 +02:00
|
|
|
|
2019-12-28 10:43:48 +01:00
|
|
|
Queue<Socket> socketQueue = new ArrayBlockingQueue<>(1024); // TODO: move 1024 to ServerConfig
|
2015-10-22 20:02:55 +02:00
|
|
|
|
2020-01-03 16:19:40 +01:00
|
|
|
socketAcceptor = new SocketAcceptor(tcpPort, socketQueue);
|
2015-10-22 20:02:55 +02:00
|
|
|
|
2019-12-28 10:43:48 +01:00
|
|
|
MessageBuffer readBuffer = new MessageBuffer();
|
|
|
|
MessageBuffer writeBuffer = new MessageBuffer();
|
2015-10-22 20:02:55 +02:00
|
|
|
|
2019-12-28 10:43:48 +01:00
|
|
|
socketProcessor = new SocketProcessor(socketQueue, readBuffer, writeBuffer, this.messageReaderFactory, this.messageProcessor);
|
2015-10-22 20:02:55 +02:00
|
|
|
|
2020-01-03 16:19:40 +01:00
|
|
|
Thread accepterThread = new Thread(socketAcceptor);
|
2019-12-28 10:43:48 +01:00
|
|
|
Thread processorThread = new Thread(socketProcessor);
|
2015-10-22 20:02:55 +02:00
|
|
|
|
2019-12-28 10:43:48 +01:00
|
|
|
accepterThread.start();
|
|
|
|
processorThread.start();
|
|
|
|
}
|
2020-01-03 16:19:40 +01:00
|
|
|
|
|
|
|
public SocketAcceptor getSocketAcceptor() { return socketAcceptor; }
|
|
|
|
|
|
|
|
public SocketProcessor getSocketProcessor() { return socketProcessor; }
|
2019-12-28 10:43:48 +01:00
|
|
|
}
|