Package org.moparscape.msc.ls.packethandler.gameserver

Source Code of org.moparscape.msc.ls.packethandler.gameserver.PlayerLoginHandler

package org.moparscape.msc.ls.packethandler.gameserver;

import java.util.ArrayList;
import java.util.Map.Entry;

import org.apache.mina.common.IoSession;
import org.moparscape.msc.ls.Server;
import org.moparscape.msc.ls.auth.Auth;
import org.moparscape.msc.ls.auth.impl.AuthFactory;
import org.moparscape.msc.ls.model.PlayerSave;
import org.moparscape.msc.ls.model.World;
import org.moparscape.msc.ls.net.LSPacket;
import org.moparscape.msc.ls.net.Packet;
import org.moparscape.msc.ls.packetbuilder.gameserver.PlayerLoginPacketBuilder;
import org.moparscape.msc.ls.packethandler.PacketHandler;
import org.moparscape.msc.ls.service.UIDTracker;
import org.moparscape.msc.ls.util.Config;
import org.moparscape.msc.ls.util.DataConversions;

public class PlayerLoginHandler implements PacketHandler {
  public static ArrayList<String> badClients = new ArrayList<String>();
  private PlayerLoginPacketBuilder builder = new PlayerLoginPacketBuilder();

  public void handlePacket(Packet p, IoSession session) throws Exception {
    final long uID = ((LSPacket) p).getUID();
    World world = (World) session.getAttachment();
    long user = p.readLong();
    String ip = DataConversions.IPToString(p.readLong());
    byte[] pass = p.readBytes(p.readInt());
    String UID = p.readString();
    byte loginCode = validatePlayer(user, pass, ip, UID);

    builder.setUID(uID);
    if (loginCode == 0 || loginCode == 1 || loginCode == 99) {
      try {
        badClients.add(DataConversions.hashToUsername(user));
        System.out.println("UID: " + UID + " Player: "
            + DataConversions.hashToUsername(user));
      } catch (Exception e) {
        System.out.println("Exception in UID printer :"
            + e.getMessage());
      }

      builder.setPlayer(Server.getServer().findSave(user, world),
          loginCode);
      world.registerPlayer(user, ip, UID);
    } else {
      builder.setPlayer(null, loginCode);
    }

    LSPacket packet = builder.getPacket();
    if (packet != null) {
      session.write(packet);
    }
  }

  private static Auth auth;

  static {
    try {
      auth = AuthFactory.create(Config.AUTH_CLASS);
      System.out.println("Authentication Scheme: "
          + auth.getClass().getSimpleName());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  private byte validatePlayer(long user, byte[] pass, String ip, String UID) {
    Server server = Server.getServer();
    byte returnVal = 0;

    if (UIDTracker.isActive(UID)) {
      return 8;
    }

    if (!Server.storage.playerExists(user)) {
      if (Config.AUTO_REGISTER) {
        PlayerSave p = Server.storage.registerPlayer(user, pass, DataConversions.hashToUsername(user));
        Server.storage.savePlayer(p);
      } else {
        return 10;
      }
    }

    if (!auth.validate(user, pass, new StringBuilder())) {
      return 2;
    }

    if (Server.storage.isBanned(user)) {
      System.out.println("Banned player: "
          + DataConversions.hashToUsername(user)
          + " trying to login.");
      return 6;
    }

    if (Server.storage.getGroupID(user) >= 5) {
      returnVal = 99;
    }

    long owner = Server.storage.getOwner(user);
    for (World w : server.getWorlds()) {
      for (Entry<Long, Long> player : w.getPlayers()) {
        if (player.getKey() == user) {
          return 3;
        }
        if (player.getValue() == owner) {
          return 9;
        }
      }
      if (w.hasPlayer(user)) {
        return 3;
      }
    }
    return returnVal;
  }
}
TOP

Related Classes of org.moparscape.msc.ls.packethandler.gameserver.PlayerLoginHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.