Got Login process nearly complete

This commit is contained in:
Obique
2014-11-25 09:13:51 -06:00
committed by Obique
parent e520d17979
commit e0afcb89e1
6 changed files with 361 additions and 12 deletions
+51 -3
View File
@@ -1,19 +1,31 @@
package services.player;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import network.packets.Packet;
import network.packets.swg.login.ClientIdMsg;
import intents.InboundPacketIntent;
import resources.control.Intent;
import resources.control.Manager;
import resources.network.ServerType;
import resources.player.Player;
public class PlayerManager extends Manager {
private LoginService loginService;
private ZoneService zoneService;
private Map <Long, Player> players;
public PlayerManager() {
loginService = new LoginService();
zoneService = new ZoneService();
players = new ConcurrentHashMap<Long, Player>();
addChildService(loginService);
addChildService(zoneService);
}
@Override
@@ -25,11 +37,47 @@ public class PlayerManager extends Manager {
@Override
public void onIntentReceived(Intent i) {
if (i instanceof InboundPacketIntent) {
Packet p = ((InboundPacketIntent) i).getPacket();
if (((InboundPacketIntent) i).getServerType() == ServerType.LOGIN) {
loginService.handlePacket(p);
InboundPacketIntent ipi = (InboundPacketIntent) i;
Packet packet = ipi.getPacket();
ServerType type = ipi.getServerType();
long networkId = ipi.getNetworkId();
Player player = null;
if (type == ServerType.ZONE && packet instanceof ClientIdMsg)
player = transitionLoginToZone(networkId, (ClientIdMsg) packet);
else
player = players.get(networkId);
if (player == null && type == ServerType.LOGIN) {
player = new Player(networkId);
players.put(networkId, player);
}
if (player != null) {
if (type == ServerType.LOGIN)
loginService.handlePacket(player, packet);
else if (type == ServerType.ZONE)
zoneService.handlePacket(player, networkId, packet);
}
}
}
private Player transitionLoginToZone(long networkId, ClientIdMsg clientId) {
byte [] nToken = clientId.getSessionToken();
for (Player p : players.values()) {
byte [] pToken = p.getSessionToken();
if (pToken.length != nToken.length)
continue;
boolean match = true;
for (int t = 0; t < pToken.length && match; t++) {
if (pToken[t] != nToken[t])
match = false;
}
if (match) {
players.remove(p.getNetworkId());
p.setNetworkId(networkId);
players.put(networkId, p);
return p;
}
}
return null;
}
}