/* */ package NET.worlds.network; /* */ /* */ import NET.worlds.console.Gamma; /* */ import NET.worlds.console.Main; /* */ import NET.worlds.console.MainCallback; /* */ import NET.worlds.console.MainTerminalCallback; /* */ import NET.worlds.core.IniFile; /* */ import NET.worlds.core.Std; /* */ import java.io.File; /* */ import java.io.FileOutputStream; /* */ import java.io.IOException; /* */ import java.io.InputStream; /* */ import java.io.ObjectOutputStream; /* */ import java.io.PrintStream; /* */ import java.io.Serializable; /* */ import java.util.Collection; /* */ import java.util.Date; /* */ import java.util.Enumeration; /* */ import java.util.Hashtable; /* */ import java.util.Iterator; /* */ import java.util.Vector; /* */ import java.util.zip.ZipEntry; /* */ import java.util.zip.ZipFile; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public class Cache /* */ implements MainCallback, MainTerminalCallback, Serializable /* */ { /* */ private static final long serialVersionUID = -7557149391688293661L; /* */ private static final long CACHE_VERSION = 0L; /* 56 */ private static String CACHE_DIR = Gamma.earlyURLUnalias("home:cachedir/") /* 57 */ .replace('/', '\\'); /* */ /* */ /* */ /* */ /* */ /* 63 */ static final int CACHE_MIN_CHANGE = IniFile.gamma().getIniInt("NetCacheMinChange", 50); /* */ /* */ /* 66 */ static final long CACHE_MAX_DELAY = IniFile.gamma().getIniInt("NetCacheMaxDelay", 5) * 1000L * 60L; /* 67 */ private Date lastCacheSave = new Date(); /* */ /* */ /* 70 */ static transient Cache cache = initLoad(); /* */ /* 72 */ private transient Hashtable table = new Hashtable(); /* */ /* */ /* */ /* 76 */ private transient CacheEntry terminator = new CacheEntry(); /* */ /* */ transient long totalBytes; /* */ /* */ transient int hasChanged; /* */ /* 82 */ private int nextAvailable = 1; /* */ /* */ public static void ClearCustomAvatars() /* */ { /* 86 */ Collection c = cache.table.values(); /* */ /* 88 */ Iterator it = c.iterator(); /* */ /* 90 */ Vector tmp = new Vector(); /* */ /* 92 */ while (it.hasNext()) /* */ { /* 94 */ CacheEntry ce = (CacheEntry)it.next(); /* 95 */ if ((ce != null) && (ce.url.toString().contains("custom"))) /* */ { /* 97 */ tmp.add(ce); /* */ } /* */ } /* */ /* 101 */ for (int i = 0; i < tmp.size(); i++) { /* 102 */ removeEntry((CacheEntry)tmp.get(i)); /* */ } /* */ } /* */ /* */ /* Error */ /* */ static Cache initLoad() /* */ { /* */ // Byte code: /* */ // 0: getstatic 163 java/lang/System:out Ljava/io/PrintStream; /* */ // 3: ldc -87 /* */ // 5: invokevirtual 171 java/io/PrintStream:println (Ljava/lang/String;)V /* */ // 8: new 1 NET/worlds/network/Cache /* */ // 11: dup /* */ // 12: invokespecial 177 NET/worlds/network/Cache: ()V /* */ // 15: astore_0 /* */ // 16: aconst_null /* */ // 17: astore_1 /* */ // 18: aconst_null /* */ // 19: astore_2 /* */ // 20: getstatic 163 java/lang/System:out Ljava/io/PrintStream; /* */ // 23: ldc -78 /* */ // 25: invokevirtual 171 java/io/PrintStream:println (Ljava/lang/String;)V /* */ // 28: new 180 java/io/File /* */ // 31: dup /* */ // 32: new 182 java/lang/StringBuilder /* */ // 35: dup /* */ // 36: getstatic 54 NET/worlds/network/Cache:CACHE_DIR Ljava/lang/String; /* */ // 39: invokestatic 184 java/lang/String:valueOf (Ljava/lang/Object;)Ljava/lang/String; /* */ // 42: invokespecial 188 java/lang/StringBuilder: (Ljava/lang/String;)V /* */ // 45: ldc -66 /* */ // 47: invokevirtual 192 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder; /* */ // 50: invokevirtual 196 java/lang/StringBuilder:toString ()Ljava/lang/String; /* */ // 53: invokespecial 197 java/io/File: (Ljava/lang/String;)V /* */ // 56: astore_3 /* */ // 57: aload_3 /* */ // 58: invokevirtual 198 java/io/File:exists ()Z /* */ // 61: ifne +68 -> 129 /* */ // 64: new 180 java/io/File /* */ // 67: dup /* */ // 68: new 182 java/lang/StringBuilder /* */ // 71: dup /* */ // 72: getstatic 54 NET/worlds/network/Cache:CACHE_DIR Ljava/lang/String; /* */ // 75: invokestatic 184 java/lang/String:valueOf (Ljava/lang/Object;)Ljava/lang/String; /* */ // 78: invokespecial 188 java/lang/StringBuilder: (Ljava/lang/String;)V /* */ // 81: ldc -55 /* */ // 83: invokevirtual 192 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder; /* */ // 86: invokevirtual 196 java/lang/StringBuilder:toString ()Ljava/lang/String; /* */ // 89: invokespecial 197 java/io/File: (Ljava/lang/String;)V /* */ // 92: astore_3 /* */ // 93: aload_3 /* */ // 94: invokevirtual 198 java/io/File:exists ()Z /* */ // 97: ifne +32 -> 129 /* */ // 100: new 180 java/io/File /* */ // 103: dup /* */ // 104: new 182 java/lang/StringBuilder /* */ // 107: dup /* */ // 108: getstatic 54 NET/worlds/network/Cache:CACHE_DIR Ljava/lang/String; /* */ // 111: invokestatic 184 java/lang/String:valueOf (Ljava/lang/Object;)Ljava/lang/String; /* */ // 114: invokespecial 188 java/lang/StringBuilder: (Ljava/lang/String;)V /* */ // 117: ldc -53 /* */ // 119: invokevirtual 192 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder; /* */ // 122: invokevirtual 196 java/lang/StringBuilder:toString ()Ljava/lang/String; /* */ // 125: invokespecial 197 java/io/File: (Ljava/lang/String;)V /* */ // 128: astore_3 /* */ // 129: new 205 java/io/FileInputStream /* */ // 132: dup /* */ // 133: aload_3 /* */ // 134: invokespecial 207 java/io/FileInputStream: (Ljava/io/File;)V /* */ // 137: astore_1 /* */ // 138: new 210 java/io/ObjectInputStream /* */ // 141: dup /* */ // 142: aload_1 /* */ // 143: invokespecial 212 java/io/ObjectInputStream: (Ljava/io/InputStream;)V /* */ // 146: astore_2 /* */ // 147: aload_2 /* */ // 148: invokevirtual 215 java/io/ObjectInputStream:readLong ()J /* */ // 151: lstore 4 /* */ // 153: lload 4 /* */ // 155: lconst_0 /* */ // 156: lcmp /* */ // 157: ifeq +13 -> 170 /* */ // 160: new 219 java/lang/Exception /* */ // 163: dup /* */ // 164: ldc -35 /* */ // 166: invokespecial 223 java/lang/Exception: (Ljava/lang/String;)V /* */ // 169: athrow /* */ // 170: aload_2 /* */ // 171: invokevirtual 224 java/io/ObjectInputStream:readObject ()Ljava/lang/Object; /* */ // 174: checkcast 1 NET/worlds/network/Cache /* */ // 177: astore_0 /* */ // 178: aload_0 /* */ // 179: new 112 NET/worlds/network/CacheEntry /* */ // 182: dup /* */ // 183: invokespecial 227 NET/worlds/network/CacheEntry: ()V /* */ // 186: putfield 228 NET/worlds/network/Cache:terminator LNET/worlds/network/CacheEntry; /* */ // 189: aload_0 /* */ // 190: new 90 java/util/Hashtable /* */ // 193: dup /* */ // 194: invokespecial 230 java/util/Hashtable: ()V /* */ // 197: putfield 87 NET/worlds/network/Cache:table Ljava/util/Hashtable; /* */ // 200: goto +55 -> 255 /* */ // 203: aload 6 /* */ // 205: instanceof 112 /* */ // 208: ifeq +57 -> 265 /* */ // 211: aload 6 /* */ // 213: checkcast 112 NET/worlds/network/CacheEntry /* */ // 216: getfield 114 NET/worlds/network/CacheEntry:url LNET/worlds/network/URL; /* */ // 219: ifnull +36 -> 255 /* */ // 222: aload 6 /* */ // 224: checkcast 112 NET/worlds/network/CacheEntry /* */ // 227: getfield 231 NET/worlds/network/CacheEntry:localName Ljava/lang/String; /* */ // 230: ifnull +25 -> 255 /* */ // 233: aload 6 /* */ // 235: checkcast 112 NET/worlds/network/CacheEntry /* */ // 238: getfield 234 NET/worlds/network/CacheEntry:state I /* */ // 241: bipush 7 /* */ // 243: if_icmplt +12 -> 255 /* */ // 246: aload_0 /* */ // 247: aload 6 /* */ // 249: checkcast 112 NET/worlds/network/CacheEntry /* */ // 252: invokevirtual 237 NET/worlds/network/Cache:add (LNET/worlds/network/CacheEntry;)V /* */ // 255: aload_2 /* */ // 256: invokevirtual 224 java/io/ObjectInputStream:readObject ()Ljava/lang/Object; /* */ // 259: dup /* */ // 260: astore 6 /* */ // 262: ifnonnull -59 -> 203 /* */ // 265: aload_2 /* */ // 266: invokevirtual 239 java/io/ObjectInputStream:close ()V /* */ // 269: aconst_null /* */ // 270: astore_2 /* */ // 271: aload_1 /* */ // 272: invokevirtual 242 java/io/FileInputStream:close ()V /* */ // 275: aconst_null /* */ // 276: astore_1 /* */ // 277: getstatic 163 java/lang/System:out Ljava/io/PrintStream; /* */ // 280: ldc -13 /* */ // 282: invokevirtual 171 java/io/PrintStream:println (Ljava/lang/String;)V /* */ // 285: goto +163 -> 448 /* */ // 288: astore_3 /* */ // 289: aload_2 /* */ // 290: ifnull +14 -> 304 /* */ // 293: aload_2 /* */ // 294: invokevirtual 239 java/io/ObjectInputStream:close ()V /* */ // 297: goto +5 -> 302 /* */ // 300: astore 8 /* */ // 302: aconst_null /* */ // 303: astore_2 /* */ // 304: aload_1 /* */ // 305: ifnull +173 -> 478 /* */ // 308: aload_1 /* */ // 309: invokevirtual 242 java/io/FileInputStream:close ()V /* */ // 312: goto +5 -> 317 /* */ // 315: astore 8 /* */ // 317: aconst_null /* */ // 318: astore_1 /* */ // 319: goto +159 -> 478 /* */ // 322: astore_3 /* */ // 323: getstatic 163 java/lang/System:out Ljava/io/PrintStream; /* */ // 326: aload_3 /* */ // 327: invokevirtual 245 java/io/PrintStream:println (Ljava/lang/Object;)V /* */ // 330: getstatic 163 java/lang/System:out Ljava/io/PrintStream; /* */ // 333: ldc -8 /* */ // 335: invokevirtual 171 java/io/PrintStream:println (Ljava/lang/String;)V /* */ // 338: new 180 java/io/File /* */ // 341: dup /* */ // 342: new 182 java/lang/StringBuilder /* */ // 345: dup /* */ // 346: getstatic 54 NET/worlds/network/Cache:CACHE_DIR Ljava/lang/String; /* */ // 349: invokestatic 184 java/lang/String:valueOf (Ljava/lang/Object;)Ljava/lang/String; /* */ // 352: invokespecial 188 java/lang/StringBuilder: (Ljava/lang/String;)V /* */ // 355: ldc -66 /* */ // 357: invokevirtual 192 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder; /* */ // 360: invokevirtual 196 java/lang/StringBuilder:toString ()Ljava/lang/String; /* */ // 363: invokespecial 197 java/io/File: (Ljava/lang/String;)V /* */ // 366: astore 4 /* */ // 368: aload 4 /* */ // 370: invokevirtual 250 java/io/File:mkdirs ()Z /* */ // 373: pop /* */ // 374: aload 4 /* */ // 376: invokevirtual 253 java/io/File:delete ()Z /* */ // 379: pop /* */ // 380: aload_2 /* */ // 381: ifnull +14 -> 395 /* */ // 384: aload_2 /* */ // 385: invokevirtual 239 java/io/ObjectInputStream:close ()V /* */ // 388: goto +5 -> 393 /* */ // 391: astore 8 /* */ // 393: aconst_null /* */ // 394: astore_2 /* */ // 395: aload_1 /* */ // 396: ifnull +82 -> 478 /* */ // 399: aload_1 /* */ // 400: invokevirtual 242 java/io/FileInputStream:close ()V /* */ // 403: goto +5 -> 408 /* */ // 406: astore 8 /* */ // 408: aconst_null /* */ // 409: astore_1 /* */ // 410: goto +68 -> 478 /* */ // 413: astore 7 /* */ // 415: aload_2 /* */ // 416: ifnull +14 -> 430 /* */ // 419: aload_2 /* */ // 420: invokevirtual 239 java/io/ObjectInputStream:close ()V /* */ // 423: goto +5 -> 428 /* */ // 426: astore 8 /* */ // 428: aconst_null /* */ // 429: astore_2 /* */ // 430: aload_1 /* */ // 431: ifnull +14 -> 445 /* */ // 434: aload_1 /* */ // 435: invokevirtual 242 java/io/FileInputStream:close ()V /* */ // 438: goto +5 -> 443 /* */ // 441: astore 8 /* */ // 443: aconst_null /* */ // 444: astore_1 /* */ // 445: aload 7 /* */ // 447: athrow /* */ // 448: aload_2 /* */ // 449: ifnull +14 -> 463 /* */ // 452: aload_2 /* */ // 453: invokevirtual 239 java/io/ObjectInputStream:close ()V /* */ // 456: goto +5 -> 461 /* */ // 459: astore 8 /* */ // 461: aconst_null /* */ // 462: astore_2 /* */ // 463: aload_1 /* */ // 464: ifnull +14 -> 478 /* */ // 467: aload_1 /* */ // 468: invokevirtual 242 java/io/FileInputStream:close ()V /* */ // 471: goto +5 -> 476 /* */ // 474: astore 8 /* */ // 476: aconst_null /* */ // 477: astore_1 /* */ // 478: new 180 java/io/File /* */ // 481: dup /* */ // 482: getstatic 54 NET/worlds/network/Cache:CACHE_DIR Ljava/lang/String; /* */ // 485: invokespecial 197 java/io/File: (Ljava/lang/String;)V /* */ // 488: invokevirtual 256 java/io/File:list ()[Ljava/lang/String; /* */ // 491: astore_3 /* */ // 492: new 90 java/util/Hashtable /* */ // 495: dup /* */ // 496: invokespecial 230 java/util/Hashtable: ()V /* */ // 499: astore 4 /* */ // 501: aload_3 /* */ // 502: ifnull +84 -> 586 /* */ // 505: iconst_0 /* */ // 506: istore 5 /* */ // 508: goto +41 -> 549 /* */ // 511: aload 4 /* */ // 513: new 182 java/lang/StringBuilder /* */ // 516: dup /* */ // 517: getstatic 54 NET/worlds/network/Cache:CACHE_DIR Ljava/lang/String; /* */ // 520: invokestatic 184 java/lang/String:valueOf (Ljava/lang/Object;)Ljava/lang/String; /* */ // 523: invokespecial 188 java/lang/StringBuilder: (Ljava/lang/String;)V /* */ // 526: aload_3 /* */ // 527: iload 5 /* */ // 529: aaload /* */ // 530: invokevirtual 192 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder; /* */ // 533: invokevirtual 196 java/lang/StringBuilder:toString ()Ljava/lang/String; /* */ // 536: invokevirtual 260 java/lang/String:toUpperCase ()Ljava/lang/String; /* */ // 539: ldc_w 263 /* */ // 542: invokevirtual 265 java/util/Hashtable:put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; /* */ // 545: pop /* */ // 546: iinc 5 1 /* */ // 549: iload 5 /* */ // 551: aload_3 /* */ // 552: arraylength /* */ // 553: if_icmplt -42 -> 511 /* */ // 556: aload 4 /* */ // 558: new 182 java/lang/StringBuilder /* */ // 561: dup /* */ // 562: getstatic 54 NET/worlds/network/Cache:CACHE_DIR Ljava/lang/String; /* */ // 565: invokestatic 184 java/lang/String:valueOf (Ljava/lang/Object;)Ljava/lang/String; /* */ // 568: invokespecial 188 java/lang/StringBuilder: (Ljava/lang/String;)V /* */ // 571: ldc -66 /* */ // 573: invokevirtual 192 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder; /* */ // 576: invokevirtual 196 java/lang/StringBuilder:toString ()Ljava/lang/String; /* */ // 579: invokevirtual 260 java/lang/String:toUpperCase ()Ljava/lang/String; /* */ // 582: invokevirtual 269 java/util/Hashtable:remove (Ljava/lang/Object;)Ljava/lang/Object; /* */ // 585: pop /* */ // 586: aload_0 /* */ // 587: lconst_0 /* */ // 588: putfield 273 NET/worlds/network/Cache:totalBytes J /* */ // 591: aload_0 /* */ // 592: iconst_0 /* */ // 593: putfield 275 NET/worlds/network/Cache:hasChanged I /* */ // 596: aload_0 /* */ // 597: getfield 228 NET/worlds/network/Cache:terminator LNET/worlds/network/CacheEntry; /* */ // 600: getfield 277 NET/worlds/network/CacheEntry:next LNET/worlds/network/CacheEntry; /* */ // 603: astore 5 /* */ // 605: goto +101 -> 706 /* */ // 608: aload 5 /* */ // 610: astore 6 /* */ // 612: aload 5 /* */ // 614: getfield 277 NET/worlds/network/CacheEntry:next LNET/worlds/network/CacheEntry; /* */ // 617: astore 5 /* */ // 619: aload 6 /* */ // 621: getfield 231 NET/worlds/network/CacheEntry:localName Ljava/lang/String; /* */ // 624: invokevirtual 260 java/lang/String:toUpperCase ()Ljava/lang/String; /* */ // 627: astore 7 /* */ // 629: aload 4 /* */ // 631: aload 7 /* */ // 633: invokevirtual 279 java/util/Hashtable:get (Ljava/lang/Object;)Ljava/lang/Object; /* */ // 636: ifnull +7 -> 643 /* */ // 639: iconst_1 /* */ // 640: goto +4 -> 644 /* */ // 643: iconst_0 /* */ // 644: istore 8 /* */ // 646: aload 4 /* */ // 648: aload 7 /* */ // 650: invokevirtual 269 java/util/Hashtable:remove (Ljava/lang/Object;)Ljava/lang/Object; /* */ // 653: pop /* */ // 654: aload_0 /* */ // 655: dup /* */ // 656: getfield 273 NET/worlds/network/Cache:totalBytes J /* */ // 659: aload 6 /* */ // 661: getfield 281 NET/worlds/network/CacheEntry:bytes I /* */ // 664: i2l /* */ // 665: ladd /* */ // 666: putfield 273 NET/worlds/network/Cache:totalBytes J /* */ // 669: aload 6 /* */ // 671: invokevirtual 284 NET/worlds/network/CacheEntry:done ()Z /* */ // 674: ifeq +8 -> 682 /* */ // 677: iload 8 /* */ // 679: ifne +27 -> 706 /* */ // 682: aload_0 /* */ // 683: aload 6 /* */ // 685: invokevirtual 287 NET/worlds/network/Cache:remove (LNET/worlds/network/CacheEntry;)V /* */ // 688: iload 8 /* */ // 690: ifeq +16 -> 706 /* */ // 693: new 180 java/io/File /* */ // 696: dup /* */ // 697: aload 7 /* */ // 699: invokespecial 197 java/io/File: (Ljava/lang/String;)V /* */ // 702: invokevirtual 253 java/io/File:delete ()Z /* */ // 705: pop /* */ // 706: aload 5 /* */ // 708: aload_0 /* */ // 709: getfield 228 NET/worlds/network/Cache:terminator LNET/worlds/network/CacheEntry; /* */ // 712: if_acmpne -104 -> 608 /* */ // 715: aload 4 /* */ // 717: invokevirtual 289 java/util/Hashtable:keys ()Ljava/util/Enumeration; /* */ // 720: astore 5 /* */ // 722: goto +24 -> 746 /* */ // 725: new 180 java/io/File /* */ // 728: dup /* */ // 729: aload 5 /* */ // 731: invokeinterface 293 1 0 /* */ // 736: checkcast 49 java/lang/String /* */ // 739: invokespecial 197 java/io/File: (Ljava/lang/String;)V /* */ // 742: invokevirtual 253 java/io/File:delete ()Z /* */ // 745: pop /* */ // 746: aload 5 /* */ // 748: invokeinterface 298 1 0 /* */ // 753: ifne -28 -> 725 /* */ // 756: new 180 java/io/File /* */ // 759: dup /* */ // 760: ldc_w 301 /* */ // 763: invokespecial 197 java/io/File: (Ljava/lang/String;)V /* */ // 766: astore 5 /* */ // 768: aload 5 /* */ // 770: invokevirtual 198 java/io/File:exists ()Z /* */ // 773: ifeq +15 -> 788 /* */ // 776: aload_0 /* */ // 777: putstatic 82 NET/worlds/network/Cache:cache LNET/worlds/network/Cache; /* */ // 780: aload 5 /* */ // 782: ldc_w 303 /* */ // 785: invokestatic 305 NET/worlds/network/Cache:InjectZipFile (Ljava/io/File;Ljava/lang/String;)V /* */ // 788: aload_0 /* */ // 789: new 309 java/util/Date /* */ // 792: dup /* */ // 793: invokespecial 311 java/util/Date: ()V /* */ // 796: putfield 312 NET/worlds/network/Cache:lastCacheSave Ljava/util/Date; /* */ // 799: aload_0 /* */ // 800: invokestatic 314 NET/worlds/console/Main:register (LNET/worlds/console/MainCallback;)V /* */ // 803: aload_0 /* */ // 804: areturn /* */ // Line number table: /* */ // Java source line #109 -> byte code offset #0 /* */ // Java source line #111 -> byte code offset #8 /* */ // Java source line #112 -> byte code offset #16 /* */ // Java source line #113 -> byte code offset #18 /* */ // Java source line #130 -> byte code offset #20 /* */ // Java source line #132 -> byte code offset #28 /* */ // Java source line #133 -> byte code offset #57 /* */ // Java source line #134 -> byte code offset #64 /* */ // Java source line #135 -> byte code offset #93 /* */ // Java source line #136 -> byte code offset #100 /* */ // Java source line #139 -> byte code offset #129 /* */ // Java source line #140 -> byte code offset #138 /* */ // Java source line #141 -> byte code offset #147 /* */ // Java source line #142 -> byte code offset #153 /* */ // Java source line #143 -> byte code offset #160 /* */ // Java source line #145 -> byte code offset #170 /* */ // Java source line #147 -> byte code offset #178 /* */ // Java source line #148 -> byte code offset #189 /* */ // Java source line #152 -> byte code offset #200 /* */ // Java source line #153 -> byte code offset #203 /* */ // Java source line #155 -> byte code offset #211 /* */ // Java source line #158 -> byte code offset #246 /* */ // Java source line #152 -> byte code offset #255 /* */ // Java source line #167 -> byte code offset #265 /* */ // Java source line #168 -> byte code offset #269 /* */ // Java source line #169 -> byte code offset #271 /* */ // Java source line #170 -> byte code offset #275 /* */ // Java source line #188 -> byte code offset #277 /* */ // Java source line #191 -> byte code offset #285 /* */ // Java source line #207 -> byte code offset #289 /* */ // Java source line #209 -> byte code offset #293 /* */ // Java source line #210 -> byte code offset #297 /* */ // Java source line #213 -> byte code offset #302 /* */ // Java source line #215 -> byte code offset #304 /* */ // Java source line #217 -> byte code offset #308 /* */ // Java source line #218 -> byte code offset #312 /* */ // Java source line #221 -> byte code offset #317 /* */ // Java source line #196 -> byte code offset #322 /* */ // Java source line #197 -> byte code offset #323 /* */ // Java source line #198 -> byte code offset #330 /* */ // Java source line #203 -> byte code offset #338 /* */ // Java source line #204 -> byte code offset #368 /* */ // Java source line #205 -> byte code offset #374 /* */ // Java source line #207 -> byte code offset #380 /* */ // Java source line #209 -> byte code offset #384 /* */ // Java source line #210 -> byte code offset #388 /* */ // Java source line #213 -> byte code offset #393 /* */ // Java source line #215 -> byte code offset #395 /* */ // Java source line #217 -> byte code offset #399 /* */ // Java source line #218 -> byte code offset #403 /* */ // Java source line #221 -> byte code offset #408 /* */ // Java source line #206 -> byte code offset #413 /* */ // Java source line #207 -> byte code offset #415 /* */ // Java source line #209 -> byte code offset #419 /* */ // Java source line #210 -> byte code offset #423 /* */ // Java source line #213 -> byte code offset #428 /* */ // Java source line #215 -> byte code offset #430 /* */ // Java source line #217 -> byte code offset #434 /* */ // Java source line #218 -> byte code offset #438 /* */ // Java source line #221 -> byte code offset #443 /* */ // Java source line #223 -> byte code offset #445 /* */ // Java source line #207 -> byte code offset #448 /* */ // Java source line #209 -> byte code offset #452 /* */ // Java source line #210 -> byte code offset #456 /* */ // Java source line #213 -> byte code offset #461 /* */ // Java source line #215 -> byte code offset #463 /* */ // Java source line #217 -> byte code offset #467 /* */ // Java source line #218 -> byte code offset #471 /* */ // Java source line #221 -> byte code offset #476 /* */ // Java source line #230 -> byte code offset #478 /* */ // Java source line #231 -> byte code offset #492 /* */ // Java source line #232 -> byte code offset #501 /* */ // Java source line #233 -> byte code offset #505 /* */ // Java source line #234 -> byte code offset #511 /* */ // Java source line #233 -> byte code offset #546 /* */ // Java source line #236 -> byte code offset #556 /* */ // Java source line #242 -> byte code offset #586 /* */ // Java source line #243 -> byte code offset #591 /* */ // Java source line #244 -> byte code offset #596 /* */ // Java source line #245 -> byte code offset #608 /* */ // Java source line #246 -> byte code offset #612 /* */ // Java source line #248 -> byte code offset #619 /* */ // Java source line #249 -> byte code offset #629 /* */ // Java source line #250 -> byte code offset #646 /* */ // Java source line #252 -> byte code offset #654 /* */ // Java source line #254 -> byte code offset #669 /* */ // Java source line #255 -> byte code offset #682 /* */ // Java source line #256 -> byte code offset #688 /* */ // Java source line #257 -> byte code offset #693 /* */ // Java source line #244 -> byte code offset #706 /* */ // Java source line #263 -> byte code offset #715 /* */ // Java source line #264 -> byte code offset #725 /* */ // Java source line #263 -> byte code offset #746 /* */ // Java source line #268 -> byte code offset #756 /* */ // Java source line #269 -> byte code offset #768 /* */ // Java source line #270 -> byte code offset #776 /* */ // Java source line #271 -> byte code offset #780 /* */ // Java source line #274 -> byte code offset #788 /* */ // Java source line #275 -> byte code offset #799 /* */ // Java source line #276 -> byte code offset #803 /* */ // Local variable table: /* */ // start length slot name signature /* */ // 15 789 0 c Cache /* */ // 17 461 1 in java.io.FileInputStream /* */ // 19 444 2 s java.io.ObjectInputStream /* */ // 56 78 3 fi File /* */ // 288 1 3 localOptionalDataException java.io.OptionalDataException /* */ // 322 5 3 e Exception /* */ // 491 61 3 names String[] /* */ // 151 3 4 version long /* */ // 366 9 4 findex File /* */ // 499 217 4 files Hashtable /* */ // 506 44 5 i int /* */ // 603 104 5 p CacheEntry /* */ // 720 27 5 e Enumeration /* */ // 766 15 5 f File /* */ // 203 45 6 obj Object /* */ // 260 3 6 obj Object /* */ // 610 74 6 e CacheEntry /* */ // 413 33 7 localObject1 Object /* */ // 627 71 7 name String /* */ // 300 1 8 localException1 Exception /* */ // 315 1 8 localException2 Exception /* */ // 391 1 8 localException3 Exception /* */ // 406 1 8 localException4 Exception /* */ // 426 1 8 localException5 Exception /* */ // 441 1 8 localException6 Exception /* */ // 459 1 8 localException7 Exception /* */ // 474 1 8 localException8 Exception /* */ // 644 45 8 isFile boolean /* */ // Exception table: /* */ // from to target type /* */ // 20 285 288 java/io/OptionalDataException /* */ // 293 297 300 java/lang/Exception /* */ // 308 312 315 java/lang/Exception /* */ // 20 285 322 java/lang/Exception /* */ // 384 388 391 java/lang/Exception /* */ // 399 403 406 java/lang/Exception /* */ // 20 289 413 finally /* */ // 322 380 413 finally /* */ // 419 423 426 java/lang/Exception /* */ // 434 438 441 java/lang/Exception /* */ // 452 456 459 java/lang/Exception /* */ // 467 471 474 java/lang/Exception /* */ } /* */ /* */ public static CacheFile getFile(URL url, boolean forceRecheck) /* */ { /* 287 */ return cache.getAFile(url, forceRecheck); /* */ } /* */ /* */ public static CacheFile getFile(URL url) { /* 291 */ return cache.getAFile(url, false); /* */ } /* */ /* */ public static CacheFile getFile(String url) { /* 295 */ return cache.getAFile(URL.make(url), false); /* */ } /* */ /* */ public static CacheEntry getEntry(URL url) { /* 299 */ return cache.get(url); /* */ } /* */ /* */ public static void removeEntry(CacheEntry ce) { /* 303 */ cache.remove(ce); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ public static void InjectZipFile(File zipFile, String urlPrefix) /* */ { /* 313 */ long timeStamp = zipFile.lastModified(); /* */ try /* */ { /* 316 */ ZipFile zf = new ZipFile(zipFile); /* 317 */ System.out.println("Adding " + zf.size() + " entries from " + /* 318 */ zipFile); /* 319 */ Enumeration e = zf.entries(); /* 320 */ InputStream is; while (e.hasMoreElements()) { /* 321 */ ZipEntry ze = (ZipEntry)e.nextElement(); /* 322 */ is = zf.getInputStream(ze); /* 323 */ URL remoteName = URL.make(urlPrefix + ze.getName()); /* */ /* */ /* 326 */ CacheEntry ce = cache.get(remoteName); /* 327 */ if (ce == null) /* */ { /* 329 */ String localName = assignLocalName(remoteName); /* 330 */ FileOutputStream fos = new FileOutputStream(localName); /* 331 */ byte[] buffer = new byte['က']; /* */ try { /* */ for (;;) { /* 334 */ int bytesRead = is.read(buffer); /* 335 */ if (bytesRead == -1) { /* */ break; /* */ } /* 338 */ fos.write(buffer, 0, bytesRead); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 354 */ is.close(); /* */ } /* */ catch (IOException localIOException) /* */ { /* 343 */ fos.close(); /* */ /* */ /* 346 */ ce = new CacheEntry(); /* 347 */ ce.localName = new String(localName); /* 348 */ ce.url = remoteName; /* 349 */ ce.state = 4; /* 350 */ ce.remoteTime = timeStamp; /* 351 */ ce.checkTime = new Date(); /* 352 */ cache.add(ce); /* */ } /* */ } /* */ } /* */ /* 357 */ zf.close(); /* */ /* */ } /* */ catch (Exception e) /* */ { /* */ /* 363 */ System.out.println("Error processing cache zip file: " + e); /* */ } /* */ } /* */ /* */ private synchronized CacheFile getAFile(URL url, boolean forceRecheck) { /* 368 */ CacheEntry e = null; /* */ /* */ /* */ /* 372 */ if (url.isRemote()) /* */ { /* 374 */ e = cache.get(url); /* 375 */ if (e == null) /* */ { /* */ /* 378 */ e = new CacheEntry(url); /* 379 */ cache.add(e); /* 380 */ } else if (forceRecheck) { /* 381 */ e.forceRecheck(); /* */ } /* */ } /* 384 */ return new CacheFile(url, e); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ public void mainCallback() {} /* */ /* */ /* */ /* */ /* */ public synchronized void resyncIndex() /* */ { /* 398 */ if ((this.hasChanged >= CACHE_MIN_CHANGE) || (this.lastCacheSave.before(new Date(new Date().getTime() - CACHE_MAX_DELAY)))) { /* 399 */ saveIndex(); /* */ } /* */ } /* */ /* */ /* */ /* */ public void saveIndex() /* */ { /* */ try /* */ { /* 409 */ System.out.println("Marking cache as open..."); /* */ /* */ /* */ /* 413 */ File fin = new File(CACHE_DIR + "cache.index.new"); /* 414 */ FileOutputStream o = new FileOutputStream(fin); /* 415 */ ObjectOutputStream s = new ObjectOutputStream(o); /* 416 */ s.writeLong(0L); /* 417 */ s.writeObject(this); /* */ /* */ /* */ /* 421 */ for (CacheEntry e = this.terminator.next; e != this.terminator; e = e.next) { /* 422 */ if ((e.url != null) && (e.localName != null)) { /* 423 */ s.writeObject(e); /* */ } /* */ } /* */ /* */ /* 428 */ s.writeInt(0); /* */ /* 430 */ s.flush(); /* 431 */ s.close(); /* 432 */ o.close(); /* 433 */ this.lastCacheSave = new Date(); /* 434 */ this.hasChanged = 0; /* */ /* 436 */ System.out.println("Marking cache as closed..."); /* 437 */ File fi = new File(CACHE_DIR + "cache.index"); /* 438 */ File fio = new File(CACHE_DIR + "cache.index.old"); /* 439 */ fi.renameTo(fio); /* 440 */ fin.renameTo(fi); /* 441 */ fio.delete(); /* */ } /* */ catch (Exception e) { /* 444 */ System.out.println("Error writing cache index: " + e); /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ public synchronized void terminalCallback() /* */ { /* 453 */ Main.unregister(this); /* */ /* 455 */ saveIndex(); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ static String assignLocalName(URL url) /* */ { /* 466 */ String remoteName = url.unalias(); /* */ /* */ /* */ /* */ /* */ /* */ /* 473 */ String ext = ".temp"; /* 474 */ int lastDot = remoteName.lastIndexOf('.'); /* 475 */ if ((lastDot > remoteName.lastIndexOf('/')) && /* 476 */ (remoteName.indexOf("?", lastDot) < 0) && /* 477 */ (remoteName.indexOf("#", lastDot) < 0)) { /* 478 */ ext = remoteName.substring(lastDot); /* */ } /* */ /* */ /* 482 */ if (url.endsWith(".gr2")) { /* 483 */ return CACHE_DIR + url.getBase(); /* */ } /* 485 */ return CACHE_DIR + Integer.toString(cache.nextAvailable++, 36) + ext; /* */ } /* */ /* */ public synchronized void add(CacheEntry e) /* */ { /* 490 */ this.table.put(e.url, e); /* 491 */ CacheEntry p = this.terminator.prev; /* 492 */ p.next = e; /* 493 */ e.prev = p; /* 494 */ e.next = this.terminator; /* 495 */ this.terminator.prev = e; /* 496 */ this.hasChanged += 1; /* */ } /* */ /* */ public int numEntries() /* */ { /* 501 */ return this.table.size(); /* */ } /* */ /* */ /* */ public synchronized CacheEntry get(URL url) /* */ { /* 507 */ CacheEntry e = (CacheEntry)this.table.get(url); /* */ /* */ /* 510 */ if (e != null) { /* 511 */ markUsed(e); /* */ } /* */ /* 514 */ return e; /* */ } /* */ /* */ /* */ private void markUsed(CacheEntry e) /* */ { /* 520 */ if ((e == null) || (e.next == this.terminator)) /* */ { /* 522 */ return; /* */ } /* 524 */ e.prev.next = e.next; /* 525 */ e.next.prev = e.prev; /* 526 */ this.terminator.prev.next = e; /* 527 */ e.prev = this.terminator.prev; /* 528 */ e.next = this.terminator; /* 529 */ this.terminator.prev = e; /* */ } /* */ /* */ /* */ public void remove(CacheEntry e) /* */ { /* 535 */ this.totalBytes -= e.bytes; /* 536 */ e.prev.next = e.next; /* 537 */ e.next.prev = e.prev; /* 538 */ e.prev = null; /* 539 */ e.next = null; /* 540 */ this.table.remove(e.url); /* 541 */ this.hasChanged += 1; /* */ /* 543 */ new File(e.localName.toUpperCase()).delete(); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ private CacheEntry freeLRU() /* */ { /* 554 */ for (CacheEntry e = this.terminator.next; e != this.terminator; e = e.next) { /* 555 */ if (!e.inUse()) { /* 556 */ remove(e); /* 557 */ return e; /* */ } /* */ } /* 560 */ return null; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ public synchronized void makeSpaceFor(int incomingSize) /* */ { /* 570 */ while (cache.numEntries() > CacheEntry.CACHE_MAX_ENTRIES) { /* 571 */ if (freeLRU() == null) { /* */ break; /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* 580 */ while ((this.totalBytes + 2L * incomingSize) / 1024L > /* 581 */ Std.GetDiskFreeSpace()) /* */ { /* 583 */ if (Std.GetDiskFreeSpace() <= -1L) { /* */ break; /* */ } /* */ /* 587 */ CacheEntry freed = freeLRU(); /* 588 */ if (freed == null) { /* */ break; /* */ } /* */ } /* */ } /* */ } /* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\network\Cache.class * Java compiler version: 6 (50.0) * JD-Core Version: 0.7.1 */