X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=src%2Fcom%2Ftedpearson%2Fypp%2Fmarket%2FMarketUploader.java;h=6cf889a660f9d0aef519c02786f832cc560dfe82;hb=fdf8031c1556b47f0e3e4cefb9f49b1ea247f32b;hp=a7a90c8c1489d0dfcfaf3f381226c7d866ad2725;hpb=ba378a6dd2f4cf83c4d1b0781fab380259ff1a16;p=jarrg-ian.git diff --git a/src/com/tedpearson/ypp/market/MarketUploader.java b/src/com/tedpearson/ypp/market/MarketUploader.java index a7a90c8..6cf889a 100644 --- a/src/com/tedpearson/ypp/market/MarketUploader.java +++ b/src/com/tedpearson/ypp/market/MarketUploader.java @@ -76,7 +76,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis int index = text.indexOf(":"); String name = text.substring(0,index); islandName = name; - //System.out.println(islandName); + // if (dtxt!=null) dtxt.println(islandName); sidePanel.removePropertyChangeListener(this); latch.countDown(); } @@ -92,8 +92,9 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis } private void progresslog(String s) { + if (dtxt == null) return; long now = new Date().getTime(); - System.out.println("progress "+(now - startTime)+"ms "+s); + dtxt.println("progress "+(now - startTime)+"ms "+s); } private void progressNote(ProgressMonitor pm, String s) { @@ -395,7 +396,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis html = m.replaceAll(" "); } String whole_msg = "

Error

"+msg+"

PCTB Server said:

"+html+"
"; - System.err.println("###" + whole_msg + "###"); + if (dtxt!=null) dtxt.println("###" + whole_msg + "###"); JOptionPane.showMessageDialog(frame,whole_msg,"Error",JOptionPane.ERROR_MESSAGE); } @@ -408,19 +409,31 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis * * @exception Exception if an error we didn't expect occured */ + private class YarrgTimestampFetcher extends Thread { + public String ts = null; + public void run() { + try { + ts = getYarrgTimestamp(); + progresslog("(async) yarrg timestamp ready."); + } catch(Exception e) { + error("Error getting YARRG timestamp: "+e); + } + } + }; + private void runUpload() throws Exception { progresslog("starting"); - String yarrgts = ""; ProgressMonitor pm = new ProgressMonitor(frame,"Processing Market Data","Getting table data",0,100); pm.setMillisToDecideToPopup(0); pm.setMillisToPopup(0); boolean doneyarrg = false, donepctb = false; + YarrgTimestampFetcher yarrgts_thread = null; if (uploadToYarrg) { - progresslog("yarrg timestamp..."); - yarrgts = getYarrgTimestamp(); - progresslog("yarrg timestamp done."); + progresslog("(async) yarrg timestamp..."); + yarrgts_thread = new YarrgTimestampFetcher(); + yarrgts_thread.start(); } AccessibleTable accesstable = findMarketTable(); @@ -437,7 +450,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis return; } - progresslog("getisland..."); + progresslog("(async) getisland..."); getIsland(); progresslog("getocean..."); getOcean(); @@ -446,6 +459,15 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis if (latch != null) { latch.await(2, java.util.concurrent.TimeUnit.SECONDS); } + progresslog("(async) getisland done"); + + String yarrgts = null; + if (yarrgts_thread != null) { + progresslog("(async) yarrg timestamp join..."); + yarrgts_thread.join(); + progresslog("(async) yarrg timestamp joined."); + yarrgts = yarrgts_thread.ts; + } if (islandName == null) { error("Could not find island name in YPP user interface."); @@ -532,14 +554,16 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis } // get commod map + progresslog("pctb commodmap..."); HashMap commodMap = getCommodMap(); if(commodMap == null) { return; } + progresslog("pctb commodmap done."); int[] offerCount = getBuySellMaps(data,buys,sells,stallMap,commodMap); //println(buys.toString()); - //System.out.println(sells); - //System.out.println("\n\n\n"+buys); + // if (dtxt!=null) dtxt.println(sells); + // if (dtxt!=null) dtxt.println("\n\n\n"+buys); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); pm.setProgress(60); @@ -556,7 +580,15 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis writeBuySellOffers(buys,sells,offerCount,out); out.finish(); progresslog("pctb send..."); - InputStream in = sendInitialData(new ByteArrayInputStream(outStream.toByteArray())); + + byte[] ba = outStream.toByteArray(); + if (dtxt!=null) { + FileOutputStream dbgdata = new FileOutputStream(new File("jarrg-debug-pctb-marketdata.gz")); + dbgdata.write(ba); + dbgdata.close(); + } + + InputStream in = sendInitialData(new ByteArrayInputStream(ba)); progresslog("pctb sent."); if (in == null) return; pm.setProgress(80); @@ -606,13 +638,13 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis Accessible node1 = window; Accessible node = descendNodes(node1,new int[] {0,1,0,0,0,0,1,0,0,1,0,0}); // commod market // commod market: {0,1,0,0,0,0,1,0,0,1,0} {0,1,0,0,0,0,1,0,1,0,0,1,0,0}) - //System.out.println(node); + // if (dtxt!=null) dtxt.println(node); if (!(node instanceof JTable)) { node = descendNodes(node1,new int[] {0,1,0,0,0,0,1,0,1,0,0,1,0,0}); // commod market } if (!(node instanceof JTable)) return null; AccessibleTable table = node.getAccessibleContext().getAccessibleTable(); - //System.out.println(table); + // if (dtxt!=null) dtxt.println(table); return table; } @@ -629,7 +661,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis private Accessible descendNodes(Accessible parent, int[] path) { for(int i=0;iPreferences. - *

