Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.io.IOException;
- import java.math.BigInteger;
- public abstract class Login extends SocketConnecter {
- protected final void login(String user, String pass) {
- try {
- username = user;
- user = DataOperations.addCharacters(user, 20);
- password = pass;
- pass = DataOperations.addCharacters(pass, 20);
- if (user.trim().length() == 0) {
- loginScreenPrint("You must enter both a username", "and a password - Please try again");
- return;
- }
- loginScreenPrint("Please wait...", "Connecting to server");
- streamClass = new StreamClass(makeSocket(SERVER_IP, SERVER_PORT), this);
- streamClass.maxPacketReadCount = maxPacketReadCount;
- long l = DataOperations.stringLength12ToLong(user);
- streamClass.createPacket(32);
- streamClass.addByte((int) (l >> 16 & 31L));
- streamClass.addString(this.getClass().getName().toUpperCase());
- streamClass.finalisePacket();
- long sessionID = streamClass.read8ByteLong();
- if (sessionID == 0L) {
- loginScreenPrint("Login server offline.", "Please try again in a few mins");
- return;
- }
- System.out.print("Session ID: " + sessionID);
- int sessionRotationKeys[] = new int[4];
- sessionRotationKeys[0] = (int)(Math.random() * 99999999D);
- sessionRotationKeys[1] = (int)(Math.random() * 99999999D);
- sessionRotationKeys[2] = (int)(sessionID >> 32);
- sessionRotationKeys[3] = (int)sessionID;
- DataEncryption dataEncryption = new DataEncryption(new byte[500]);
- dataEncryption.offset = 0;
- dataEncryption.add4ByteInt(sessionRotationKeys[0]);
- dataEncryption.add4ByteInt(sessionRotationKeys[1]);
- dataEncryption.add4ByteInt(sessionRotationKeys[2]);
- dataEncryption.add4ByteInt(sessionRotationKeys[3]);
- dataEncryption.add4ByteInt(0); // UID
- dataEncryption.addString(user);
- dataEncryption.addString(pass);
- dataEncryption.encryptPacketWithKeys(key, modulus);
- streamClass.createPacket(0);
- streamClass.addByte(0);
- streamClass.add2ByteInt(26);
- streamClass.addBytes(dataEncryption.packet, 0, dataEncryption.offset);
- streamClass.finalisePacket();
- int loginResponse = streamClass.readInputStream();
- System.out.println(" - Login Response:" + loginResponse);
- sendPingPacketReadPacketData();
- if (loginResponse == 99) {
- reconnectTries = 0;
- return;
- }
- if (loginResponse == 0) {
- reconnectTries = 0;
- return;
- }
- if (loginResponse == 1) {
- reconnectTries = 0;
- return;
- }
- if (loginResponse == -1) {
- loginScreenPrint("Error unable to login.", "Server timed out");
- return;
- }
- // 0 = Valid
- // 1 = Reconnecting
- if (loginResponse == 2) {
- loginScreenPrint("Invalid username or password.", "Try again, or create a new account");
- return;
- }
- if (loginResponse == 3) {
- loginScreenPrint("That username is already logged in.", "Wait 60 seconds then retry");
- return;
- }
- if (loginResponse == 4) {
- loginScreenPrint("The client has been updated.", "Please download the newest one");
- return;
- }
- if (loginResponse == 5) {
- loginScreenPrint("Error unable to login.", "Server rejected session");
- return;
- }
- if (loginResponse == 6) {
- loginScreenPrint("Account disabled.", "Contact an admin for details");
- return;
- }
- if (loginResponse == 7) {
- loginScreenPrint("Error - failed to decode profile.", "Contact an admin");
- return;
- }
- if (loginResponse == 8) {
- loginScreenPrint("IP Already in use.", "You may only login once at a time");
- return;
- }
- if (loginResponse == 9) {
- loginScreenPrint("Account already in use.", "You may only login to one character at a time");
- return;
- }
- // 99 = Mod/Admin
- loginScreenPrint("Error unable to login.", "Unrecognised response code");
- return;
- }
- catch (Exception exception) {
- System.out.println(String.valueOf(exception));
- }
- if (reconnectTries > 0) {
- try {
- Thread.sleep(5000L);
- }
- catch (Exception _ex) {
- }
- reconnectTries--;
- login(username, password);
- }
- loginScreenPrint("Sorry! Unable to connect.", "Check internet settings or try another world");
- }
- private void loginScreenPrint(String string, String string2) {
- System.out.println(string+" "+string2);
- }
- protected final void sendPingPacketReadPacketData() {
- System.err.println(packetData[0] & 0xff);
- long l = System.currentTimeMillis();
- if (streamClass.containsData())
- lastPing = l;
- if (l - lastPing > 5000L) {
- lastPing = l;
- streamClass.createPacket(5);
- streamClass.formatPacket();
- }
- try {
- streamClass.writePacket(20);
- }
- catch (IOException _ex) {
- return;
- }
- int packetLength = streamClass.readPacket(packetData);
- if (packetLength > 0) {
- streamClass.createPacket(5);
- streamClass.formatPacket();
- }
- }
- public Login() {
- username = "";
- password = "";
- packetData = new byte[5000];
- }
- public static int maxPacketReadCount;
- String username;
- String password;
- public static String SERVER_IP = "127.0.0.1";
- public static int SERVER_PORT = 43594;
- public StreamClass streamClass;
- protected byte[] packetData;
- int reconnectTries;
- private static BigInteger key = new BigInteger("1370158896620336158431733257575682136836100155721926632321599369132092701295540721504104229217666225601026879393318399391095704223500673696914052239029335");
- private static BigInteger modulus = new BigInteger("1549611057746979844352781944553705273443228154042066840514290174539588436243191882510185738846985723357723362764835928526260868977814405651690121789896823");
- long lastPing;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement