Refactored out Http handling out of server itself

This commit is contained in:
marcin.sciesinski
2020-05-06 03:29:43 -07:00
parent 83172e7add
commit ac1462f490
8 changed files with 71 additions and 51 deletions

View File

@@ -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;
}
}

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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);