From 06a4db325bb4eacc8d1cd9f72a63d995e25f41f6 Mon Sep 17 00:00:00 2001 From: Obique Date: Sun, 7 Dec 2014 15:31:40 -0600 Subject: [PATCH] Added galaxy concept to the managers/services --- src/services/CoreManager.java | 55 ++++++++++-- src/services/galaxy/GalacticManager.java | 6 +- src/services/player/ZoneService.java | 101 ++++++++++++++++------- 3 files changed, 123 insertions(+), 39 deletions(-) diff --git a/src/services/CoreManager.java b/src/services/CoreManager.java index ca9dfe690..6afe85460 100644 --- a/src/services/CoreManager.java +++ b/src/services/CoreManager.java @@ -1,26 +1,39 @@ package services; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + import network.packets.soe.DataChannelA; import network.packets.swg.SWGPacket; import network.packets.swg.zone.baselines.Baseline; import intents.InboundPacketIntent; import intents.OutboundPacketIntent; +import resources.Galaxy; +import resources.config.ConfigFile; import resources.control.Intent; import resources.control.Manager; +import resources.services.Config; import services.galaxy.GalacticManager; public class CoreManager extends Manager { + private static final int galaxyId = 2; + private EngineManager engineManager; private GalacticManager galacticManager; + private Galaxy galaxy; private long startTime; public CoreManager() { - engineManager = new EngineManager(); - galacticManager = new GalacticManager(); - - addChildService(engineManager); - addChildService(galacticManager); + galaxy = getGalaxy(); + if (galaxy != null) { + engineManager = new EngineManager(galaxy); + galacticManager = new GalacticManager(galaxy); + + addChildService(engineManager); + addChildService(galacticManager); + } } /** @@ -36,7 +49,7 @@ public class CoreManager extends Manager { startTime = System.nanoTime(); registerForIntent(InboundPacketIntent.TYPE); registerForIntent(OutboundPacketIntent.TYPE); - return super.initialize(); + return galaxy != null && super.initialize(); } @Override @@ -71,4 +84,34 @@ public class CoreManager extends Manager { return (System.nanoTime()-startTime)/1E6; } + private Galaxy getGalaxy() { + PreparedStatement getGalaxy = getLocalDatabase().prepareStatement("SELECT * FROM galaxies WHERE id = ?"); + Config c = getConfig(ConfigFile.PRIMARY); + try { + getGalaxy.setInt(1, galaxyId); + ResultSet set = getGalaxy.executeQuery(); + if (!set.next()) { + System.err.println("CoreManager: No such galaxy exists with ID " + galaxyId + "!"); + return null; + } + Galaxy g = new Galaxy(); + g.setId(set.getInt("id")); + g.setName(set.getString("name")); + g.setAddress(set.getString("address")); + g.setPopulation(set.getInt("population")); + g.setTimeZone(set.getInt("timezone")); + g.setZonePort(set.getInt("zone_port")); + g.setPingPort(set.getInt("ping_port")); + g.setStatus(set.getInt("status")); + g.setMaxCharacters(c.getInt("GALAXY-MAX-CHARACTERS", 2)); + g.setOnlinePlayerLimit(c.getInt("GALAXY-MAX-ONLINE", 3000)); + g.setOnlineFreeTrialLimit(c.getInt("GALAXY-MAX-ONLINE", 3000)); + g.setRecommended(true); + return g; + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + } diff --git a/src/services/galaxy/GalacticManager.java b/src/services/galaxy/GalacticManager.java index 3a6bd72c5..7f5bbb36a 100644 --- a/src/services/galaxy/GalacticManager.java +++ b/src/services/galaxy/GalacticManager.java @@ -3,6 +3,7 @@ package services.galaxy; import intents.GalacticIntent; import intents.GalacticPacketIntent; import intents.InboundPacketIntent; +import resources.Galaxy; import resources.control.Intent; import resources.control.Manager; import services.objects.ObjectManager; @@ -16,8 +17,10 @@ public class GalacticManager extends Manager { private PlayerManager playerManager; private GameManager gameManager; private Intent prevPacketIntent; + private Galaxy galaxy; - public GalacticManager() { + public GalacticManager(Galaxy g) { + this.galaxy = g; objectManager = new ObjectManager(); playerManager = new PlayerManager(); gameManager = new GameManager(); @@ -69,6 +72,7 @@ public class GalacticManager extends Manager { private void prepareGalacticIntent(GalacticIntent i) { i.setObjectManager(objectManager); i.setPlayerManager(playerManager); + i.setGalaxy(galaxy); } } diff --git a/src/services/player/ZoneService.java b/src/services/player/ZoneService.java index 55f3f535c..dc06c497e 100644 --- a/src/services/player/ZoneService.java +++ b/src/services/player/ZoneService.java @@ -3,6 +3,8 @@ package services.player; import intents.GalacticIntent; import intents.PlayerEventIntent; +import java.sql.PreparedStatement; +import java.sql.SQLException; import java.util.Map; import main.ProjectSWG; @@ -17,12 +19,15 @@ import network.packets.swg.login.creation.ClientVerifyAndLockNameRequest; import network.packets.swg.login.creation.ClientVerifyAndLockNameResponse; import network.packets.swg.login.creation.ClientCreateCharacter; import network.packets.swg.login.creation.ClientVerifyAndLockNameResponse.ErrorMessage; +import network.packets.swg.login.creation.CreateCharacterFailure; +import network.packets.swg.login.creation.CreateCharacterFailure.NameFailureReason; import network.packets.swg.login.creation.CreateCharacterSuccess; import network.packets.swg.login.creation.RandomNameRequest; import network.packets.swg.login.creation.RandomNameResponse; import network.packets.swg.zone.GalaxyLoopTimesRequest; import network.packets.swg.zone.GalaxyLoopTimesResponse; import network.packets.swg.zone.HeartBeatMessage; +import resources.Galaxy; import resources.Location; import resources.Race; import resources.Terrain; @@ -42,9 +47,11 @@ import utilities.namegen.SWGNameGenerator; public class ZoneService extends Service { private SWGNameGenerator nameGenerator; - private Map profTemplates; + private Map profTemplates; private ClientFactory clientFac; + private PreparedStatement createCharacter; + public ZoneService() { nameGenerator = new SWGNameGenerator(); clientFac = new ClientFactory(); @@ -53,6 +60,8 @@ public class ZoneService extends Service { @Override public boolean initialize() { + String createCharacterSql = "INSERT INTO characters (id, name, race, userId, galaxyId) VALUES (?, ?, ?, ?, ?)"; + createCharacter = getLocalDatabase().prepareStatement(createCharacterSql); nameGenerator.loadAllRules(); //loadProfTemplates(); TODO: Uncomment when object creation is implemented return super.initialize(); @@ -60,7 +69,7 @@ public class ZoneService extends Service { public void handlePacket(GalacticIntent intent, Player player, long networkId, Packet p) { if (p instanceof SessionRequest) - sendServerInfo(networkId); + sendServerInfo(intent.getGalaxy(), networkId); if (p instanceof ClientIdMsg) handleClientIdMsg(player, (ClientIdMsg) p); if (p instanceof RandomNameRequest) @@ -73,17 +82,16 @@ public class ZoneService extends Service { handleGalaxyLoopTimesRequest(player, (GalaxyLoopTimesRequest) p); } - private void sendServerInfo(long networkId) { + private void sendServerInfo(Galaxy galaxy, long networkId) { Config c = getConfig(ConfigFile.PRIMARY); - String name = c.getString("ZONE-SERVER-NAME", "ZoneServer"); - int id = c.getInt("ZONE-SERVER-ID", 1); + String name = c.getString("ZONE-SERVER-NAME", galaxy.getName()); + int id = c.getInt("ZONE-SERVER-ID", galaxy.getId()); sendPacket(networkId, new ServerString(name + ":" + id)); sendPacket(networkId, new ServerId(id)); } private void handleClientIdMsg(Player player, ClientIdMsg clientId) { System.out.println(player.getUsername() + " has connected to the zone server."); - player.setGalaxyId(getConfig(ConfigFile.PRIMARY).getInt("ZONE-SERVER-ID", 1)); sendPacket(player.getNetworkId(), new HeartBeatMessage()); sendPacket(player.getNetworkId(), new AccountFeatureBits()); sendPacket(player.getNetworkId(), new ClientPermissionsMessage()); @@ -103,39 +111,55 @@ public class ZoneService extends Service { private void handleCharCreation(ObjectManager objManager, Player player, ClientCreateCharacter create) { System.out.println("Create Character: " + create.getName()); + long characterId = createCharacter(objManager, player, create); + synchronized (createCharacter) { + try { + createCharacter.setLong(1, characterId); + createCharacter.setString(2, create.getName()); + createCharacter.setString(3, create.getRace()); + createCharacter.setInt(4, player.getUserId()); + createCharacter.setInt(5, player.getGalaxyId()); + System.out.println("Galaxy ID: " + player.getGalaxyId()); + if (createCharacter.executeUpdate() != 1) { + System.err.println("ZoneService: Unable to create character and put into database!"); + sendPacket(player, new CreateCharacterFailure(NameFailureReason.NAME_RETRY)); + return; + } + } catch (SQLException e) { + System.err.println("ZoneService: Unable to create character and put into database!"); + e.printStackTrace(); + sendPacket(player, new CreateCharacterFailure(NameFailureReason.NAME_RETRY)); + return; + } + } + sendPacket(player, new CreateCharacterSuccess(characterId)); + new PlayerEventIntent(player, PlayerEvent.PE_CREATE_CHARACTER).broadcast(); + } + + private long createCharacter(ObjectManager objManager, Player player, ClientCreateCharacter create) { + Location start = getStartLocation(create.getStart()); Race race = Race.getRace(create.getRace()); CreatureObject creatureObj = (CreatureObject) objManager.createObject(race.getFilename()); - PlayerObject playerObj = (PlayerObject) objManager.createObject("object/player/shared_player.iff"); + PlayerObject playerObj = (PlayerObject) objManager.createObject("object/player/shared_player.iff"); + TangibleObject hairObj = (TangibleObject) objManager.createObject(create.getHair()); + setCreatureObjectValues(creatureObj, create); + playerObj.setProfession(create.getProfession()); + hairObj.setAppearanceData(create.getHairCustomization()); + creatureObj.addChild(playerObj); + creatureObj.addChild(hairObj); + creatureObj.setLocation(start); + playerObj.setLocation(start); + player.setCreatureObject(creatureObj); + player.setPlayerObject(playerObj); + return creatureObj.getObjectId(); + } + + private void setCreatureObjectValues(CreatureObject creatureObj, ClientCreateCharacter create) { creatureObj.setRace(Race.getRace(create.getRace())); creatureObj.setAppearanceData(create.getCharCustomization()); creatureObj.setHeight(create.getHeight()); creatureObj.setName(create.getName()); - playerObj.setProfession(create.getProfession()); - TangibleObject hairObj = (TangibleObject) objManager.createObject(create.getHair()); - hairObj.setAppearanceData(create.getHairCustomization()); - creatureObj.addChild(playerObj); - creatureObj.addChild(hairObj); - Location start = new Location(); - start.setTerrain(Terrain.TATOOINE); - start.setX(3525 + (Math.random()-.5) * 5); - start.setY(4); - start.setZ(-4807 + (Math.random()-.5) * 5); - start.setOrientationX(0); - start.setOrientationY(0); - start.setOrientationZ(0); - start.setOrientationW(1); - creatureObj.setLocation(start); creatureObj.setPvpType(20); - playerObj.setLocation(start); - player.setCreatureObject(creatureObj); - player.setPlayerObject(playerObj); - sendPacket(player, new CreateCharacterSuccess(creatureObj.getObjectId())); - - new PlayerEventIntent(player, PlayerEvent.PE_CREATE_CHARACTER).broadcast(); - - /*for (String item : profTemplates.get(create.getClothes()).getItems(create.getRace())) { - // TODO: Create and add item to character, item variable will be the template of the item to create - }*/ } private void handleGalaxyLoopTimesRequest(Player player, GalaxyLoopTimesRequest req) { @@ -151,4 +175,17 @@ public class ZoneService extends Service { profTemplates.put("outdoors_scout", (ProfTemplateData) clientFac.getInfoFromFile("creation/profession_defaults_outdoors_scout.iff")); profTemplates.put("jedi", (ProfTemplateData) clientFac.getInfoFromFile("creation/profession_defaults_jedi.iff")); } + + private Location getStartLocation(String start) { + Location location = new Location(); + location.setTerrain(Terrain.TATOOINE); + location.setX(3525 + (Math.random()-.5) * 5); + location.setY(4); + location.setZ(-4807 + (Math.random()-.5) * 5); + location.setOrientationX(0); + location.setOrientationY(0); + location.setOrientationZ(0); + location.setOrientationW(1); + return location; + } }