Package alexoft.OGame

Source Code of alexoft.OGame.OGame

package alexoft.OGame;

import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Timer;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import alexoft.OGame.resources.LimitedStock;
import alexoft.utils.Network;

public class OGame {
  private boolean loggedin = false;
  private String universe;
  private String user;
  private String pass;
  private Document doc;
  private String ogameVersion;
  private List<OGamePlanet> planets;
  private Timer ogameTimer;
  private Queue<BuildItem> buildQueue;

  public List<OGamePlanet> getPlanets() {
    return planets;
  }

  public Queue<BuildItem> getQueue() {
    return buildQueue;
  }

  public OGame() {
    planets = new ArrayList<OGamePlanet>();
    buildQueue = new LinkedList<BuildItem>();
    ogameTimer = new Timer();
    ogameTimer.schedule(new BackgroundProcess(this), 1000, 60000);
  }

  private void fetchPage(String p) {
    try {
      String i = Network.excuteHTTPGet("http://" + universe + "/game/"
          + p);
      this.doc = Jsoup.parse(i);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public void login(String user, String pass, String univ) {
    if(loggedin) return;
    try {
      this.universe = univ;
      System.out.println("Logging in..");
      String params = "uni_id=&kid=&is_utf8=1&v=2&uni_url=" + univ
          + "&login=" + user + "&pass=" + pass;
      String i = Network.excuteHTTPPost("http://" + univ
          + "/game/reg/login2.php", params);

      this.doc = Jsoup.parse(i);
      updatePlanets();
      getResources();
    } catch (IOException ex) {
      Logger.getLogger(OGame.class.getName()).log(Level.SEVERE, null, ex);
    }
  }

  private void login() {
    login(user, pass, universe);
  }

  public String getOGameVersion() {
    if (ogameVersion == null) {
      ogameVersion = this.doc.select("meta[name=ogame-version]").first()
          .attr("content").trim();
    }
    return ogameVersion;
  }

  public void tryBuild(OGamePlanet p, String page, String item) {
    this.fetchPage("index.php?page=" + page + "&cp=" + p.id);
    if(this.doc.nodeName() == "script"){
      loggedin = false;
      System.out.println("Relogin, try later");
      login();
      return;
    }
    getResources(p, false);
    Element e = this.doc.select("li#button" + item + " div div").first();
    if (e == null) {
      System.out.println("unknown item");
      return;
    }
    String name = e.select("span.textlabel").first().text().trim();
    Element i = e.select("a.fastBuild").first();
    if (i == null) {
      System.out.println("Cannot build '" + name
          + "', adding on queue pos." + this.buildQueue.size()+1);
      BuildItem t = new BuildItem();
      t.p = p;
      t.page = page;
      t.item = item;
      t.name = name;
      this.buildQueue.add(t);
      return;
    }
    String fastbuild = i.attr("onclick").trim();
    fastbuild = fastbuild.substring(fastbuild.indexOf("'") + 1,
        fastbuild.lastIndexOf("'"));
    String rslt = "";
    try {
      rslt = Network.excuteHTTPGet(fastbuild);
    } catch (IOException e1) {
      e1.printStackTrace();
    }
    if(rslt.startsWith("<script")||rslt.equals("")){

      System.out.println("Cannot build '" + name
          + "', adding on queue pos." + this.buildQueue.size()+1);
      BuildItem t = new BuildItem();
      t.p = p;
      t.page = page;
      t.item = item;
      t.name = name;
      this.buildQueue.add(t);
      return;
    }
    System.out.println("Building " + name);
  }

  public void buildNextOnQueue() {
    BuildItem t = this.buildQueue.poll();
    if (t != null) {
      tryBuild(t.p, t.page, t.item);
    }

  }

  public void getResources() {
    for (OGamePlanet p : this.planets) {
      getResources(p, true);
    }
  }

  public void getResources(OGamePlanet p, boolean fetchpage) {
    if (fetchpage)
      this.fetchPage("index.php?page=overview&cp=" + p.id);
    String js_u = "";
    Elements scriptElement = this.doc.select("script");
    for (Element s : scriptElement) {
      if (s.html().contains("var session = '")) {
        js_u = s.html();
      }
    }
    if (js_u != "") {
      String s = "var resourceTickerMetal = {";
      int d = js_u.indexOf(s) + s.length();
      int f = js_u.indexOf("};", d);
      String part = js_u.substring(d, f).trim();
      d = part.indexOf(' ');
      f = part.indexOf(',');
      double ava = Double.parseDouble(part.substring(d, f).trim());
      part = part.substring(f + 4).trim();

      d = part.indexOf(',') + 2;
      f = part.indexOf(']', d);
      double max = Double.parseDouble(part.substring(d, f).trim());
      part = part.substring(f + 4).trim();

      d = part.indexOf(' ');
      f = part.indexOf(',', d);
      double prod = Double.parseDouble(part.substring(d, f).trim());

      p.metal_stock = new LimitedStock(ava, prod, max);

      s = "var resourceTickerCrystal = {";
      d = js_u.indexOf(s) + s.length();
      f = js_u.indexOf("};", d);
      part = js_u.substring(d, f).trim();
      d = part.indexOf(' ');
      f = part.indexOf(',');
      ava = Double.parseDouble(part.substring(d, f).trim());
      part = part.substring(f + 4).trim();

      d = part.indexOf(',') + 2;
      f = part.indexOf(']', d);
      max = Double.parseDouble(part.substring(d, f).trim());
      part = part.substring(f + 4).trim();

      d = part.indexOf(' ');
      f = part.indexOf(',', d);
      prod = Double.parseDouble(part.substring(d, f).trim());

      p.cristal_stock = new LimitedStock(ava, prod, max);

      s = "var resourceTickerDeuterium = {";
      d = js_u.indexOf(s) + s.length();
      f = js_u.indexOf("};", d);
      part = js_u.substring(d, f).trim();
      d = part.indexOf(' ');
      f = part.indexOf(',');
      ava = Double.parseDouble(part.substring(d, f).trim());
      part = part.substring(f + 4).trim();

      d = part.indexOf(',') + 2;
      f = part.indexOf(']', d);
      max = Double.parseDouble(part.substring(d, f).trim());
      part = part.substring(f + 4).trim();

      d = part.indexOf(' ');
      f = part.indexOf(',', d);
      prod = Double.parseDouble(part.substring(d, f).trim());

      p.deuterium_stock = new LimitedStock(ava, prod, max);

      s = "getElementByIdWithCache(\"Countdown\"),";
      d = js_u.indexOf(s) + s.length();
      if (d != s.length() - 1) {
        f = js_u.indexOf(",", d);
        part = js_u.substring(d, f).trim();
        p.countDownBuilding = Integer.parseInt(part);
      }else{
        p.countDownBuilding = -1;
      }
     
      p.lastUpdateSeconds = System.currentTimeMillis()/1000;
    }
  }

  /*
   * Dim js As String = jsnode.InnerText Dim js_u As String =
   * Regex.Replace(js, "[\s\r\n]", "") m = Regex.Match(js_u,
   * "Metal={available:([\.\d]+?),limit:\[0,([\d]+?)],production:([\.\d]+?),")
   * If m.Success Then _metal = New stock(m.Groups(1).Value.Replace(".", ","),
   * m.Groups(2).Value.Replace(".", ","), m.Groups(3).Value.Replace(".", ","))
   *
   * m = Regex.Match(js_u,
   * "Crystal={available:([\.\d]+?),limit:\[0,([\d]+?)],production:([\.\d]+?),")
   * If m.Success Then _cristal = New stock(m.Groups(1).Value.Replace(".",
   * ","), m.Groups(2).Value.Replace(".", ","), m.Groups(3).Value.Replace(".",
   * ","))
   *
   * m = Regex.Match(js_u,
   * "Deuterium={available:([\.\d]+?),limit:\[0,([\d]+?)],production:([\.\d]+?),")
   * If m.Success Then _deuterieum = New stock(m.Groups(1).Value.Replace(".",
   * ","), m.Groups(2).Value.Replace(".", ","), m.Groups(3).Value.Replace(".",
   * ","))
   */
  public void updatePlanets() {
    System.out.println("Updating planets..");
    Elements planetsElement = this.doc
        .select("div#myWorlds div.smallplanet");
    OGamePlanet p;
    this.planets.clear();
    for (Element planet : planetsElement) {
      p = new OGamePlanet();

      p.name = (planet.select("span.planet-name").text().trim());
      p.id = planet.select("a").attr("href");
      p.id = p.id.substring(p.id.lastIndexOf('=') + 1);
      this.planets.add(p);
    }
  }
}
TOP

Related Classes of alexoft.OGame.OGame

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.