Refactored out Http handling out of server itself
This commit is contained in:
@@ -1,13 +1,6 @@
|
||||
package com.gempukku.lotro.async;
|
||||
|
||||
import com.gempukku.lotro.async.handler.RootUriRequestHandler;
|
||||
import com.gempukku.lotro.async.handler.UriRequestHandler;
|
||||
import com.gempukku.lotro.builder.DaoBuilder;
|
||||
import com.gempukku.lotro.builder.PacksStorageBuilder;
|
||||
import com.gempukku.lotro.builder.ServerBuilder;
|
||||
import com.gempukku.lotro.game.CardSets;
|
||||
import com.gempukku.lotro.packs.PacksStorage;
|
||||
import com.gempukku.lotro.service.LoggedUserHolder;
|
||||
import com.gempukku.polling.LongPollingSystem;
|
||||
import org.jboss.netty.channel.ChannelPipeline;
|
||||
import org.jboss.netty.channel.ChannelPipelineFactory;
|
||||
@@ -17,37 +10,20 @@ import org.jboss.netty.handler.codec.http.HttpRequestDecoder;
|
||||
import org.jboss.netty.handler.codec.http.HttpResponseEncoder;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class LotroServerPipelineFactory implements ChannelPipelineFactory {
|
||||
private Map<Type, Object> _context;
|
||||
private UriRequestHandler _uriRequestHandler;
|
||||
private LotroHttpRequestHandler _lotroHttpRequestHandler;
|
||||
public class GempukkuHttpPipelineFactory implements ChannelPipelineFactory {
|
||||
private GempukkuHttpRequestHandler requestHandler;
|
||||
|
||||
public LotroServerPipelineFactory() {
|
||||
Map<Type, Object> objects = new HashMap<Type, Object>();
|
||||
final CardSets cardSets = new CardSets();
|
||||
|
||||
LoggedUserHolder loggedUserHolder = new LoggedUserHolder();
|
||||
loggedUserHolder.start();
|
||||
objects.put(LoggedUserHolder.class, loggedUserHolder);
|
||||
public GempukkuHttpPipelineFactory(GempukkuServer gempukkuServer) {
|
||||
Map<Type, Object> context = gempukkuServer.getContext();
|
||||
|
||||
LongPollingSystem longPollingSystem = new LongPollingSystem();
|
||||
longPollingSystem.start();
|
||||
objects.put(LongPollingSystem.class, longPollingSystem);
|
||||
|
||||
objects.put(CardSets.class, cardSets);
|
||||
objects.put(PacksStorage.class, PacksStorageBuilder.createPacksStorage(cardSets));
|
||||
DaoBuilder.fillObjectMap(objects);
|
||||
ServerBuilder.fillObjectMap(objects);
|
||||
ServerBuilder.constructObjects(objects);
|
||||
RootUriRequestHandler uriRequestHandler = new RootUriRequestHandler(context, longPollingSystem);
|
||||
|
||||
|
||||
_context = objects;
|
||||
_uriRequestHandler = new RootUriRequestHandler(_context);
|
||||
|
||||
_lotroHttpRequestHandler = new LotroHttpRequestHandler(_context, _uriRequestHandler);
|
||||
requestHandler = new GempukkuHttpRequestHandler(context, uriRequestHandler);
|
||||
}
|
||||
|
||||
public ChannelPipeline getPipeline() throws Exception {
|
||||
@@ -66,7 +42,7 @@ public class LotroServerPipelineFactory implements ChannelPipelineFactory {
|
||||
// Remove the following line if you don't want automatic content compression.
|
||||
pipeline.addLast("deflater", new HttpContentCompressor());
|
||||
|
||||
pipeline.addLast("handler", _lotroHttpRequestHandler);
|
||||
pipeline.addLast("handler", requestHandler);
|
||||
return pipeline;
|
||||
}
|
||||
}
|
||||
@@ -32,16 +32,16 @@ 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 GempukkuHttpRequestHandler extends SimpleChannelUpstreamHandler {
|
||||
private final static long SIX_MONTHS = 1000L * 60L * 60L * 24L * 30L * 6L;
|
||||
private static Logger _log = Logger.getLogger(LotroHttpRequestHandler.class);
|
||||
private static Logger _log = Logger.getLogger(GempukkuHttpRequestHandler.class);
|
||||
private static Logger _accesslog = Logger.getLogger("access");
|
||||
|
||||
private Map<Type, Object> _objects;
|
||||
private UriRequestHandler _uriRequestHandler;
|
||||
private IpBanDAO _ipBanDAO;
|
||||
|
||||
public LotroHttpRequestHandler(Map<Type, Object> objects, UriRequestHandler uriRequestHandler) {
|
||||
public GempukkuHttpRequestHandler(Map<Type, Object> objects, UriRequestHandler uriRequestHandler) {
|
||||
_objects = objects;
|
||||
_uriRequestHandler = uriRequestHandler;
|
||||
_ipBanDAO = (IpBanDAO) _objects.get(IpBanDAO.class);
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.gempukku.lotro.async;
|
||||
|
||||
import com.gempukku.lotro.async.handler.RootUriRequestHandler;
|
||||
import com.gempukku.lotro.async.handler.UriRequestHandler;
|
||||
import com.gempukku.lotro.builder.DaoBuilder;
|
||||
import com.gempukku.lotro.builder.PacksStorageBuilder;
|
||||
import com.gempukku.lotro.builder.ServerBuilder;
|
||||
import com.gempukku.lotro.game.CardSets;
|
||||
import com.gempukku.lotro.packs.PacksStorage;
|
||||
import com.gempukku.lotro.service.LoggedUserHolder;
|
||||
import com.gempukku.polling.LongPollingSystem;
|
||||
import org.jboss.netty.channel.ChannelHandler;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class GempukkuServer {
|
||||
private Map<Type, Object> context;
|
||||
|
||||
public GempukkuServer() {
|
||||
Map<Type, Object> objects = new HashMap<Type, Object>();
|
||||
final CardSets cardSets = new CardSets();
|
||||
|
||||
LoggedUserHolder loggedUserHolder = new LoggedUserHolder();
|
||||
loggedUserHolder.start();
|
||||
objects.put(LoggedUserHolder.class, loggedUserHolder);
|
||||
|
||||
objects.put(CardSets.class, cardSets);
|
||||
objects.put(PacksStorage.class, PacksStorageBuilder.createPacksStorage(cardSets));
|
||||
DaoBuilder.fillObjectMap(objects);
|
||||
ServerBuilder.fillObjectMap(objects);
|
||||
ServerBuilder.constructObjects(objects);
|
||||
|
||||
context = objects;
|
||||
}
|
||||
|
||||
public Map<Type, Object> getContext() {
|
||||
return context;
|
||||
}
|
||||
}
|
||||
@@ -24,7 +24,9 @@ public class LotroAsyncServer {
|
||||
|
||||
ServerBootstrap bootstrap = new ServerBootstrap(factory);
|
||||
|
||||
bootstrap.setPipelineFactory(new LotroServerPipelineFactory());
|
||||
GempukkuServer gempukkuServer = new GempukkuServer();
|
||||
|
||||
bootstrap.setPipelineFactory(new GempukkuHttpPipelineFactory(gempukkuServer));
|
||||
|
||||
bootstrap.setOption("child.tcpNoDelay", true);
|
||||
bootstrap.setOption("child.keepAlive", true);
|
||||
|
||||
@@ -29,12 +29,12 @@ import java.util.*;
|
||||
|
||||
public class ChatRequestHandler extends LotroServerRequestHandler implements UriRequestHandler {
|
||||
private ChatServer _chatServer;
|
||||
private LongPollingSystem _longPollingSystem;
|
||||
private LongPollingSystem longPollingSystem;
|
||||
|
||||
public ChatRequestHandler(Map<Type, Object> context) {
|
||||
public ChatRequestHandler(Map<Type, Object> context, LongPollingSystem longPollingSystem) {
|
||||
super(context);
|
||||
_chatServer = extractObject(context, ChatServer.class);
|
||||
_longPollingSystem = extractObject(context, LongPollingSystem.class);
|
||||
this.longPollingSystem = longPollingSystem;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -67,7 +67,7 @@ public class ChatRequestHandler extends LotroServerRequestHandler implements Uri
|
||||
} else {
|
||||
ChatCommunicationChannel pollableResource = chatRoom.getChatRoomListener(resourceOwner.getName());
|
||||
ChatUpdateLongPollingResource polledResource = new ChatUpdateLongPollingResource(chatRoom, room, resourceOwner.getName(), admin, responseWriter);
|
||||
_longPollingSystem.processLongPollingResource(polledResource, pollableResource);
|
||||
longPollingSystem.processLongPollingResource(polledResource, pollableResource);
|
||||
}
|
||||
} catch (SubscriptionExpiredException exp) {
|
||||
throw new HttpProcessingException(410);
|
||||
|
||||
@@ -37,13 +37,13 @@ import java.util.Set;
|
||||
|
||||
public class GameRequestHandler extends LotroServerRequestHandler implements UriRequestHandler {
|
||||
private LotroServer _lotroServer;
|
||||
private LongPollingSystem longPollingSystem;
|
||||
private Set<Phase> _autoPassDefault = new HashSet<Phase>();
|
||||
private LongPollingSystem _longPollingSystem;
|
||||
|
||||
public GameRequestHandler(Map<Type, Object> context) {
|
||||
public GameRequestHandler(Map<Type, Object> context, LongPollingSystem longPollingSystem) {
|
||||
super(context);
|
||||
_lotroServer = extractObject(context, LotroServer.class);
|
||||
_longPollingSystem = extractObject(context, LongPollingSystem.class);
|
||||
this.longPollingSystem = longPollingSystem;
|
||||
|
||||
_autoPassDefault.add(Phase.FELLOWSHIP);
|
||||
_autoPassDefault.add(Phase.MANEUVER);
|
||||
@@ -93,7 +93,7 @@ public class GameRequestHandler extends LotroServerRequestHandler implements Uri
|
||||
|
||||
GameCommunicationChannel pollableResource = gameMediator.getCommunicationChannel(resourceOwner, channelNumber);
|
||||
GameUpdateLongPollingResource pollingResource = new GameUpdateLongPollingResource(pollableResource, channelNumber, gameMediator, resourceOwner, responseWriter);
|
||||
_longPollingSystem.processLongPollingResource(pollingResource, pollableResource);
|
||||
longPollingSystem.processLongPollingResource(pollingResource, pollableResource);
|
||||
} catch (SubscriptionConflictException exp) {
|
||||
throw new HttpProcessingException(409);
|
||||
} catch (PrivateInformationException e) {
|
||||
|
||||
@@ -41,18 +41,18 @@ public class HallRequestHandler extends LotroServerRequestHandler implements Uri
|
||||
private HallServer _hallServer;
|
||||
private LeagueService _leagueService;
|
||||
private LotroCardBlueprintLibrary _library;
|
||||
private LongPollingSystem _longPollingSystem;
|
||||
private LotroServer _lotroServer;
|
||||
private LongPollingSystem longPollingSystem;
|
||||
|
||||
public HallRequestHandler(Map<Type, Object> context) {
|
||||
public HallRequestHandler(Map<Type, Object> context, LongPollingSystem longPollingSystem) {
|
||||
super(context);
|
||||
_collectionManager = extractObject(context, CollectionsManager.class);
|
||||
_formatLibrary = extractObject(context, LotroFormatLibrary.class);
|
||||
_hallServer = extractObject(context, HallServer.class);
|
||||
_leagueService = extractObject(context, LeagueService.class);
|
||||
_library = extractObject(context, LotroCardBlueprintLibrary.class);
|
||||
_longPollingSystem = extractObject(context, LongPollingSystem.class);
|
||||
_lotroServer = extractObject(context, LotroServer.class);
|
||||
this.longPollingSystem = longPollingSystem;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -304,7 +304,7 @@ public class HallRequestHandler extends LotroServerRequestHandler implements Uri
|
||||
try {
|
||||
HallCommunicationChannel pollableResource = _hallServer.getCommunicationChannel(resourceOwner, channelNumber);
|
||||
HallUpdateLongPollingResource polledResource = new HallUpdateLongPollingResource(pollableResource, request, resourceOwner, responseWriter);
|
||||
_longPollingSystem.processLongPollingResource(polledResource, pollableResource);
|
||||
longPollingSystem.processLongPollingResource(polledResource, pollableResource);
|
||||
} catch (SubscriptionExpiredException exp) {
|
||||
responseWriter.writeError(410);
|
||||
} catch (SubscriptionConflictException exp) {
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.gempukku.lotro.async.handler;
|
||||
import com.gempukku.lotro.async.HttpProcessingException;
|
||||
import com.gempukku.lotro.async.ResponseWriter;
|
||||
import com.gempukku.lotro.common.ApplicationConfiguration;
|
||||
import com.gempukku.polling.LongPollingSystem;
|
||||
import org.jboss.netty.channel.MessageEvent;
|
||||
import org.jboss.netty.handler.codec.http.HttpMethod;
|
||||
import org.jboss.netty.handler.codec.http.HttpRequest;
|
||||
@@ -38,19 +39,19 @@ public class RootUriRequestHandler implements UriRequestHandler {
|
||||
|
||||
private Pattern originPattern;
|
||||
|
||||
public RootUriRequestHandler(Map<Type, Object> context) {
|
||||
public RootUriRequestHandler(Map<Type, Object> context, LongPollingSystem longPollingSystem) {
|
||||
_webRequestHandler = new WebRequestHandler(ApplicationConfiguration.getProperty("web.path"));
|
||||
String originAllowedPattern = ApplicationConfiguration.getProperty("origin.allowed.pattern");
|
||||
originPattern = Pattern.compile(originAllowedPattern);
|
||||
_hallRequestHandler = new HallRequestHandler(context);
|
||||
_hallRequestHandler = new HallRequestHandler(context, longPollingSystem);
|
||||
_deckRequestHandler = new DeckRequestHandler(context);
|
||||
_loginRequestHandler = new LoginRequestHandler(context);
|
||||
_statusRequestHandler = new StatusRequestHandler(context);
|
||||
_adminRequestHandler = new AdminRequestHandler(context);
|
||||
_chatRequestHandler = new ChatRequestHandler(context);
|
||||
_chatRequestHandler = new ChatRequestHandler(context, longPollingSystem);
|
||||
_collectionRequestHandler = new CollectionRequestHandler(context);
|
||||
_deliveryRequestHandler = new DeliveryRequestHandler(context);
|
||||
_gameRequestHandler = new GameRequestHandler(context);
|
||||
_gameRequestHandler = new GameRequestHandler(context, longPollingSystem);
|
||||
_leagueRequestHandler = new LeagueRequestHandler(context);
|
||||
_merchantRequestHandler = new MerchantRequestHandler(context);
|
||||
_registerRequestHandler = new RegisterRequestHandler(context);
|
||||
|
||||
Reference in New Issue
Block a user