Advertisement
PayPalMeRSGP

GrandExchangeObserver.java

Mar 8th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.22 KB | None | 0 0
  1. package GrandExchange_Util;
  2.  
  3. import org.osbot.rs07.api.GrandExchange;
  4. import org.osbot.rs07.script.Script;
  5.  
  6. import java.io.PrintWriter;
  7. import java.io.StringWriter;
  8. import java.util.ArrayList;
  9. import java.util.Hashtable;
  10. import java.util.concurrent.Executors;
  11. import java.util.concurrent.ScheduledExecutorService;
  12. import java.util.concurrent.TimeUnit;
  13.  
  14. public class GrandExchangeObserver {
  15.  
  16.     public interface GrandExchangeListener {
  17.         void onGEUpdate(GrandExchangeOffer offer);
  18.     }
  19.  
  20.     private Script hostScriptReference;
  21.  
  22.     private ArrayList<GrandExchangeListener> listeners; //subscribed classes to ge offer changes
  23.     private ArrayList<GrandExchangeOffer> offers; //ongoing ge offers
  24.  
  25.     private ScheduledExecutorService geOfferQueryService;
  26.  
  27.     public GrandExchangeObserver(Script hostScriptReference) {
  28.         this.listeners = new ArrayList<>();
  29.         this.offers = new ArrayList<>();
  30.         this.hostScriptReference = hostScriptReference;
  31.     }
  32.  
  33.     public void addGEListenerForOffer(GrandExchangeListener listener, GrandExchangeOffer offer){
  34.         this.offers.add(offer);
  35.         this.listeners.add(listener);
  36.  
  37.         //if adding an initial listener, start querying ge-offers for changes
  38.         if(listeners.size() == 1){
  39.             continouslyQueryOffers();
  40.         }
  41.     }
  42.  
  43.     public void addGEOffer(GrandExchangeOffer offer){
  44.         this.offers.add(offer);
  45.     }
  46.  
  47.     public void removeGEListenerAndOffer(GrandExchangeListener listener, GrandExchangeOffer offer){
  48.         listeners.remove(listener);
  49.         offers.remove(offer);
  50.  
  51.         //if all listeners detached, stop querying offers
  52.         if(listeners.size() == 0){
  53.             geOfferQueryService.shutdown();
  54.         }
  55.     }
  56.  
  57.     public void removeGEOffer(GrandExchangeOffer offer){
  58.         offers.remove(offer);
  59.     }
  60.  
  61.     public void stopQueryingOffers(){
  62.         this.geOfferQueryService.shutdown();
  63.     }
  64.  
  65.     private void continouslyQueryOffers(){
  66.         GrandExchange ge = hostScriptReference.getGrandExchange();
  67.         hostScriptReference.log("starting querier");
  68.         //schedule a thread to query ge offers every second. if a ge offer updates, the listening class that added the geOffer is notified
  69.         this.geOfferQueryService = Executors.newScheduledThreadPool(0);
  70.         Runnable queryRunable = () -> {
  71.             hostScriptReference.log("Offer listener is running");
  72.             ArrayList<GrandExchangeOffer> offersToRemove = new ArrayList<>();
  73.             for(GrandExchangeOffer offer: offers){
  74.                 GrandExchange.Box box = offer.getSelectedBox();
  75.                 if(box != null){
  76.                     int amountTraded = ge.getAmountTraded(box);
  77.                     boolean offerUpdated = offer.updateOffer(amountTraded);
  78.                     if(offerUpdated || offer.isOfferFinished()){
  79.                         notifyGEUpdate(offer);
  80.                     }
  81.                 }
  82.             }
  83.  
  84.         };
  85.         geOfferQueryService.scheduleAtFixedRate(queryRunable, 2, 2, TimeUnit.SECONDS);
  86.     }
  87.  
  88.     private void notifyGEUpdate(GrandExchangeOffer offer){
  89.         for(GrandExchangeListener listener: listeners){
  90.             listener.onGEUpdate(offer);
  91.         }
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement