Added NotifyPlayersPacketIntent for sending packets to a large number of players

This commit is contained in:
Waverunner
2015-01-20 20:28:50 -05:00
parent e8d710f32a
commit 4c75e28b55
2 changed files with 52 additions and 0 deletions
+27
View File
@@ -11,8 +11,10 @@ import network.packets.swg.login.ClientIdMsg;
import network.packets.swg.zone.insertion.SelectCharacter;
import intents.CloseConnectionIntent;
import intents.GalacticPacketIntent;
import intents.NotifyPlayersPacketIntent;
import intents.InboundPacketIntent;
import intents.PlayerEventIntent;
import resources.Terrain;
import resources.control.Intent;
import resources.control.Manager;
import resources.network.ServerType;
@@ -41,6 +43,7 @@ public class PlayerManager extends Manager {
registerForIntent(InboundPacketIntent.TYPE);
registerForIntent(GalacticPacketIntent.TYPE);
registerForIntent(PlayerEventIntent.TYPE);
registerForIntent(NotifyPlayersPacketIntent.TYPE);
return super.initialize();
}
@@ -87,6 +90,12 @@ public class PlayerManager extends Manager {
new CloseConnectionIntent(p.getNetworkId()).broadcast();
}
}
} else if (i instanceof NotifyPlayersPacketIntent) {
NotifyPlayersPacketIntent intent = (NotifyPlayersPacketIntent) i;
if (intent.getTerrain() != null)
notifyPlayersAtPlanet(intent.getTerrain(), intent.getPacket());
else
notifyPlayers(intent.getPacket());
}
}
@@ -162,6 +171,24 @@ public class PlayerManager extends Manager {
return null;
}
public void notifyPlayers(Packet... packets) {
synchronized(players) {
for (Player p : players.values()) {
if (p != null && p.getCreatureObject() != null)
p.sendPacket(packets);
}
}
}
public void notifyPlayersAtPlanet(Terrain terrain, Packet... packets) {
synchronized(players) {
for (Player p : players.values()) {
if (p != null && p.getCreatureObject() != null && p.getCreatureObject().getLocation().getTerrain() == terrain)
p.sendPacket(packets);
}
}
}
public Player getPlayerFromNetworkId(long networkId) {
return players.get(networkId);
}