diff --git a/src/resources/control/Service.java b/src/resources/control/Service.java index c662fe42d..a7bffc096 100644 --- a/src/resources/control/Service.java +++ b/src/resources/control/Service.java @@ -43,13 +43,16 @@ public abstract class Service implements IntentReceiver { private static final OutboundPacketService outboundPacketService = new OutboundPacketService(); + public Service() { + IntentManager.getInstance().initialize(); + } + /** * Initializes this service. If the service returns false on this method * then the initialization failed and may not work as intended. * @return TRUE if initialization was successful, FALSE otherwise */ public boolean initialize() { - IntentManager.getInstance().initialize(); return DataManager.getInstance().isInitialized(); } diff --git a/src/services/CoreManager.java b/src/services/CoreManager.java index d96797291..90f4dc272 100644 --- a/src/services/CoreManager.java +++ b/src/services/CoreManager.java @@ -87,6 +87,9 @@ public class CoreManager extends Manager { addChildService(engineManager); addChildService(galacticManager); } + registerForIntent(InboundPacketIntent.TYPE); + registerForIntent(OutboundPacketIntent.TYPE); + registerForIntent(ServerManagementIntent.TYPE); } /** @@ -104,9 +107,6 @@ public class CoreManager extends Manager { @Override public boolean initialize() { startTime = System.nanoTime(); - registerForIntent(InboundPacketIntent.TYPE); - registerForIntent(OutboundPacketIntent.TYPE); - registerForIntent(ServerManagementIntent.TYPE); packetDebug = getConfig(ConfigFile.PRIMARY).getBoolean("PACKET-DEBUG", false); initializePacketOutput(); return galaxy != null && super.initialize(); diff --git a/src/services/ShutdownService.java b/src/services/ShutdownService.java index 8d6cf0f7a..6e9df09ba 100644 --- a/src/services/ShutdownService.java +++ b/src/services/ShutdownService.java @@ -59,12 +59,8 @@ public class ShutdownService extends Service { runCount = new AtomicInteger(); timeRemaining = new AtomicLong(); shutdownExecutor = null; - } - - @Override - public boolean initialize() { + registerForIntent(ServerStatusIntent.TYPE); - return super.initialize(); } @Override diff --git a/src/services/chat/ChatMailService.java b/src/services/chat/ChatMailService.java index 779e6a0db..6c6fd8c9a 100644 --- a/src/services/chat/ChatMailService.java +++ b/src/services/chat/ChatMailService.java @@ -42,13 +42,14 @@ public class ChatMailService extends Service { mails = new CachedObjectDatabase<>("odb/mails.db"); chatLogs = RelationalServerFactory.getServerDatabase("chat/chat_log.db"); maxMailId = 1; + + registerForIntent(GalacticPacketIntent.TYPE); + registerForIntent(PersistentMessageIntent.TYPE); + registerForIntent(PlayerEventIntent.TYPE); } @Override public boolean initialize() { - registerForIntent(GalacticPacketIntent.TYPE); - registerForIntent(PersistentMessageIntent.TYPE); - registerForIntent(PlayerEventIntent.TYPE); mails.load(); mails.traverse(mail -> { if (mail.getId() >= maxMailId) diff --git a/src/services/chat/ChatManager.java b/src/services/chat/ChatManager.java index 0bea76210..6b33e3d7b 100644 --- a/src/services/chat/ChatManager.java +++ b/src/services/chat/ChatManager.java @@ -74,10 +74,7 @@ public class ChatManager extends Manager { addChildService(roomService); addChildService(mailService); - } - - @Override - public boolean initialize() { + registerForIntent(GalacticPacketIntent.TYPE); registerForIntent(SpatialChatIntent.TYPE); registerForIntent(PersistentMessageIntent.TYPE); @@ -86,7 +83,6 @@ public class ChatManager extends Manager { registerForIntent(ServerStatusIntent.TYPE); registerForIntent(ChatAvatarRequestIntent.TYPE); registerForIntent(ZonePlayerSwapIntent.TYPE); - return super.initialize(); } public void onIntentReceived(Intent i) { diff --git a/src/services/chat/ChatRoomService.java b/src/services/chat/ChatRoomService.java index baa667786..cfc75c395 100644 --- a/src/services/chat/ChatRoomService.java +++ b/src/services/chat/ChatRoomService.java @@ -108,14 +108,14 @@ public class ChatRoomService extends Service { messages = new ConcurrentHashMap<>(); chatLogs = RelationalServerFactory.getServerDatabase("chat/chat_log.db"); maxChatRoomId = 1; + + registerForIntent(ChatRoomUpdateIntent.TYPE); + registerForIntent(GalacticPacketIntent.TYPE); + registerForIntent(PlayerEventIntent.TYPE); } @Override public boolean initialize() { - registerForIntent(ChatRoomUpdateIntent.TYPE); - registerForIntent(GalacticPacketIntent.TYPE); - registerForIntent(PlayerEventIntent.TYPE); - database.load(); database.traverse((room) -> { if (room.getId() >= maxChatRoomId) diff --git a/src/services/commands/CommandService.java b/src/services/commands/CommandService.java index b19694e85..9db5f0bc7 100644 --- a/src/services/commands/CommandService.java +++ b/src/services/commands/CommandService.java @@ -68,11 +68,12 @@ public class CommandService extends Service { commands = new HashMap<>(); commandCrcLookup = new HashMap<>(); commandByScript = new HashMap<>(); + + registerForIntent(GalacticPacketIntent.TYPE); } @Override public boolean initialize() { - registerForIntent(GalacticPacketIntent.TYPE); loadBaseCommands(); registerCallbacks(); return super.initialize(); diff --git a/src/services/faction/FactionService.java b/src/services/faction/FactionService.java index c581572ba..d47b28496 100644 --- a/src/services/faction/FactionService.java +++ b/src/services/faction/FactionService.java @@ -24,12 +24,11 @@ public final class FactionService extends Service { private ScheduledExecutorService executor; public FactionService() { - + registerForIntent(FactionIntent.TYPE); } @Override public boolean initialize() { - registerForIntent(FactionIntent.TYPE); executor = Executors.newSingleThreadScheduledExecutor(); return super.initialize(); } diff --git a/src/services/galaxy/ConnectionService.java b/src/services/galaxy/ConnectionService.java index 4e47756a7..41f3028ca 100644 --- a/src/services/galaxy/ConnectionService.java +++ b/src/services/galaxy/ConnectionService.java @@ -107,15 +107,15 @@ public class ConnectionService extends Service { } } }; - } - - @Override - public boolean initialize() { + registerForIntent(PlayerEventIntent.TYPE); registerForIntent(GalacticPacketIntent.TYPE); registerForIntent(ForceDisconnectIntent.TYPE); registerForIntent(ZonePlayerSwapIntent.TYPE); - + } + + @Override + public boolean initialize() { incrementPopulation = getLocalDatabase().prepareStatement(INCREMENT_POPULATION_SQL); decrementPopulation = getLocalDatabase().prepareStatement(DECREMENT_POPULATION_SQL); return super.initialize(); diff --git a/src/services/galaxy/EnvironmentService.java b/src/services/galaxy/EnvironmentService.java index a53c771c9..c37fd3ebd 100644 --- a/src/services/galaxy/EnvironmentService.java +++ b/src/services/galaxy/EnvironmentService.java @@ -34,6 +34,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import main.ProjectSWG; import network.packets.swg.SWGPacket; import network.packets.swg.zone.ServerTimeMessage; import network.packets.swg.zone.ServerWeatherMessage; @@ -63,6 +64,7 @@ public final class EnvironmentService extends Service { weatherForTerrain = new HashMap<>(); weatherTypes = WeatherType.values(); random = new Random(); + registerForIntent(PlayerEventIntent.TYPE); } @Override @@ -72,9 +74,7 @@ public final class EnvironmentService extends Service { weatherForTerrain.put(t, randomWeather()); executor.scheduleAtFixedRate(new WeatherChanger(t), 0, cycleDuration, TimeUnit.SECONDS); } - executor.scheduleAtFixedRate(() -> { updateTime(); }, 0, 5, TimeUnit.SECONDS); - - registerForIntent(PlayerEventIntent.TYPE); + executor.scheduleAtFixedRate(() -> { updateTime(); }, 0, 30, TimeUnit.SECONDS); return super.initialize(); } @@ -103,8 +103,8 @@ public final class EnvironmentService extends Service { } private void updateTime() { - ServerTimeMessage stm = new ServerTimeMessage((long) (System.currentTimeMillis() / 1E3)); - new NotifyPlayersPacketIntent(stm, null, (player) -> { return true; /* ALL THE ABOVE! */}, null).broadcast(); + ServerTimeMessage stm = new ServerTimeMessage(ProjectSWG.getGalacticTime()); + new NotifyPlayersPacketIntent(stm).broadcast(); } private void setWeather(Terrain terrain, WeatherType type) { diff --git a/src/services/galaxy/GalacticManager.java b/src/services/galaxy/GalacticManager.java index 8adaba00e..1826a8c31 100644 --- a/src/services/galaxy/GalacticManager.java +++ b/src/services/galaxy/GalacticManager.java @@ -70,11 +70,12 @@ public class GalacticManager extends Manager { addChildService(gameManager); addChildService(chatManager); addChildService(travelService); + + registerForIntent(InboundPacketIntent.TYPE); } @Override public boolean initialize() { - registerForIntent(InboundPacketIntent.TYPE); resetPopulationCount(); return super.initialize(); } diff --git a/src/services/galaxy/TravelService.java b/src/services/galaxy/TravelService.java index 75261c7ef..3826bd29c 100644 --- a/src/services/galaxy/TravelService.java +++ b/src/services/galaxy/TravelService.java @@ -41,7 +41,6 @@ import network.packets.Packet; import network.packets.swg.zone.EnterTicketPurchaseModeMessage; import network.packets.swg.zone.PlanetTravelPointListRequest; import network.packets.swg.zone.PlanetTravelPointListResponse; -import network.packets.swg.zone.object_controller.PostureUpdate; import intents.chat.ChatBroadcastIntent; import intents.network.GalacticPacketIntent; import intents.object.ObjectCreatedIntent; diff --git a/src/services/galaxy/terminals/TerminalService.java b/src/services/galaxy/terminals/TerminalService.java index 45a14110c..f630f5fe2 100644 --- a/src/services/galaxy/terminals/TerminalService.java +++ b/src/services/galaxy/terminals/TerminalService.java @@ -38,12 +38,13 @@ public class TerminalService extends Service { getAllTemplatesStatement = iffDatabase.prepareStatement(GET_ALL_TEMPLATES_SQL); getScriptForIffStatement = iffDatabase.prepareStatement(GET_SCRIPT_FOR_IFF_SQL); + + registerForIntent(RadialRequestIntent.TYPE); + registerForIntent(RadialSelectionIntent.TYPE); } @Override public boolean initialize() { - registerForIntent(RadialRequestIntent.TYPE); - registerForIntent(RadialSelectionIntent.TYPE); synchronized (getAllTemplatesStatement) { // Cool and fancy Java thing to auto-cleanup resources try (ResultSet set = getAllTemplatesStatement.executeQuery()) { diff --git a/src/services/group/GroupService.java b/src/services/group/GroupService.java index f1f36408d..311b83f75 100644 --- a/src/services/group/GroupService.java +++ b/src/services/group/GroupService.java @@ -61,15 +61,13 @@ public class GroupService extends Service { private final List reservedIds = new ArrayList<>(); private final Map groups = new HashMap<>(); - - @Override - public boolean initialize() { + + public GroupService() { registerForIntent(GroupEventIntent.TYPE); registerForIntent(PlayerEventIntent.TYPE); registerForIntent(ObjectIdResponseIntent.TYPE); - return super.initialize(); } - + @Override public boolean start() { new ObjectIdRequestIntent("GroupService", 50).broadcast(); diff --git a/src/services/map/CityService.java b/src/services/map/CityService.java index bfdebc16d..7c1b0440e 100644 --- a/src/services/map/CityService.java +++ b/src/services/map/CityService.java @@ -31,13 +31,9 @@ public class CityService extends Service { if (spawnDatabase == null) throw new main.ProjectSWG.CoreException("Unable to load sdb files for StaticService"); getAllCitiesStatement = spawnDatabase.prepareStatement(GET_ALL_CITIES_FROM_TERRAIN); - } - - @Override - public boolean initialize() { + registerForIntent(GalacticPacketIntent.TYPE); registerForIntent(PlayerEventIntent.TYPE); - return super.initialize(); } @Override diff --git a/src/services/map/MapManager.java b/src/services/map/MapManager.java index 917c42712..1bc913514 100644 --- a/src/services/map/MapManager.java +++ b/src/services/map/MapManager.java @@ -79,12 +79,13 @@ public class MapManager extends Manager { loadMappingTemplates(); addChildService(cityService); + + registerForIntent(GalacticPacketIntent.TYPE); + registerForIntent(ObjectCreatedIntent.TYPE); } @Override public boolean initialize() { - registerForIntent(GalacticPacketIntent.TYPE); - registerForIntent(ObjectCreatedIntent.TYPE); loadStaticCityPoints(); return super.initialize(); } diff --git a/src/services/network/NetworkClientManager.java b/src/services/network/NetworkClientManager.java index e1b9e9df0..3b2eea426 100644 --- a/src/services/network/NetworkClientManager.java +++ b/src/services/network/NetworkClientManager.java @@ -97,13 +97,14 @@ public class NetworkClientManager extends Manager implements PacketReceiver { } }; networkId = 0; + + registerForIntent(InboundPacketIntent.TYPE); + registerForIntent(OutboundPacketIntent.TYPE); + registerForIntent(CloseConnectionIntent.TYPE); } @Override public boolean initialize() { - registerForIntent(InboundPacketIntent.TYPE); - registerForIntent(OutboundPacketIntent.TYPE); - registerForIntent(CloseConnectionIntent.TYPE); packetResender.scheduleAtFixedRate(packetResendRunnable, 0, 200, TimeUnit.MILLISECONDS); return super.initialize(); } diff --git a/src/services/objects/ClientBuildoutService.java b/src/services/objects/ClientBuildoutService.java index 01d103bfb..503641130 100644 --- a/src/services/objects/ClientBuildoutService.java +++ b/src/services/objects/ClientBuildoutService.java @@ -51,11 +51,12 @@ public class ClientBuildoutService extends Service { areasById = new Hashtable<>(1000); // Number of buildout areas getClientObjects = clientSdb.prepareStatement(GET_CLIENT_OBJECTS_SQL); + + registerForIntent(PlayerTransformedIntent.TYPE); } @Override public boolean initialize() { - registerForIntent(PlayerTransformedIntent.TYPE); List events = getEvents(); loadAreas(events); return super.initialize(); diff --git a/src/services/objects/ObjectManager.java b/src/services/objects/ObjectManager.java index f8ef1cf03..a6626c07a 100644 --- a/src/services/objects/ObjectManager.java +++ b/src/services/objects/ObjectManager.java @@ -95,15 +95,16 @@ public class ObjectManager extends Manager { addChildService(radialService); addChildService(spawnerService); addChildService(clientBuildoutService); - } - - @Override - public boolean initialize() { + registerForIntent(GalacticPacketIntent.TYPE); registerForIntent(ObjectTeleportIntent.TYPE); registerForIntent(ObjectIdRequestIntent.TYPE); registerForIntent(ObjectCreateIntent.TYPE); registerForIntent(DeleteCharacterIntent.TYPE); + } + + @Override + public boolean initialize() { loadClientObjects(); loadObjects(); return super.initialize(); diff --git a/src/services/objects/RadialService.java b/src/services/objects/RadialService.java index 452cb3a80..6545d7b2e 100644 --- a/src/services/objects/RadialService.java +++ b/src/services/objects/RadialService.java @@ -28,14 +28,10 @@ public class RadialService extends Service { public RadialService() { templatesRegistered = new HashSet<>(); - } - - @Override - public boolean initialize() { + registerForIntent(GalacticPacketIntent.TYPE); registerForIntent(RadialResponseIntent.TYPE); registerForIntent(RadialRegisterIntent.TYPE); - return super.initialize(); } @Override diff --git a/src/services/player/LoginService.java b/src/services/player/LoginService.java index acaa42c40..6e3f7228f 100644 --- a/src/services/player/LoginService.java +++ b/src/services/player/LoginService.java @@ -96,11 +96,12 @@ public class LoginService extends Service { public LoginService() { random = new Random(); + + registerForIntent(DeleteCharacterIntent.TYPE); } @Override public boolean initialize() { - registerForIntent(DeleteCharacterIntent.TYPE); RelationalDatabase local = getLocalDatabase(); getUser = local.prepareStatement("SELECT * FROM users WHERE LOWER(username) = LOWER(?)"); getGalaxies = local.prepareStatement("SELECT * FROM galaxies"); diff --git a/src/services/player/PlayerManager.java b/src/services/player/PlayerManager.java index 41f96e768..269c8bcdc 100644 --- a/src/services/player/PlayerManager.java +++ b/src/services/player/PlayerManager.java @@ -67,15 +67,11 @@ public class PlayerManager extends Manager { addChildService(loginService); addChildService(zoneService); - } - - @Override - public boolean initialize() { + registerForIntent(InboundPacketIntent.TYPE); registerForIntent(GalacticPacketIntent.TYPE); registerForIntent(PlayerEventIntent.TYPE); registerForIntent(NotifyPlayersPacketIntent.TYPE); - return super.initialize(); } @Override diff --git a/src/services/player/ZoneManager.java b/src/services/player/ZoneManager.java index 89fcbf868..e0f7c5e1d 100644 --- a/src/services/player/ZoneManager.java +++ b/src/services/player/ZoneManager.java @@ -89,12 +89,13 @@ public class ZoneManager extends Manager { commitHistory = ""; addChildService(characterCreationService); + + registerForIntent(RequestZoneInIntent.TYPE); } @Override public boolean initialize() { loadCommitHistory(); - registerForIntent(RequestZoneInIntent.TYPE); return super.initialize(); } diff --git a/src/services/spawn/SpawnerService.java b/src/services/spawn/SpawnerService.java index 0a4552e3d..08d04386b 100644 --- a/src/services/spawn/SpawnerService.java +++ b/src/services/spawn/SpawnerService.java @@ -60,12 +60,12 @@ public final class SpawnerService extends Service { spawnerDatabase = RelationalServerFactory.getServerData("spawn/static.db", "static", "building/buildings"); if (spawnerDatabase == null) throw new main.ProjectSWG.CoreException("Unable to load sdb files for SpawnerService"); + + registerForIntent(ConfigChangedIntent.TYPE); } @Override public boolean initialize() { - registerForIntent(ConfigChangedIntent.TYPE); - if (getConfig(ConfigFile.FEATURES).getBoolean("SPAWNERS-ENABLED", false)) loadSpawners(); diff --git a/src/services/spawn/StaticService.java b/src/services/spawn/StaticService.java index c4e06ec4f..7d813f4d2 100644 --- a/src/services/spawn/StaticService.java +++ b/src/services/spawn/StaticService.java @@ -61,12 +61,8 @@ public class StaticService extends Service { throw new main.ProjectSWG.CoreException("Unable to load sdb files for StaticService"); getSupportingStatement = spawnDatabase.prepareStatement(GET_SUPPORTING_SQL); - } - - @Override - public boolean initialize() { + registerForIntent(ObjectCreatedIntent.TYPE); - return super.initialize(); } @Override diff --git a/src/services/sui/SuiService.java b/src/services/sui/SuiService.java index 572d72646..51353013c 100644 --- a/src/services/sui/SuiService.java +++ b/src/services/sui/SuiService.java @@ -56,15 +56,11 @@ public class SuiService extends Service { public SuiService() { windows = new ConcurrentHashMap<>(); - } - - @Override - public boolean initialize() { + registerForIntent(GalacticPacketIntent.TYPE); registerForIntent(SuiWindowIntent.TYPE); - return super.initialize(); } - + @Override public void onIntentReceived(Intent i) { switch (i.getType()) {