package ar.com.javacuriosities.nio.server;
import java.io.IOException;
import ar.com.javacuriosities.nio.server.http.reader.HttpMessageReaderFactory;
import ar.com.javacuriosities.nio.server.message.Message;
import ar.com.javacuriosities.nio.server.message.processor.IMessageProcessor;
import ar.com.javacuriosities.nio.server.message.writer.WriteProxy;
/*
* Esta es la implementación básica de un Server implementado con NIO (Basado en https://github.com/jjenkov/java-nio-server).
* La idea solo es entender los conceptos dados que ya hay frameworks que implementan esto
* - Netty
* - Grizzly
*
*/
public class Main {
public static void main(String[] args) throws IOException {
NIOServer nioServer = new NIOServer(8080, new HttpMessageReaderFactory(), new HttpMessageProcessor());
nioServer.start();
}
private static final class HttpMessageProcessor implements IMessageProcessor {
private static final String HTTP_RESPONSE = "HTTP/1.1 200 OK\r\n" + "Content-Length: 38\r\n" + "Content-Type: text/html\r\n"
+ "\r\n" + "<html><body>Hello World!</body></html>";
@Override
public void process(Message message, WriteProxy writeProxy) {
try {
System.out.println("Message Received from socket: " + message.socketId);
byte[] httpResponseBytes = HTTP_RESPONSE.getBytes("UTF-8");
Message responseMessage = writeProxy.getMessage();
responseMessage.socketId = message.socketId;
responseMessage.writeToMessage(httpResponseBytes);
writeProxy.enqueue(responseMessage);
} catch (Exception e) {
// Log and Handle exception
e.printStackTrace();
}
}
}
}