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

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

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

View File

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

View File

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

View File

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

View File

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