package com.jonathan.citrus.network.world.handler; import com.jonathan.citrus.WorldModule; import com.jonathan.citrus.game.model.login.LoginResponse; import com.jonathan.citrus.game.model.player.Player; import com.jonathan.citrus.network.Packet; import com.jonathan.citrus.network.PacketHandler; import com.jonathan.citrus.network.world.DockedPlayer; import com.jonathan.citrus.network.world.LoginSession; import com.jonathan.citrus.utility.ArrayUtilities; import com.jonathan.citrus.utility.NameUtilities; import com.jonathan.citrus.utility.TextUtilities; import static com.jonathan.citrus.utility.ArrayUtilities.primitive; /** * Created by Jonathan on 12/27/13. */ public class BasicPlayerPacketHandler extends PacketHandler { private final int SEND_LOGIN = 2, REGISTER_PLAYER = 3, EDIT_PLAYER_DETAILS = 4, PLAYER_LIST_CHANGE = 5; @Override public void handle(LoginSession session, Packet packet) { int opcode = packet.getOpcode(); int basicMatterId = packet.get(); if(opcode == SEND_LOGIN) { LoginResponse resp = LoginResponse.valueFor(basicMatterId); int playerIndex = packet.getSmart(); Player player = WorldModule.getLogic().getPlayerIndexMap().get(playerIndex); if(resp == LoginResponse.LOGIN) { int friends = packet.get(); if(friends != 0) { for(int i = 0; i < friends; i++) { DockedPlayer p = WorldModule.getLogic().getLoginSession().getPlayer(packet.getSmart()); if(!p.hasFriend(player.getProtocolIndex())) { p.addFriend(player.getProtocolIndex()); } } } } WorldModule.getLogic().finishLogin(resp, player); } else { int player = packet.getSmart(); int privateMatter = packet.get(); if(opcode == REGISTER_PLAYER) { String name = NameUtilities.formatNameForDisplay(NameUtilities.longToString(packet.getLong())); DockedPlayer p = session.createPlayer(player, basicMatterId, name, privateMatter); int friendCount = packet.get(); if(friendCount != 0) { int[] friends = new int[friendCount]; for(int i = 0; i < friendCount; i++) { friends[i] = packet.getSmart(); } p.setFriends(friends); } session.addDockedPlayer(p); } else if(opcode == EDIT_PLAYER_DETAILS) { if(privateMatter != 3) { session.getPlayer(player).setPrivateDetails(privateMatter); //inform friendserver to update } else { session.removeGlobalPlayer(basicMatterId, player, packet.getLong()); } } else if(opcode == PLAYER_LIST_CHANGE) { //privateMatter will be used for add/delete/ignore 0/1/2 respectively //TODO add/remove player } } } }