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