From ab2bbc897f7d0f45d1e0948b97b4f8ea62bfb197 Mon Sep 17 00:00:00 2001 From: Obique PSWG Date: Sun, 8 Jan 2017 20:56:02 -0600 Subject: [PATCH] Added new method of listening for intents --- src/resources/control/Service.java | 12 ++ src/services/combat/CombatXpService.java | 19 +-- src/services/combat/CorpseService.java | 19 +-- src/services/galaxy/travel/TravelService.java | 37 +---- src/services/map/CityService.java | 126 +++++++++--------- src/services/map/MapManager.java | 21 +-- .../objects/ClientBuildoutService.java | 21 +-- src/services/objects/ObjectAwareness.java | 70 +++------- src/services/objects/ObjectManager.java | 27 +--- src/services/player/LoginService.java | 15 +-- src/services/player/ZoneManager.java | 15 +-- src/services/spawn/StaticService.java | 13 +- 12 files changed, 115 insertions(+), 280 deletions(-) diff --git a/src/resources/control/Service.java b/src/resources/control/Service.java index b14cec4c4..bd0ce8cd3 100644 --- a/src/resources/control/Service.java +++ b/src/resources/control/Service.java @@ -27,6 +27,8 @@ ***********************************************************************************/ package resources.control; +import java.util.function.Consumer; + import resources.config.ConfigFile; import resources.server_info.Config; import resources.server_info.DataManager; @@ -98,6 +100,16 @@ public abstract class Service implements IntentReceiver { IntentManager.getInstance().registerForIntent(type, this); } + @SuppressWarnings("unchecked") + protected final void registerForIntent(Class c, Consumer consumer) { + try { + String type = (String) c.getDeclaredField("TYPE").get(null); + IntentManager.getInstance().registerForIntent(type, (i) -> consumer.accept((T) i)); + } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) { + e.printStackTrace(); + } + } + /** * Unregisters for the specified intent string * @param type the intent string diff --git a/src/services/combat/CombatXpService.java b/src/services/combat/CombatXpService.java index 62bbd7927..5b3e0fc2f 100644 --- a/src/services/combat/CombatXpService.java +++ b/src/services/combat/CombatXpService.java @@ -35,7 +35,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; -import resources.control.Intent; import resources.control.Service; import resources.objects.SWGObject; import resources.objects.creature.CreatureDifficulty; @@ -58,29 +57,19 @@ public class CombatXpService extends Service { xpData = new HashMap<>(); groupObjects = new HashMap<>(); } - - @Override - public void onIntentReceived(Intent i) { - switch(i.getType()) { - case ObjectCreatedIntent.TYPE: handleObjectCreatedIntent((ObjectCreatedIntent) i); break; - case DestroyObjectIntent.TYPE: handleDestroyObjectIntent((DestroyObjectIntent) i); break; - case CreatureKilledIntent.TYPE: handleCreatureKilledIntent((CreatureKilledIntent) i); break; - } - } - + @Override public boolean initialize() { loadXpData(); - return super.initialize(); } @Override public boolean start() { // The objects we care about are only created/destroyed at this point anyways. - registerForIntent(ObjectCreatedIntent.TYPE); - registerForIntent(DestroyObjectIntent.TYPE); - registerForIntent(CreatureKilledIntent.TYPE); + registerForIntent(ObjectCreatedIntent.class, oci -> handleObjectCreatedIntent(oci)); + registerForIntent(DestroyObjectIntent.class, doi -> handleDestroyObjectIntent(doi)); + registerForIntent(CreatureKilledIntent.class, cki -> handleCreatureKilledIntent(cki)); return super.start(); } diff --git a/src/services/combat/CorpseService.java b/src/services/combat/CorpseService.java index 8c4eb7b79..9c8a5e202 100644 --- a/src/services/combat/CorpseService.java +++ b/src/services/combat/CorpseService.java @@ -55,7 +55,6 @@ import resources.PvpFaction; import resources.PvpStatus; import resources.Terrain; import resources.client_info.ClientFactory; -import resources.control.Intent; import resources.control.Service; import resources.encodables.ProsePackage; import resources.encodables.StringId; @@ -96,10 +95,10 @@ public final class CorpseService extends Service { cloningFacilities = new ArrayList<>(); random = new Random(); - registerForIntent(CreatureKilledIntent.TYPE); - registerForIntent(ObjectCreatedIntent.TYPE); - registerForIntent(DestroyObjectIntent.TYPE); - registerForIntent(PlayerEventIntent.TYPE); + registerForIntent(CreatureKilledIntent.class, cki -> handleCreatureKilledIntent(cki)); + registerForIntent(ObjectCreatedIntent.class, oci -> handleObjectCreatedIntent(oci)); + registerForIntent(DestroyObjectIntent.class, doi -> handleDestroyObjectIntent(doi)); + registerForIntent(PlayerEventIntent.class, pei -> handlePlayerEventIntent(pei)); loadFacilityData(); } @@ -110,16 +109,6 @@ public final class CorpseService extends Service { return super.terminate(); } - @Override - public void onIntentReceived(Intent i) { - switch (i.getType()) { - case CreatureKilledIntent.TYPE: handleCreatureKilledIntent((CreatureKilledIntent) i); break; - case ObjectCreatedIntent.TYPE: handleObjectCreatedIntent((ObjectCreatedIntent) i); break; - case DestroyObjectIntent.TYPE: handleDestroyObjectIntent((DestroyObjectIntent) i); break; - case PlayerEventIntent.TYPE: handlePlayerEventIntent((PlayerEventIntent) i); break; - } - } - private void loadFacilityData() { long startTime = System.nanoTime(); Log.i(this, "Loading cloning facility data..."); diff --git a/src/services/galaxy/travel/TravelService.java b/src/services/galaxy/travel/TravelService.java index c2fa16ffb..88ecc564b 100644 --- a/src/services/galaxy/travel/TravelService.java +++ b/src/services/galaxy/travel/TravelService.java @@ -56,7 +56,6 @@ import resources.TravelPoint; import resources.client_info.ClientFactory; import resources.client_info.visitors.DatatableData; import resources.config.ConfigFile; -import resources.control.Intent; import resources.control.Service; import resources.encodables.ProsePackage; import resources.encodables.StringId; @@ -110,11 +109,11 @@ public class TravelService extends Service { loadAllowedRoutesAndPrices(); loadTravelPoints(); - registerForIntent(TravelPointSelectionIntent.TYPE); - registerForIntent(GalacticPacketIntent.TYPE); - registerForIntent(TicketPurchaseIntent.TYPE); - registerForIntent(TicketUseIntent.TYPE); - registerForIntent(ObjectCreatedIntent.TYPE); + registerForIntent(TravelPointSelectionIntent.class, tpsi -> handlePointSelection(tpsi)); + registerForIntent(GalacticPacketIntent.class, gpi -> handleTravelPointRequest(gpi)); + registerForIntent(TicketPurchaseIntent.class, tpi -> handleTicketPurchase(tpi)); + registerForIntent(TicketUseIntent.class, tui -> handleTicketUse(tui)); + registerForIntent(ObjectCreatedIntent.class, oci -> handleObjectCreation(oci)); } @Override @@ -134,32 +133,6 @@ public class TravelService extends Service { return super.stop(); } - @Override - public void onIntentReceived(Intent i) { - switch(i.getType()) { - case TravelPointSelectionIntent.TYPE: - if (i instanceof TravelPointSelectionIntent) - handlePointSelection((TravelPointSelectionIntent) i); - break; - case GalacticPacketIntent.TYPE: - if (i instanceof GalacticPacketIntent) - handleTravelPointRequest((GalacticPacketIntent) i); - break; - case TicketPurchaseIntent.TYPE: - if (i instanceof TicketPurchaseIntent) - handleTicketPurchase((TicketPurchaseIntent) i); - break; - case TicketUseIntent.TYPE: - if (i instanceof TicketUseIntent) - handleTicketUse((TicketUseIntent) i); - break; - case ObjectCreatedIntent.TYPE: - if (i instanceof ObjectCreatedIntent) - handleObjectCreation((ObjectCreatedIntent) i); - break; - } - } - private void createGalaxyTravel(String template, long landTime) { travel.put(template, new TravelGroup(template, landTime, groundTime.get() * 1000L, airTime.get() * 1000L)); } diff --git a/src/services/map/CityService.java b/src/services/map/CityService.java index ed887aed5..72b456c69 100644 --- a/src/services/map/CityService.java +++ b/src/services/map/CityService.java @@ -27,18 +27,19 @@ ***********************************************************************************/ package services.map; -import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Locale; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import intents.PlayerEventIntent; import intents.network.GalacticPacketIntent; import intents.object.ObjectCreatedIntent; import network.packets.Packet; import network.packets.swg.zone.object_controller.DataTransform; -import resources.Location; -import resources.control.Intent; +import resources.Terrain; import resources.control.Service; import resources.objects.SWGObject; import resources.objects.creature.CreatureObject; @@ -46,33 +47,36 @@ import resources.objects.tangible.TangibleObject; import resources.player.Player; import resources.player.PlayerEvent; import resources.server_info.Log; -import resources.server_info.RelationalServerData; +import resources.server_info.RelationalDatabase; import resources.server_info.RelationalServerFactory; public class CityService extends Service { - private static final String GET_ALL_CITIES_FROM_TERRAIN = "SELECT * FROM cities WHERE terrain = ?"; - - private final RelationalServerData spawnDatabase; - private final PreparedStatement getAllCitiesStatement; + private static final String GET_ALL_CITIES = "SELECT * FROM cities"; + + private final Map> cities; public CityService() { - spawnDatabase = RelationalServerFactory.getServerData("map/cities.db", "cities"); - if (spawnDatabase == null) - throw new main.ProjectSWG.CoreException("Unable to load sdb files for StaticService"); - getAllCitiesStatement = spawnDatabase.prepareStatement(GET_ALL_CITIES_FROM_TERRAIN); + cities = new HashMap<>(); + loadCities(); - registerForIntent(GalacticPacketIntent.TYPE); - registerForIntent(PlayerEventIntent.TYPE); - registerForIntent(ObjectCreatedIntent.TYPE); + registerForIntent(GalacticPacketIntent.class, gpi -> handleGalacticPacketIntent(gpi)); + registerForIntent(PlayerEventIntent.class, pei -> handlePlayerEventIntent(pei)); + registerForIntent(ObjectCreatedIntent.class, oci -> handleObjectCreatedIntent(oci)); } - @Override - public void onIntentReceived(Intent i) { - switch(i.getType()) { - case GalacticPacketIntent.TYPE: handleGalacticPacketIntent((GalacticPacketIntent) i); break; - case PlayerEventIntent.TYPE: handlePlayerEventIntent((PlayerEventIntent) i); break; - case ObjectCreatedIntent.TYPE: handleObjectCreatedIntent((ObjectCreatedIntent) i); break; + private void loadCities() { + cities.clear(); + try (RelationalDatabase db = RelationalServerFactory.getServerData("map/cities.db", "cities")) { + try (ResultSet set = db.executeQuery(GET_ALL_CITIES)) { + Terrain t = Terrain.getTerrainFromName(set.getString("terrain")); + List list = cities.get(t); + if (list == null) + cities.put(t, list = new ArrayList<>()); + list.add(new City(set.getString("city"), set.getInt("x"), set.getInt("z"), set.getInt("radius"))); + } + } catch (SQLException e) { + Log.e(this, e); } } @@ -80,14 +84,7 @@ public class CityService extends Service { GalacticPacketIntent gpi = (GalacticPacketIntent) i; Packet p = gpi.getPacket(); if (p instanceof DataTransform) { - CreatureObject creature = gpi.getPlayer().getCreatureObject(); - if (creature == null) { - Log.e("CityService", "Creature is null in GalacticPacketIntent:DataTransform!"); - return; - } - DataTransform transform = (DataTransform) p; - Location loc = transform.getLocation(); - performLocationUpdate(creature, (int) (loc.getX() + 0.5), (int) (loc.getZ() + 0.5)); + performLocationUpdate(gpi.getPlayer().getCreatureObject()); } } @@ -95,7 +92,7 @@ public class CityService extends Service { Player player = ((PlayerEventIntent) i).getPlayer(); CreatureObject creature = player.getCreatureObject(); if (((PlayerEventIntent) i).getEvent() == PlayerEvent.PE_ZONE_IN_CLIENT) { - performLocationUpdate(creature, (int) (creature.getX() + 0.5), (int) (creature.getZ() + 0.5)); + performLocationUpdate(creature); } } @@ -106,45 +103,48 @@ public class CityService extends Service { return; } - performLocationUpdate((TangibleObject) object, (int) (object.getX() + 0.5), (int) (object.getZ() + 0.5)); + performLocationUpdate((TangibleObject) object); } - private void performLocationUpdate(TangibleObject object, int locX, int locZ) { - String terrain = object.getTerrain().getName().toLowerCase(Locale.US); - synchronized (spawnDatabase) { - ResultSet set = null; - try { - getAllCitiesStatement.setString(1, terrain); - set = getAllCitiesStatement.executeQuery(); - while (set.next()) { - int x = set.getInt("x"); - int z = set.getInt("z"); - int radius = set.getInt("radius"); - if (distance(locX, locZ, x, z) <= radius) { - object.setCurrentCity(set.getString("city")); - return; - } - } - } catch (SQLException e) { - Log.e(this, e); - } finally { - try { - if (set != null) - set.close(); - } catch (SQLException e) { - Log.e(this, e); - } + private void performLocationUpdate(TangibleObject object) { + List list = cities.get(object.getTerrain()); + if (list == null) + return; // No cities on that planet + for (City city : list) { + if (city.isWithinRange(object)) { + object.setCurrentCity(city.getName()); + return; } } object.setCurrentCity(""); } - private double distance(int x1, int z1, int x2, int z2) { - return Math.sqrt(square(x1-x2) + square(z1-z2)); - } - - private int square(int x) { - return x * x; + private static class City { + + private String name; + private int x; + private int z; + private int radius; + + public City(String name, int x, int z, int radius) { + this.name = name; + this.x = x; + this.z = z; + this.radius = radius; + } + + public String getName() { + return name; + } + + public boolean isWithinRange(SWGObject obj) { + return Math.sqrt(square((int) obj.getX()-x) + square((int) obj.getZ()-z)) <= radius; + } + + private int square(int x) { + return x * x; + } + } } diff --git a/src/services/map/MapManager.java b/src/services/map/MapManager.java index f1ffc9d66..70d426767 100644 --- a/src/services/map/MapManager.java +++ b/src/services/map/MapManager.java @@ -36,7 +36,6 @@ import network.packets.swg.zone.spatial.GetMapLocationsResponseMessage; import resources.client_info.ClientFactory; import resources.client_info.ServerFactory; import resources.client_info.visitors.DatatableData; -import resources.control.Intent; import resources.control.Manager; import resources.objects.SWGObject; import resources.player.Player; @@ -80,8 +79,8 @@ public class MapManager extends Manager { addChildService(cityService); - registerForIntent(GalacticPacketIntent.TYPE); - registerForIntent(ObjectCreatedIntent.TYPE); + registerForIntent(GalacticPacketIntent.class, gpi -> processPacket(gpi)); + registerForIntent(ObjectCreatedIntent.class, oci -> addMapLocation(oci.getObject(), MapType.STATIC)); } @Override @@ -90,22 +89,6 @@ public class MapManager extends Manager { return super.initialize(); } - @Override - public void onIntentReceived(Intent i) { - switch (i.getType()) { - case GalacticPacketIntent.TYPE: - if (i instanceof GalacticPacketIntent) - processPacket((GalacticPacketIntent) i); - break; - case ObjectCreatedIntent.TYPE: - if (i instanceof ObjectCreatedIntent) - addMapLocation(((ObjectCreatedIntent) i).getObject(), MapType.STATIC); - break; - default: - break; - } - } - private void processPacket(GalacticPacketIntent intent) { Packet p = intent.getPacket(); if (p instanceof SWGPacket) diff --git a/src/services/objects/ClientBuildoutService.java b/src/services/objects/ClientBuildoutService.java index e1327ebbe..f8388f68d 100644 --- a/src/services/objects/ClientBuildoutService.java +++ b/src/services/objects/ClientBuildoutService.java @@ -50,7 +50,6 @@ import resources.buildout.BuildoutArea; import resources.buildout.BuildoutArea.BuildoutAreaBuilder; import resources.buildout.BuildoutAreaGrid; import resources.config.ConfigFile; -import resources.control.Intent; import resources.control.Service; import resources.objects.SWGObject; import resources.objects.SWGObject.ObjectClassification; @@ -76,24 +75,8 @@ public class ClientBuildoutService extends Service { areaGrid = new BuildoutAreaGrid(); areasById = new Hashtable<>(1000); // Number of buildout areas - registerForIntent(PlayerTransformedIntent.TYPE); - registerForIntent(ObjectCreatedIntent.TYPE); - } - - @Override - public void onIntentReceived(Intent i) { - switch (i.getType()) { - case PlayerTransformedIntent.TYPE: - if (i instanceof PlayerTransformedIntent) - handlePlayerTransform((PlayerTransformedIntent) i); - break; - case ObjectCreatedIntent.TYPE: - if (i instanceof ObjectCreatedIntent) - handleObjectCreated((ObjectCreatedIntent) i); - break; - default: - break; - } + registerForIntent(PlayerTransformedIntent.class, pti -> handlePlayerTransform(pti)); + registerForIntent(ObjectCreatedIntent.class, oci -> handleObjectCreated(oci)); } public Map loadClientObjects() { diff --git a/src/services/objects/ObjectAwareness.java b/src/services/objects/ObjectAwareness.java index 01cb14a6a..dd85de398 100644 --- a/src/services/objects/ObjectAwareness.java +++ b/src/services/objects/ObjectAwareness.java @@ -29,6 +29,7 @@ package services.objects; import intents.PlayerEventIntent; import intents.RequestZoneInIntent; +import intents.network.CloseConnectionIntent; import intents.network.GalacticPacketIntent; import intents.object.ContainerTransferIntent; import intents.object.DestroyObjectIntent; @@ -53,8 +54,8 @@ import resources.Race; import resources.Terrain; import resources.config.ConfigFile; import resources.control.Assert; -import resources.control.Intent; import resources.control.Service; +import resources.network.DisconnectReason; import resources.objects.SWGObject; import resources.objects.awareness.AwarenessHandler; import resources.objects.awareness.DataTransformHandler; @@ -77,15 +78,15 @@ public class ObjectAwareness extends Service implements TerrainMapCallback { dataTransformHandler = new DataTransformHandler(); dataTransformHandler.setSpeedCheck(getConfig(ConfigFile.FEATURES).getBoolean("SPEED-HACK-CHECK", true)); - registerForIntent(PlayerEventIntent.TYPE); - registerForIntent(ObjectCreatedIntent.TYPE); - registerForIntent(DestroyObjectIntent.TYPE); - registerForIntent(ObjectTeleportIntent.TYPE); - registerForIntent(GalacticPacketIntent.TYPE); - registerForIntent(MoveObjectIntent.TYPE); - registerForIntent(ConfigChangedIntent.TYPE); - registerForIntent(ContainerTransferIntent.TYPE); - registerForIntent(RequestZoneInIntent.TYPE); + registerForIntent(PlayerEventIntent.class, pei -> handlePlayerEventIntent(pei)); + registerForIntent(ObjectCreatedIntent.class, oci -> handleObjectCreatedIntent(oci)); + registerForIntent(DestroyObjectIntent.class, doi -> handleDestroyObjectIntent(doi)); + registerForIntent(ObjectTeleportIntent.class, oti -> processObjectTeleportIntent(oti)); + registerForIntent(GalacticPacketIntent.class, gpi -> processGalacticPacketIntent(gpi)); + registerForIntent(MoveObjectIntent.class, moi -> processMoveObjectIntent(moi)); + registerForIntent(ConfigChangedIntent.class, cci -> processConfigChangedIntent(cci)); + registerForIntent(ContainerTransferIntent.class, cti -> processContainerTransferIntent(cti)); + registerForIntent(RequestZoneInIntent.class, rzii -> handleZoneIn(rzii.getCreature(), rzii.getPlayer(), rzii.isFirstZone())); } @Override @@ -94,50 +95,6 @@ public class ObjectAwareness extends Service implements TerrainMapCallback { return super.terminate(); } - @Override - public void onIntentReceived(Intent i) { - switch (i.getType()) { - case PlayerEventIntent.TYPE: - if (i instanceof PlayerEventIntent) - handlePlayerEventIntent((PlayerEventIntent) i); - break; - case ObjectCreatedIntent.TYPE: - if (i instanceof ObjectCreatedIntent) - handleObjectCreatedIntent((ObjectCreatedIntent) i); - break; - case DestroyObjectIntent.TYPE: - if (i instanceof DestroyObjectIntent) - handleDestroyObjectIntent((DestroyObjectIntent) i); - break; - case ObjectTeleportIntent.TYPE: - if (i instanceof ObjectTeleportIntent) - processObjectTeleportIntent((ObjectTeleportIntent) i); - break; - case GalacticPacketIntent.TYPE: - if (i instanceof GalacticPacketIntent) - processGalacticPacketIntent((GalacticPacketIntent) i); - break; - case MoveObjectIntent.TYPE: - if (i instanceof MoveObjectIntent) - processMoveObjectIntent((MoveObjectIntent) i); - break; - case ConfigChangedIntent.TYPE: - if (i instanceof ConfigChangedIntent) - processConfigChangedIntent((ConfigChangedIntent) i); - break; - case ContainerTransferIntent.TYPE: - if (i instanceof ContainerTransferIntent) - processContainerTransferIntent((ContainerTransferIntent) i); - break; - case RequestZoneInIntent.TYPE: - if (i instanceof RequestZoneInIntent) - handleZoneIn(((RequestZoneInIntent) i).getCreature(), ((RequestZoneInIntent) i).getPlayer(), ((RequestZoneInIntent) i).isFirstZone()); - break; - default: - break; - } - } - @Override public void onWithinRange(SWGObject obj, SWGObject inRange) { Assert.notNull(obj); @@ -271,7 +228,10 @@ public class ObjectAwareness extends Service implements TerrainMapCallback { private void handleZoneIn(CreatureObject creature, Player player, boolean firstZone) { creature.setOwner(player); // Fresh login or teleport/travel - Assert.test(player.getPlayerState() == PlayerState.LOGGED_IN || player.getPlayerState() == PlayerState.ZONED_IN); + if (player.getPlayerState() != PlayerState.LOGGED_IN && player.getPlayerState() != PlayerState.ZONED_IN) { + new CloseConnectionIntent(player.getNetworkId(), DisconnectReason.APPLICATION).broadcast(); + return; + } player.setPlayerState(PlayerState.ZONING_IN); Log.i(this, "Zoning in %s with character %s", player.getUsername(), player.getCharacterName()); if (firstZone) diff --git a/src/services/objects/ObjectManager.java b/src/services/objects/ObjectManager.java index 599cfd727..5feb30478 100644 --- a/src/services/objects/ObjectManager.java +++ b/src/services/objects/ObjectManager.java @@ -36,14 +36,12 @@ import java.util.concurrent.atomic.AtomicBoolean; import intents.object.DestroyObjectIntent; import intents.object.ObjectCreatedIntent; -import intents.object.ObjectTeleportIntent; import intents.RequestZoneInIntent; import intents.network.GalacticPacketIntent; import network.packets.Packet; import network.packets.swg.ErrorMessage; import network.packets.swg.zone.insertion.SelectCharacter; import network.packets.swg.zone.object_controller.IntendedTarget; -import resources.control.Intent; import resources.control.Manager; import resources.objects.SWGObject; import resources.objects.building.BuildingObject; @@ -95,10 +93,9 @@ public class ObjectManager extends Manager { addChildService(clientBuildoutService); addChildService(staticItemService); - registerForIntent(GalacticPacketIntent.TYPE); - registerForIntent(ObjectTeleportIntent.TYPE); - registerForIntent(ObjectCreatedIntent.TYPE); - registerForIntent(DestroyObjectIntent.TYPE); + registerForIntent(GalacticPacketIntent.class, gpi -> processGalacticPacketIntent(gpi)); + registerForIntent(ObjectCreatedIntent.class, oci -> processObjectCreatedIntent(oci)); + registerForIntent(DestroyObjectIntent.class, doi -> processDestroyObjectIntent(doi)); } @Override @@ -191,24 +188,6 @@ public class ObjectManager extends Manager { return super.terminate(); } - @Override - public void onIntentReceived(Intent i) { - switch (i.getType()) { - case GalacticPacketIntent.TYPE: - if (i instanceof GalacticPacketIntent) - processGalacticPacketIntent((GalacticPacketIntent) i); - break; - case ObjectCreatedIntent.TYPE: - if (i instanceof ObjectCreatedIntent) - processObjectCreatedIntent((ObjectCreatedIntent) i); - break; - case DestroyObjectIntent.TYPE: - if (i instanceof DestroyObjectIntent) - processDestroyObjectIntent((DestroyObjectIntent) i); - break; - } - } - private void processObjectCreatedIntent(ObjectCreatedIntent intent) { SWGObject obj = intent.getObject(); putObject(obj); diff --git a/src/services/player/LoginService.java b/src/services/player/LoginService.java index c57a1dfa3..987a46628 100644 --- a/src/services/player/LoginService.java +++ b/src/services/player/LoginService.java @@ -61,7 +61,6 @@ import resources.Race; import resources.common.BCrypt; import resources.config.ConfigFile; import resources.control.Assert; -import resources.control.Intent; import resources.control.Service; import resources.objects.SWGObject; import resources.objects.creature.CreatureObject; @@ -85,8 +84,8 @@ public class LoginService extends Service { private PreparedStatement deleteCharacter; public LoginService() { - registerForIntent(DeleteCharacterIntent.TYPE); - registerForIntent(GalacticPacketIntent.TYPE); + registerForIntent(DeleteCharacterIntent.class, dci -> deleteCharacter(dci.getCreature())); + registerForIntent(GalacticPacketIntent.class, gpi -> handlePacket(gpi, gpi.getPacket())); } @Override @@ -99,16 +98,6 @@ public class LoginService extends Service { return super.initialize(); } - @Override - public void onIntentReceived(Intent i) { - if (i instanceof DeleteCharacterIntent) { - deleteCharacter(((DeleteCharacterIntent) i).getCreature()); - } else if (i instanceof GalacticPacketIntent) { - GalacticPacketIntent gpi = (GalacticPacketIntent) i; - handlePacket(gpi, gpi.getPacket()); - } - } - public long getCharacterId(String name) { Assert.notNull(name); name = name.trim().toLowerCase(Locale.US); diff --git a/src/services/player/ZoneManager.java b/src/services/player/ZoneManager.java index c86bd965a..e9c820983 100644 --- a/src/services/player/ZoneManager.java +++ b/src/services/player/ZoneManager.java @@ -50,7 +50,6 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import resources.config.ConfigFile; -import resources.control.Intent; import resources.control.Manager; import resources.objects.creature.CreatureMood; import resources.objects.player.PlayerObject; @@ -76,8 +75,8 @@ public class ZoneManager extends Manager { addChildService(characterCreationService); - registerForIntent(PlayerEventIntent.TYPE); - registerForIntent(GalacticPacketIntent.TYPE); + registerForIntent(PlayerEventIntent.class, pei -> handlePlayerEventIntent(pei.getPlayer(), pei.getEvent())); + registerForIntent(GalacticPacketIntent.class, gpi -> handlePacket(gpi, gpi.getPlayer(), gpi.getPacket())); } @Override @@ -86,16 +85,6 @@ public class ZoneManager extends Manager { return super.initialize(); } - @Override - public void onIntentReceived(Intent i) { - if (i instanceof PlayerEventIntent) { - handlePlayerEventIntent(((PlayerEventIntent) i).getPlayer(), ((PlayerEventIntent) i).getEvent()); - } else if (i instanceof GalacticPacketIntent) { - GalacticPacketIntent gpi = (GalacticPacketIntent) i; - handlePacket(gpi, gpi.getPlayer(), gpi.getPacket()); - } - } - private void handlePlayerEventIntent(Player player, PlayerEvent event) { switch (event) { case PE_FIRST_ZONE: diff --git a/src/services/spawn/StaticService.java b/src/services/spawn/StaticService.java index eee7518bb..d412932e4 100644 --- a/src/services/spawn/StaticService.java +++ b/src/services/spawn/StaticService.java @@ -40,7 +40,6 @@ import java.util.Map; import resources.Location; import resources.control.Assert; -import resources.control.Intent; import resources.control.Service; import resources.objects.SWGObject; import resources.objects.building.BuildingObject; @@ -68,17 +67,7 @@ public class StaticService extends Service { getSupportingStatement = spawnDatabase.prepareStatement(GET_SUPPORTING_SQL); spawnableObjects = new HashMap<>(); - registerForIntent(ObjectCreatedIntent.TYPE); - } - - @Override - public void onIntentReceived(Intent i) { - switch (i.getType()) { - case ObjectCreatedIntent.TYPE: - if (i instanceof ObjectCreatedIntent) - createSupportingObjects(((ObjectCreatedIntent) i).getObject()); - break; - } + registerForIntent(ObjectCreatedIntent.class, oci -> createSupportingObjects(oci.getObject())); } private void createSupportingObjects(SWGObject object) {