- * Potential issues: When more commodities are added to the server, this - * program will currently break unless the user deletes the preferences - * file or we give them a new release with a slighly different storage - * location for the data. * * @return a map where the key is the commodity and the value is the commodity id. */ @@ -701,7 +726,6 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis return commodMap; } HashMap map = new HashMap(); - Preferences prefs = Preferences.userNodeForPackage(getClass()); String xml; try { URL host = new URL(PCTB_HOST_URL + "commodmap.php"); @@ -721,7 +745,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis // dtxt.println(xml); // dtxt.println("<<"); //} - //System.out.println(xml); + // if (dtxt!=null) dtxt.println(xml); Reader reader = new CharArrayReader(xml.toCharArray()); Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(reader)); NodeList maps = d.getElementsByTagName("CommodMap"); @@ -791,7 +815,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis buySellCount[1]++; } } catch(IllegalArgumentException e) { - System.err.println("Error: Unsupported Commodity \"" + offer.get(0) + "\""); + if (dtxt!=null) dtxt.println("Error: Unsupported Commodity \"" + offer.get(0) + "\""); } } if (buySellCount[0]==0 && buySellCount[1]==0) { @@ -961,7 +985,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis */ private boolean finishUpload(InputStream in) throws IOException { String html = readstreamstring(in); - //System.out.println(html); + // if (dtxt!=null) dtxt.println(html); Matcher m; Pattern params = Pattern.compile("(?s).+?.+?"); @@ -996,7 +1020,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis Pattern done = Pattern.compile("Your data has been integrated into the database. Thank you!"); m = done.matcher(complete); if(m.find()) { - System.out.println("FILE upload successful!!!"); + if (dtxt!=null) dtxt.println("FILE upload successful!!!"); return true; } else { error_html("Something was wrong with the final upload parameters!", complete); @@ -1043,16 +1067,17 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis http.setParameter("data", "deduped.tsv.gz", file, "application/octet-stream"); InputStream in = post_for_yarrg(http); if (in == null) return false; - BufferedReader br = new BufferedReader(new InputStreamReader(in)); - String yarrgresult; - while((yarrgresult = br.readLine()) != null) { - System.out.println(yarrgresult); + String output = readstreamstring(in); + if (!output.startsWith("OK")) { + error("

Unexpected output from YARRG server

\n" + output); + return false; } + if (dtxt!=null) dtxt.println(output); return true; } private int calculateArbitrageCommodity(ArrayList> arb_bs) { - //System.out.println("ARBITRAGE?"); + // if (dtxt!=null) dtxt.println("ARBITRAGE?"); int profit = 0; SortedSet buys = arb_bs.get(0); SortedSet sells = arb_bs.get(1); @@ -1068,7 +1093,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis int unitprofit = buy[0] - sell[0]; int count = buy[1] < sell[1] ? buy[1] : sell[1]; - //System.out.println(" sell @"+sell[0]+" x"+sell[1]+" buy @"+buy[0]+" x"+buy[1] + // if (dtxt!=null) dtxt.println(" sell @"+sell[0]+" x"+sell[1]+" buy @"+buy[0]+" x"+buy[1] // +" => x"+count+" @"+unitprofit); if (unitprofit <= 0) @@ -1080,7 +1105,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis if (buy[1]==0) buys.remove(buy); if (sell[1]==0) sells.remove(sell); } - //System.out.println(" PROFIT "+profit); + // if (dtxt!=null) dtxt.println(" PROFIT "+profit); return profit; } @@ -1101,15 +1126,15 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis for (ArrayList row : data) { String thiscommod = row.get(0); - //System.out.println("ROW "+row.toString()); + // if (dtxt!=null) dtxt.println("ROW "+row.toString()); if (lastcommod == null || !thiscommod.equals(lastcommod)) { if (lastcommod != null) arbitrage += calculateArbitrageCommodity(arb_bs); - //System.out.println("ROW rdy"); + // if (dtxt!=null) dtxt.println("ROW rdy"); arb_bs = new ArrayList>(2); arb_bs.add(0, new TreeSet(compar)); arb_bs.add(1, new TreeSet(compar)); - //System.out.println("ROW init"); + // if (dtxt!=null) dtxt.println("ROW init"); lastcommod = thiscommod; } for (int bs = 0; bs < 2; bs++) { @@ -1117,7 +1142,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis if (pricestr == null) continue; int[] entry = new int[2]; - //System.out.println("ROW BS "+bs); + // if (dtxt!=null) dtxt.println("ROW BS "+bs); entry[0] = parseQty(pricestr); entry[1] = parseQty(row.get(bs*2 + 3)); arb_bs.get(bs).add(entry);