X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=jarrg-ian.git;a=blobdiff_plain;f=src%2Fcom%2Ftedpearson%2Fypp%2Fmarket%2FMarketUploader.java;h=f91de7aedd25e93cbadbb3df782e46bfee03f0f6;hp=9aa8f046301e1480e90aaf7ef2c56f61f4958aa5;hb=9ad21c9f459da2539c8b537af8e8bfb32b22f89d;hpb=27386c58e010ef63c7eb48172cc9f908225d24a9 diff --git a/src/com/tedpearson/ypp/market/MarketUploader.java b/src/com/tedpearson/ypp/market/MarketUploader.java index 9aa8f04..f91de7a 100644 --- a/src/com/tedpearson/ypp/market/MarketUploader.java +++ b/src/com/tedpearson/ypp/market/MarketUploader.java @@ -39,6 +39,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis private Window window = null; private JButton findMarket = null; private JLabel resultSummary = null; + private JLabel arbitrageResult = null; private final static String PCTB_LIVE_HOST_URL = "http://pctb.crabdance.com/"; private final static String PCTB_TEST_HOST_URL = "http://pctb.ilk.org/"; @@ -55,6 +56,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis private boolean uploadToYarrg; private boolean uploadToPCTB; + private boolean showArbitrage; private String islandName = null; private String oceanName = null; @@ -86,6 +88,15 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis return Integer.parseInt(str); } } + + private void progressNote(ProgressMonitor pm, String s) { + String arb = null; + if (arbitrageResult != null) + arb = arbitrageResult.getText(); + if (arb != null && arb.length() != 0) + s = "" + arb + "
" + s; + pm.setNote(s); + } /** * An abstract market offer, entailing a commodity being bought or sold by @@ -229,6 +240,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis uploadToYarrg=prefs.getBoolean("uploadToYarrg", true); uploadToPCTB=prefs.getBoolean("uploadToPCTB", true); + showArbitrage=prefs.getBoolean("showArbitrage", true); EventQueueMonitor.addTopLevelWindowListener(this); if (EventQueueMonitor.isGUIInitialized()) { @@ -248,9 +260,10 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis if (window.getAccessibleContext().getAccessibleName().equals("Puzzle Pirates")) frame.setVisible(true); return; } - frame = new JFrame("MarketUploader"); + frame = new JFrame("Jarrg Uploader"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); - frame.getContentPane().setLayout(new GridLayout(2,1)); + GridLayout layout = new GridLayout(2,1); + frame.getContentPane().setLayout(layout); //frame.setPreferredSize(new Dimension(200, 60)); findMarket = new JButton("Upload Market Data"); @@ -260,6 +273,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis new Thread() { public void run() { resultSummary.setText(""); + arbitrageResult.setText(""); try { runPCTB(); } catch(Exception e) { @@ -283,6 +297,13 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis resultSummary = new JLabel("ready"); frame.add(resultSummary); + arbitrageResult = new JLabel(""); + + if (showArbitrage) { + layout.setRows(layout.getRows() + 1); + frame.add(arbitrageResult); + } + frame.pack(); } @@ -427,12 +448,12 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis ArrayList> data = getData(accesstable); - if (false) { + if (showArbitrage) { calculateArbitrage(data); } if (uploadToYarrg && yarrgts != null) { - pm.setNote("Yarrg: Preparing data"); + progressNote(pm, "Yarrg: Preparing data"); pm.setProgress(10); StringBuilder yarrgsb = new StringBuilder(); @@ -452,7 +473,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis yarrgdata = yarrgsb.toString(); - pm.setNote("Yarrg: Uploading"); + progressNote(pm, "Yarrg: Uploading"); if (islandName != null) { doneyarrg = runYarrg(yarrgts, oceanName, islandName, yarrgdata); @@ -462,7 +483,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis } if (uploadToPCTB) { - pm.setNote("PCTB: Getting stall names"); + progressNote(pm, "PCTB: Getting stall names"); pm.setProgress(20); if(pm.isCanceled()) { return; @@ -471,7 +492,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis TreeSet sells = new TreeSet(); LinkedHashMap stallMap = getStallMap(data); pm.setProgress(40); - pm.setNote("PCTB: Sorting offers"); + progressNote(pm, "PCTB: Sorting offers"); if(pm.isCanceled()) { return; } @@ -488,7 +509,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis ByteArrayOutputStream outStream = new ByteArrayOutputStream(); pm.setProgress(60); - pm.setNote("PCTB: Sending data"); + progressNote(pm, "PCTB: Sending data"); if(pm.isCanceled()) { return; } @@ -506,7 +527,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis if(pm.isCanceled()) { return; } - pm.setNote("PCTB: Waiting ..."); + progressNote(pm, "PCTB: Waiting ..."); donepctb = finishUpload(in); } pm.setProgress(100); @@ -985,26 +1006,35 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis } private int calculateArbitrageCommodity(ArrayList> arb_bs) { - System.out.println("ARBITRAGE?"); + //System.out.println("ARBITRAGE?"); int profit = 0; SortedSet buys = arb_bs.get(0); SortedSet sells = arb_bs.get(1); while (true) { int[] buy, sell; try { - buy = buys.first(); + // NB "sell" means they sell, ie we buy sell = sells.last(); + buy = buys.first(); } catch (NoSuchElementException e) { break; } + + int unitprofit = buy[0] - sell[0]; int count = buy[1] < sell[1] ? buy[1] : sell[1]; - System.out.println(" buy @"+buy[0]+" x"+buy[1]+" sell @"+sell[0]+" x"+sell[1]+" => x"+count); - profit += count * (buy[0] - sell[0]); + //System.out.println(" sell @"+sell[0]+" x"+sell[1]+" buy @"+buy[0]+" x"+buy[1] + // +" => x"+count+" @"+unitprofit); + + if (unitprofit <= 0) + break; + + profit += count * unitprofit; buy[1] -= count; sell[1] -= count; if (buy[1]==0) buys.remove(buy); - if (sell[1]==0) buys.remove(sell); + if (sell[1]==0) sells.remove(sell); } + //System.out.println(" PROFIT "+profit); return profit; } @@ -1016,8 +1046,8 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis } } - private @SuppressWarnings("unchecked") void calculateArbitrage(ArrayList> data) - { + private @SuppressWarnings("unchecked") + void calculateArbitrage(ArrayList> data) { int arbitrage = 0; ArrayList> arb_bs = null; String lastcommod = null; @@ -1025,7 +1055,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis for (ArrayList row : data) { String thiscommod = row.get(0); - System.out.println("ROW "+row.toString()); + //System.out.println("ROW "+row.toString()); if (lastcommod == null || !thiscommod.equals(lastcommod)) { if (lastcommod != null) arbitrage += calculateArbitrageCommodity(arb_bs); @@ -1033,7 +1063,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis arb_bs = new ArrayList>(2); arb_bs.add(0, new TreeSet(compar)); arb_bs.add(1, new TreeSet(compar)); - System.out.println("ROW init"); + //System.out.println("ROW init"); lastcommod = thiscommod; } for (int bs = 0; bs < 2; bs++) { @@ -1048,6 +1078,11 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis } } arbitrage += calculateArbitrageCommodity(arb_bs); + if (arbitrage != 0) { + arbitrageResult.setText("arbitrage: "+arbitrage+" poe"); + } else { + arbitrageResult.setText("no arbitrage"); + } } }