diff --git a/nge.cfg b/nge.cfg index 590ea9dc6..980cf2ead 100644 --- a/nge.cfg +++ b/nge.cfg @@ -1,18 +1,15 @@ -#Mon Nov 24 03:05:06 CST 2014 -PACKET-SENDING-INTERVAL=50 -LOGIN_PORT=44453 -ZONE_PORT=44463 +#Fri Nov 28 13:28:16 CST 2014 LOCAL-USER=nge +ZONE-SERVER-NAME=ZoneServer LOGIN-SERVER-NAME=LoginServer ZONE-PORT=44463 SESSION-TOKEN-LENGTH=24 LOGIN-PORT=44453 -MAX_PACKET_SIZE=496 -PING_PORT=44462 MAX-PACKET-SIZE=496 LOCAL-DB=nge -LOGIN-SERVER-ID=1 LOCAL-PASS=nge -GALAXY-MAX-ONLINE=3000 +LOGIN-SERVER-ID=1 GALAXY-MAX-CHARACTERS=2 +GALAXY-MAX-ONLINE=3000 PING-PORT=44462 +ZONE-SERVER-ID=1 diff --git a/src/intents/GalacticIntent.java b/src/intents/GalacticIntent.java new file mode 100644 index 000000000..6d3f2761f --- /dev/null +++ b/src/intents/GalacticIntent.java @@ -0,0 +1,27 @@ +package intents; + +import resources.control.Intent; +import services.player.PlayerManager; + +public abstract class GalacticIntent extends Intent { + + private PlayerManager playerManager; + + protected GalacticIntent(String type) { + super(type); + } + + protected GalacticIntent(GalacticIntent i) { + super(i.getType()); + setPlayerManager(i.getPlayerManager()); + } + + public void setPlayerManager(PlayerManager playerManager) { + this.playerManager = playerManager; + } + + public PlayerManager getPlayerManager() { + return playerManager; + } + +} diff --git a/src/intents/GalacticPacketIntent.java b/src/intents/GalacticPacketIntent.java new file mode 100644 index 000000000..b2588c459 --- /dev/null +++ b/src/intents/GalacticPacketIntent.java @@ -0,0 +1,52 @@ +package intents; + +import network.packets.Packet; +import resources.network.ServerType; + +public class GalacticPacketIntent extends GalacticIntent { + + public static final String TYPE = "GalacticPacketIntent"; + + private Packet packet; + private ServerType type; + private long networkId; + + public GalacticPacketIntent(InboundPacketIntent i) { + super(TYPE); + setPacket(i.getPacket()); + setServerType(i.getServerType()); + setNetworkId(i.getNetworkId()); + } + + public GalacticPacketIntent(ServerType type, Packet p, long networkId) { + super(TYPE); + setPacket(p); + setServerType(type); + setNetworkId(networkId); + } + + public void setPacket(Packet p) { + this.packet = p; + } + + public void setServerType(ServerType type) { + this.type = type; + } + + public void setNetworkId(long networkId) { + this.networkId = networkId; + } + + public Packet getPacket() { + return packet; + } + + public ServerType getServerType() { + return type; + } + + public long getNetworkId() { + return networkId; + } + +} diff --git a/src/main/ProjectSWG.java b/src/main/ProjectSWG.java index cd0678ed9..f3594e438 100644 --- a/src/main/ProjectSWG.java +++ b/src/main/ProjectSWG.java @@ -40,12 +40,9 @@ public class ProjectSWG { while (!shutdownRequested) { manager = new CoreManager(); initialize(); - System.out.println("ProjectSWG: Initialized. Time: " + manager.getCoreTime() + "ms"); start(); - System.out.println("ProjectSWG: Started. Time: " + manager.getCoreTime() + "ms"); loop(); terminate(); - System.out.println("ProjectSWG: Terminated. Time: " + manager.getCoreTime() + "ms"); if (!shutdownRequested) { System.out.println("ProjectSWG: Cleaning up memory..."); cleanup(); @@ -63,12 +60,14 @@ public class ProjectSWG { System.out.println("ProjectSWG: Initializing..."); if (!manager.initialize()) throw new CoreException("Failed to initialize."); + System.out.println("ProjectSWG: Initialized. Time: " + manager.getCoreTime() + "ms"); } private void start() { System.out.println("ProjectSWG: Starting..."); if (!manager.start()) throw new CoreException("Failed to start."); + System.out.println("ProjectSWG: Started. Time: " + manager.getCoreTime() + "ms"); } private void loop() { @@ -88,6 +87,7 @@ public class ProjectSWG { return; if (!manager.terminate()) throw new CoreException("Failed to terminate."); + System.out.println("ProjectSWG: Terminated. Time: " + manager.getCoreTime() + "ms"); } private void cleanup() { diff --git a/src/services/CoreManager.java b/src/services/CoreManager.java index 9e4db8a23..cbbb599a3 100644 --- a/src/services/CoreManager.java +++ b/src/services/CoreManager.java @@ -6,20 +6,20 @@ import intents.InboundPacketIntent; import intents.OutboundPacketIntent; import resources.control.Intent; import resources.control.Manager; -import services.player.PlayerManager; +import services.galaxy.GalacticManager; public class CoreManager extends Manager { - private long startTime; private EngineManager engineManager; - private PlayerManager playerManager; + private GalacticManager galacticManager; + private long startTime; public CoreManager() { engineManager = new EngineManager(); - playerManager = new PlayerManager(); + galacticManager = new GalacticManager(); addChildService(engineManager); - addChildService(playerManager); + addChildService(galacticManager); } /** diff --git a/src/services/galaxy/GalacticManager.java b/src/services/galaxy/GalacticManager.java new file mode 100644 index 000000000..66284eef9 --- /dev/null +++ b/src/services/galaxy/GalacticManager.java @@ -0,0 +1,62 @@ +package services.galaxy; + +import intents.GalacticIntent; +import intents.GalacticPacketIntent; +import intents.InboundPacketIntent; +import resources.control.Intent; +import resources.control.Manager; +import services.player.PlayerManager; + +public class GalacticManager extends Manager { + + private final Object prevPacketIntentMutex = new Object(); + + private PlayerManager playerManager; + private Intent prevPacketIntent; + + public GalacticManager() { + playerManager = new PlayerManager(); + prevPacketIntent = null; + + addChildService(playerManager); + } + + @Override + public boolean initialize() { + registerForIntent(InboundPacketIntent.TYPE); + return super.initialize(); + } + + @Override + public void onIntentReceived(Intent i) { + if (i instanceof InboundPacketIntent) { + synchronized (prevPacketIntentMutex) { + GalacticPacketIntent g = new GalacticPacketIntent((InboundPacketIntent) i); + if (prevPacketIntent == null) + broadcastGalacticIntent(g); + else + broadcastGalacticIntentAfterIntent(g, i); + prevPacketIntent = g; + } + } + } + + public void broadcastGalacticIntent(GalacticIntent i) { + synchronized (i) { + if (i.isBroadcasted()) + return; + i.setPlayerManager(playerManager); + i.broadcast(); + } + } + + public void broadcastGalacticIntentAfterIntent(GalacticIntent g, Intent i) { + synchronized (g) { + if (g.isBroadcasted()) + return; + g.setPlayerManager(playerManager); + g.broadcastAfterIntent(i); + } + } + +} diff --git a/src/services/player/PlayerManager.java b/src/services/player/PlayerManager.java index 39006c4a7..0dadce0e9 100644 --- a/src/services/player/PlayerManager.java +++ b/src/services/player/PlayerManager.java @@ -5,7 +5,7 @@ import java.util.concurrent.ConcurrentHashMap; import network.packets.Packet; import network.packets.swg.login.ClientIdMsg; -import intents.InboundPacketIntent; +import intents.GalacticPacketIntent; import resources.control.Intent; import resources.control.Manager; import resources.network.ServerType; @@ -30,14 +30,14 @@ public class PlayerManager extends Manager { @Override public boolean initialize() { - registerForIntent(InboundPacketIntent.TYPE); + registerForIntent(GalacticPacketIntent.TYPE); return super.initialize(); } @Override public void onIntentReceived(Intent i) { - if (i instanceof InboundPacketIntent) { - InboundPacketIntent ipi = (InboundPacketIntent) i; + if (i instanceof GalacticPacketIntent) { + GalacticPacketIntent ipi = (GalacticPacketIntent) i; Packet packet = ipi.getPacket(); ServerType type = ipi.getServerType(); long networkId = ipi.getNetworkId(); diff --git a/src/services/player/ZoneService.java b/src/services/player/ZoneService.java index 55b6d9578..f92b6c412 100644 --- a/src/services/player/ZoneService.java +++ b/src/services/player/ZoneService.java @@ -22,6 +22,8 @@ import resources.client_info.ClientFactory; import resources.client_info.visitors.ProfTemplateData; import resources.config.ConfigFile; import resources.control.Service; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; import resources.player.Player; import resources.player.PlayerEvent; import resources.services.Config; @@ -87,6 +89,8 @@ public class ZoneService extends Service { private void handleCharCreation(Player player, ClientCreateCharacter create) { System.out.println("Create Character: " + create.getName()); + CreatureObject creatureObj = new CreatureObject(); + PlayerObject playerObj = new PlayerObject(); new PlayerEventIntent(player, PlayerEvent.PE_CREATE_CHARACTER).broadcast();