Refactoring the code a bit.
This commit is contained in:
@@ -2,14 +2,18 @@ package com.gempukku.lotro.async;
|
|||||||
|
|
||||||
import com.gempukku.lotro.game.Player;
|
import com.gempukku.lotro.game.Player;
|
||||||
import org.jboss.netty.channel.MessageEvent;
|
import org.jboss.netty.channel.MessageEvent;
|
||||||
|
import org.jboss.netty.handler.codec.http.CookieEncoder;
|
||||||
import org.jboss.netty.handler.codec.http.HttpMethod;
|
import org.jboss.netty.handler.codec.http.HttpMethod;
|
||||||
import org.jboss.netty.handler.codec.http.HttpRequest;
|
import org.jboss.netty.handler.codec.http.HttpRequest;
|
||||||
import org.jboss.netty.handler.codec.http.multipart.HttpPostRequestDecoder;
|
import org.jboss.netty.handler.codec.http.multipart.HttpPostRequestDecoder;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.SET_COOKIE;
|
||||||
|
|
||||||
public class LoginRequestHandler extends LotroServerRequestHandler implements UriRequestHandler {
|
public class LoginRequestHandler extends LotroServerRequestHandler implements UriRequestHandler {
|
||||||
public LoginRequestHandler(Map<Type, Object> context) {
|
public LoginRequestHandler(Map<Type, Object> context) {
|
||||||
super(context);
|
super(context);
|
||||||
@@ -26,7 +30,7 @@ public class LoginRequestHandler extends LotroServerRequestHandler implements Ur
|
|||||||
Player player = _playerDao.loginUser(login, password);
|
Player player = _playerDao.loginUser(login, password);
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
if (player.getType().contains("u")) {
|
if (player.getType().contains("u")) {
|
||||||
responseWriter.writeResponse(null, logUserReturningCookies(e, login));
|
responseWriter.writeResponse(null, logUserReturningHeaders(e, login));
|
||||||
} else {
|
} else {
|
||||||
responseWriter.writeError(403);
|
responseWriter.writeError(403);
|
||||||
}
|
}
|
||||||
@@ -42,8 +46,13 @@ public class LoginRequestHandler extends LotroServerRequestHandler implements Ur
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, String> logUserReturningCookies(MessageEvent e, String login) throws SQLException {
|
private Map<String, String> logUserReturningHeaders(MessageEvent e, String login) throws SQLException {
|
||||||
_playerDao.updateLastLoginIp(login, e.getChannel().getRemoteAddress().toString());
|
_playerDao.updateLastLoginIp(login, e.getChannel().getRemoteAddress().toString());
|
||||||
return _loggedUserHolder.logUser(login);
|
|
||||||
|
CookieEncoder cookieEncoder = new CookieEncoder(true);
|
||||||
|
for (Map.Entry<String, String> cookie : _loggedUserHolder.logUser(login).entrySet())
|
||||||
|
cookieEncoder.addCookie(cookie.getKey(), cookie.getValue());
|
||||||
|
|
||||||
|
return Collections.singletonMap(SET_COOKIE, cookieEncoder.encode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,6 @@ public class LotroAsyncServer {
|
|||||||
|
|
||||||
bootstrap.setOption("child.tcpNoDelay", true);
|
bootstrap.setOption("child.tcpNoDelay", true);
|
||||||
bootstrap.setOption("child.keepAlive", true);
|
bootstrap.setOption("child.keepAlive", true);
|
||||||
bootstrap.bind(new InetSocketAddress(80));
|
bootstrap.bind(new InetSocketAddress(8080));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,10 @@ package com.gempukku.lotro.async;
|
|||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.jboss.netty.buffer.ChannelBuffers;
|
import org.jboss.netty.buffer.ChannelBuffers;
|
||||||
import org.jboss.netty.channel.*;
|
import org.jboss.netty.channel.*;
|
||||||
import org.jboss.netty.handler.codec.http.*;
|
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
|
||||||
import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.*;
|
import org.jboss.netty.handler.codec.http.HttpRequest;
|
||||||
import static org.jboss.netty.handler.codec.http.HttpHeaders.is100ContinueExpected;
|
import org.jboss.netty.handler.codec.http.HttpResponse;
|
||||||
import static org.jboss.netty.handler.codec.http.HttpHeaders.isKeepAlive;
|
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
|
||||||
import static org.jboss.netty.handler.codec.http.HttpResponseStatus.*;
|
|
||||||
import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1;
|
|
||||||
import org.jboss.netty.util.CharsetUtil;
|
import org.jboss.netty.util.CharsetUtil;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
@@ -20,6 +18,12 @@ import java.io.*;
|
|||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.*;
|
||||||
|
import static org.jboss.netty.handler.codec.http.HttpHeaders.is100ContinueExpected;
|
||||||
|
import static org.jboss.netty.handler.codec.http.HttpHeaders.isKeepAlive;
|
||||||
|
import static org.jboss.netty.handler.codec.http.HttpResponseStatus.*;
|
||||||
|
import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1;
|
||||||
|
|
||||||
public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
|
public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
|
||||||
private Logger _log = Logger.getLogger(LotroHttpRequestHandler.class);
|
private Logger _log = Logger.getLogger(LotroHttpRequestHandler.class);
|
||||||
|
|
||||||
@@ -50,7 +54,12 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
|
|||||||
ResponseWriter responseWriter = new ResponseWriter() {
|
ResponseWriter responseWriter = new ResponseWriter() {
|
||||||
@Override
|
@Override
|
||||||
public void writeError(int status) {
|
public void writeError(int status) {
|
||||||
writeHttpErrorResponse(request, status, e);
|
writeHttpErrorResponse(request, status, null, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeError(int status, Map<String, String> headers) {
|
||||||
|
writeHttpErrorResponse(request, status, headers, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -59,8 +68,8 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeResponse(Document document, Map<String, String> addCookies) {
|
public void writeResponse(Document document, Map<String, String> headers) {
|
||||||
writeHttpResponse(request, document, addCookies, e);
|
writeHttpResponse(request, document, headers, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -84,7 +93,7 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
|
|||||||
try {
|
try {
|
||||||
raf = new RandomAccessFile(file, "r");
|
raf = new RandomAccessFile(file, "r");
|
||||||
} catch (FileNotFoundException fnfe) {
|
} catch (FileNotFoundException fnfe) {
|
||||||
writeHttpErrorResponse(request, 404, e);
|
writeHttpErrorResponse(request, 404, null, e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
long fileLength = raf.length();
|
long fileLength = raf.length();
|
||||||
@@ -128,15 +137,20 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
|
|||||||
writeFuture.addListener(ChannelFutureListener.CLOSE);
|
writeFuture.addListener(ChannelFutureListener.CLOSE);
|
||||||
}
|
}
|
||||||
} catch (IOException exp) {
|
} catch (IOException exp) {
|
||||||
writeHttpErrorResponse(request, 500, e);
|
writeHttpErrorResponse(request, 500, null, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeHttpErrorResponse(HttpRequest request, int status, MessageEvent e) {
|
private void writeHttpErrorResponse(HttpRequest request, int status, Map<String, String> headers, MessageEvent e) {
|
||||||
boolean keepAlive = isKeepAlive(request);
|
boolean keepAlive = isKeepAlive(request);
|
||||||
|
|
||||||
HttpResponse response = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.valueOf(status));
|
HttpResponse response = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.valueOf(status));
|
||||||
|
|
||||||
|
if (headers != null) {
|
||||||
|
for (Map.Entry<String, String> header: headers.entrySet())
|
||||||
|
response.setHeader(header.getKey(), header.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
if (keepAlive) {
|
if (keepAlive) {
|
||||||
// Add 'Content-Length' header only for a keep-alive connection.
|
// Add 'Content-Length' header only for a keep-alive connection.
|
||||||
response.setHeader(CONTENT_LENGTH, response.getContent().readableBytes());
|
response.setHeader(CONTENT_LENGTH, response.getContent().readableBytes());
|
||||||
@@ -148,7 +162,7 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeHttpResponse(HttpRequest request, Document document, Map<String, String> addCookies, MessageEvent e) {
|
private void writeHttpResponse(HttpRequest request, Document document, Map<String, String> headers, MessageEvent e) {
|
||||||
// Decide whether to close the connection or not.
|
// Decide whether to close the connection or not.
|
||||||
boolean keepAlive = isKeepAlive(request);
|
boolean keepAlive = isKeepAlive(request);
|
||||||
|
|
||||||
@@ -156,11 +170,9 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
|
|||||||
// Build the response object.
|
// Build the response object.
|
||||||
HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
|
HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
|
||||||
|
|
||||||
if (addCookies != null) {
|
if (headers != null) {
|
||||||
CookieEncoder cookieEncoder = new CookieEncoder(true);
|
for (Map.Entry<String, String> header: headers.entrySet())
|
||||||
for (Map.Entry<String, String> cookie : addCookies.entrySet())
|
response.setHeader(header.getKey(), header.getValue());
|
||||||
cookieEncoder.addCookie(cookie.getKey(), cookie.getValue());
|
|
||||||
response.setHeader(SET_COOKIE, cookieEncoder.encode());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int length = 0;
|
int length = 0;
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import java.util.Map;
|
|||||||
|
|
||||||
public interface ResponseWriter {
|
public interface ResponseWriter {
|
||||||
public void writeError(int status);
|
public void writeError(int status);
|
||||||
|
public void writeError(int status, Map<String, String> headers);
|
||||||
|
|
||||||
public void writeFile(File file);
|
public void writeFile(File file);
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import org.jboss.netty.channel.MessageEvent;
|
|||||||
import org.jboss.netty.handler.codec.http.HttpRequest;
|
import org.jboss.netty.handler.codec.http.HttpRequest;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class RootUriRequestHandler implements UriRequestHandler {
|
public class RootUriRequestHandler implements UriRequestHandler {
|
||||||
@@ -26,9 +27,11 @@ public class RootUriRequestHandler implements UriRequestHandler {
|
|||||||
public void handleRequest(String uri, HttpRequest request, Map<Type, Object> context, ResponseWriter responseWriter, MessageEvent e) {
|
public void handleRequest(String uri, HttpRequest request, Map<Type, Object> context, ResponseWriter responseWriter, MessageEvent e) {
|
||||||
if (uri.startsWith(_webContextPath)) {
|
if (uri.startsWith(_webContextPath)) {
|
||||||
_webRequestHandler.handleRequest(uri.substring(_webContextPath.length()), request, context, responseWriter, e);
|
_webRequestHandler.handleRequest(uri.substring(_webContextPath.length()), request, context, responseWriter, e);
|
||||||
|
} else if (uri.equals("/gemp-lotr")) {
|
||||||
|
responseWriter.writeError(301, Collections.singletonMap("Location", "/gemp-lotr/"));
|
||||||
} else if (uri.startsWith(_serverContextPath +"hall")) {
|
} else if (uri.startsWith(_serverContextPath +"hall")) {
|
||||||
_hallRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+4), request, context, responseWriter, e);
|
_hallRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+4), request, context, responseWriter, e);
|
||||||
} else if (uri.startsWith(_serverContextPath+"deck")) {
|
} else if (uri.startsWith(_serverContextPath + "deck")) {
|
||||||
_deckRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+4), request, context, responseWriter, e);
|
_deckRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+4), request, context, responseWriter, e);
|
||||||
} else if (uri.startsWith(_serverContextPath+"login")) {
|
} else if (uri.startsWith(_serverContextPath+"login")) {
|
||||||
_loginRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+5), request, context, responseWriter, e);
|
_loginRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+5), request, context, responseWriter, e);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.gempukku.lotro.async;
|
package com.gempukku.lotro.async;
|
||||||
|
|
||||||
|
import com.gempukku.lotro.common.ApplicationConfiguration;
|
||||||
import org.jboss.netty.channel.MessageEvent;
|
import org.jboss.netty.channel.MessageEvent;
|
||||||
import org.jboss.netty.handler.codec.http.HttpRequest;
|
import org.jboss.netty.handler.codec.http.HttpRequest;
|
||||||
|
|
||||||
@@ -8,7 +9,7 @@ import java.lang.reflect.Type;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class WebRequestHandler implements UriRequestHandler {
|
public class WebRequestHandler implements UriRequestHandler {
|
||||||
private String _root = "I:\\dev\\projects\\gemp-lotr\\gemp-lotr-web\\src\\main\\webapp\\";
|
private String _root = ApplicationConfiguration.getProperty("web.folder");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleRequest(String uri, HttpRequest request, Map<Type, Object> context, ResponseWriter responseWriter, MessageEvent e) {
|
public void handleRequest(String uri, HttpRequest request, Map<Type, Object> context, ResponseWriter responseWriter, MessageEvent e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user