Refactoring the code a bit.

This commit is contained in:
marcins78
2013-01-09 10:35:52 +00:00
parent 47e4ad630f
commit 977fdfed19
6 changed files with 50 additions and 24 deletions

View File

@@ -2,14 +2,18 @@ package com.gempukku.lotro.async;
import com.gempukku.lotro.game.Player;
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.HttpRequest;
import org.jboss.netty.handler.codec.http.multipart.HttpPostRequestDecoder;
import java.lang.reflect.Type;
import java.sql.SQLException;
import java.util.Collections;
import java.util.Map;
import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.SET_COOKIE;
public class LoginRequestHandler extends LotroServerRequestHandler implements UriRequestHandler {
public LoginRequestHandler(Map<Type, Object> context) {
super(context);
@@ -26,7 +30,7 @@ public class LoginRequestHandler extends LotroServerRequestHandler implements Ur
Player player = _playerDao.loginUser(login, password);
if (player != null) {
if (player.getType().contains("u")) {
responseWriter.writeResponse(null, logUserReturningCookies(e, login));
responseWriter.writeResponse(null, logUserReturningHeaders(e, login));
} else {
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());
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());
}
}

View File

@@ -21,6 +21,6 @@ public class LotroAsyncServer {
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.keepAlive", true);
bootstrap.bind(new InetSocketAddress(80));
bootstrap.bind(new InetSocketAddress(8080));
}
}

View File

@@ -3,12 +3,10 @@ package com.gempukku.lotro.async;
import org.apache.log4j.Logger;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.*;
import org.jboss.netty.handler.codec.http.*;
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;
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
import org.jboss.netty.handler.codec.http.HttpRequest;
import org.jboss.netty.handler.codec.http.HttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
import org.jboss.netty.util.CharsetUtil;
import org.w3c.dom.Document;
@@ -20,6 +18,12 @@ import java.io.*;
import java.lang.reflect.Type;
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 {
private Logger _log = Logger.getLogger(LotroHttpRequestHandler.class);
@@ -50,7 +54,12 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
ResponseWriter responseWriter = new ResponseWriter() {
@Override
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
@@ -59,8 +68,8 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
}
@Override
public void writeResponse(Document document, Map<String, String> addCookies) {
writeHttpResponse(request, document, addCookies, e);
public void writeResponse(Document document, Map<String, String> headers) {
writeHttpResponse(request, document, headers, e);
}
@Override
@@ -84,7 +93,7 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
try {
raf = new RandomAccessFile(file, "r");
} catch (FileNotFoundException fnfe) {
writeHttpErrorResponse(request, 404, e);
writeHttpErrorResponse(request, 404, null, e);
return;
}
long fileLength = raf.length();
@@ -128,15 +137,20 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
writeFuture.addListener(ChannelFutureListener.CLOSE);
}
} 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);
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) {
// Add 'Content-Length' header only for a keep-alive connection.
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.
boolean keepAlive = isKeepAlive(request);
@@ -156,11 +170,9 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
// Build the response object.
HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
if (addCookies != null) {
CookieEncoder cookieEncoder = new CookieEncoder(true);
for (Map.Entry<String, String> cookie : addCookies.entrySet())
cookieEncoder.addCookie(cookie.getKey(), cookie.getValue());
response.setHeader(SET_COOKIE, cookieEncoder.encode());
if (headers != null) {
for (Map.Entry<String, String> header: headers.entrySet())
response.setHeader(header.getKey(), header.getValue());
}
int length = 0;

View File

@@ -7,6 +7,7 @@ import java.util.Map;
public interface ResponseWriter {
public void writeError(int status);
public void writeError(int status, Map<String, String> headers);
public void writeFile(File file);

View File

@@ -4,6 +4,7 @@ import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.handler.codec.http.HttpRequest;
import java.lang.reflect.Type;
import java.util.Collections;
import java.util.Map;
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) {
if (uri.startsWith(_webContextPath)) {
_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")) {
_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);
} else if (uri.startsWith(_serverContextPath+"login")) {
_loginRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+5), request, context, responseWriter, e);

View File

@@ -1,5 +1,6 @@
package com.gempukku.lotro.async;
import com.gempukku.lotro.common.ApplicationConfiguration;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.handler.codec.http.HttpRequest;
@@ -8,7 +9,7 @@ import java.lang.reflect.Type;
import java.util.Map;
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
public void handleRequest(String uri, HttpRequest request, Map<Type, Object> context, ResponseWriter responseWriter, MessageEvent e) {