From ac1462f490ab4fb82c8af709f38c5ab02ac51097 Mon Sep 17 00:00:00 2001 From: "marcin.sciesinski" Date: Wed, 6 May 2020 03:29:43 -0700 Subject: [PATCH] Refactored out Http handling out of server itself --- ....java => GempukkuHttpPipelineFactory.java} | 38 ++++------------- ...r.java => GempukkuHttpRequestHandler.java} | 6 +-- .../gempukku/lotro/async/GempukkuServer.java | 41 +++++++++++++++++++ .../lotro/async/LotroAsyncServer.java | 4 +- .../async/handler/ChatRequestHandler.java | 8 ++-- .../async/handler/GameRequestHandler.java | 8 ++-- .../async/handler/HallRequestHandler.java | 8 ++-- .../async/handler/RootUriRequestHandler.java | 9 ++-- 8 files changed, 71 insertions(+), 51 deletions(-) rename gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/{LotroServerPipelineFactory.java => GempukkuHttpPipelineFactory.java} (50%) rename gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/{LotroHttpRequestHandler.java => GempukkuHttpRequestHandler.java} (98%) create mode 100644 gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuServer.java diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroServerPipelineFactory.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuHttpPipelineFactory.java similarity index 50% rename from gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroServerPipelineFactory.java rename to gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuHttpPipelineFactory.java index ec6267dd1..c0b99f26e 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroServerPipelineFactory.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuHttpPipelineFactory.java @@ -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 _context; - private UriRequestHandler _uriRequestHandler; - private LotroHttpRequestHandler _lotroHttpRequestHandler; +public class GempukkuHttpPipelineFactory implements ChannelPipelineFactory { + private GempukkuHttpRequestHandler requestHandler; - public LotroServerPipelineFactory() { - Map objects = new HashMap(); - final CardSets cardSets = new CardSets(); - - LoggedUserHolder loggedUserHolder = new LoggedUserHolder(); - loggedUserHolder.start(); - objects.put(LoggedUserHolder.class, loggedUserHolder); + public GempukkuHttpPipelineFactory(GempukkuServer gempukkuServer) { + Map 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; } } diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuHttpRequestHandler.java similarity index 98% rename from gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java rename to gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuHttpRequestHandler.java index d8374487f..55ba0c64f 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuHttpRequestHandler.java @@ -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 _objects; private UriRequestHandler _uriRequestHandler; private IpBanDAO _ipBanDAO; - public LotroHttpRequestHandler(Map objects, UriRequestHandler uriRequestHandler) { + public GempukkuHttpRequestHandler(Map objects, UriRequestHandler uriRequestHandler) { _objects = objects; _uriRequestHandler = uriRequestHandler; _ipBanDAO = (IpBanDAO) _objects.get(IpBanDAO.class); diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuServer.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuServer.java new file mode 100644 index 000000000..10c31a8db --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuServer.java @@ -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 context; + + public GempukkuServer() { + Map objects = new HashMap(); + 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 getContext() { + return context; + } +} diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroAsyncServer.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroAsyncServer.java index 30a7a1891..467ff8a18 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroAsyncServer.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroAsyncServer.java @@ -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); diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ChatRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ChatRequestHandler.java index 4595b82d8..7b2a7bc94 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ChatRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ChatRequestHandler.java @@ -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 context) { + public ChatRequestHandler(Map 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); diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameRequestHandler.java index 126e40a2a..72f77e732 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameRequestHandler.java @@ -37,13 +37,13 @@ import java.util.Set; public class GameRequestHandler extends LotroServerRequestHandler implements UriRequestHandler { private LotroServer _lotroServer; + private LongPollingSystem longPollingSystem; private Set _autoPassDefault = new HashSet(); - private LongPollingSystem _longPollingSystem; - public GameRequestHandler(Map context) { + public GameRequestHandler(Map 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) { diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/HallRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/HallRequestHandler.java index 6beeea2df..fd41aa30d 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/HallRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/HallRequestHandler.java @@ -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 context) { + public HallRequestHandler(Map 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) { diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java index 1fdfa7e0c..39b421e53 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java @@ -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 context) { + public RootUriRequestHandler(Map 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);