• Log in or sign up for an account here: https://www.sythe.org/login

Cache Download Issues (Detailed w/ Photos)

nolan2131

Newcomer
Joined
Feb 7, 2015
Sythe Gold
0
Messages
11
Ok, so I'm trying to get a beta client out to some of my developers and I've never had the pleasure of working client side, especially with the cache. I've hit a bit of an obstacle when it comes to my cache auto-downloading and extracting correctly. The client will download the cache 100% and then throw up an error after it's done. I'm highlighting all the files in my cache and compressing them to a .zip file. I'd be willing to TV. Thanks in advance.

Cachedownloader
Code:
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.BufferedOutputStream;
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URLConnection;
import java.net.URL;
import java.util.zip.ZipFile;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.Enumeration;

import sign.signlink;

public class CacheDownloader {

	private client client;

	private final int BUFFER = 1024;

	private final int VERSION = 1; // Version of cache
	private String cacheLink = "https://dl.dropbox.com/s/c1imityj4iyp9bd/.AtonementCacheV1.zip"; // Link to cache
	
	private String fileToExtract = getCacheDir() + getArchivedName();

	public CacheDownloader(client client) {
		this.client = client;
	}

	private void drawLoadingText(String text) {
		client.drawLoadingText(35, text);
		//System.out.println(text);
	}


	private void drawLoadingText(int amount, String text) {
		client.drawLoadingText(amount, text);
		//System.out.println(text);
	}

	private String getCacheDir() {
		return signlink.findcachedir();
	}

	private String getCacheLink() {
		return cacheLink;
	}

	private int getCacheVersion() {
		return VERSION;
	}

	public CacheDownloader downloadCache() {
		try {
		File location = new File(getCacheDir());
		File version = new File(getCacheDir() + "/cacheVersion" + getCacheVersion() + ".dat");
		
		if(!location.exists()) {
			//drawLoadingText("Loading new Updates....");
			downloadFile(getCacheLink(), getArchivedName());

			unZip();
			//System.out.println("UNZIP");

			BufferedWriter versionFile = new BufferedWriter(new FileWriter(getCacheDir() + "/cacheVersion" + getCacheVersion() + ".dat"));
			versionFile.close();
			deleteZIP(getArchivedName());
		} else {
			if(!version.exists()) {
				//drawLoadingText("~ First Time Installation, Only Once! ~");
				downloadFile(getCacheLink(), getArchivedName());

				unZip();
				//System.out.println("UNZIP");

				BufferedWriter versionFile = new BufferedWriter(new FileWriter(getCacheDir() + "/cacheVersion" + getCacheVersion() + ".dat"));
				versionFile.close();
				deleteZIP(getArchivedName());

			} else {
				return null;
			}
		}
		} catch(Exception e) {

		}
		return null;
	}
	
	private void downloadFile(String adress, String localFileName) {
		OutputStream out = null;
		URLConnection conn;
		InputStream in = null;
		
		try {

			URL url = new URL(adress);
			out = new BufferedOutputStream(
				new FileOutputStream(getCacheDir() + "/" +localFileName)); 

			conn = url.openConnection();
			in = conn.getInputStream(); 
		
			byte[] data = new byte[BUFFER]; 
	
			int numRead;
			long numWritten = 0;
			int length = conn.getContentLength();

	
			while((numRead = in.read(data)) != -1) {
				out.write(data, 0, numRead);
				numWritten += numRead;

            			int percentage = (int)(((double)numWritten / (double)length) * 100D);
				drawLoadingText(percentage, "Downloading Cache " + percentage + "%...");

			}

			System.out.println(localFileName + "\t" + numWritten);
			drawLoadingText("Unpacking..");

		} catch (Exception exception) {
			exception.printStackTrace();
		} finally {
			try {
				if (in != null) {
					in.close();
				}
				if (out != null) {
					out.close();
				}
			} catch (IOException ioe) {
			}
		}

	}

	private String getArchivedName() {
		int lastSlashIndex = getCacheLink().lastIndexOf('/');
		if (lastSlashIndex >= 0 
			&& lastSlashIndex < getCacheLink().length() -1) { 
			return getCacheLink().substring(lastSlashIndex + 1);
		} else {
			//System.err.println("error retreiving archivaed name.");
		}
		return "";
	}




	private void unZip() {

		try {
    			InputStream in = 
				new BufferedInputStream(new FileInputStream(fileToExtract));
			ZipInputStream zin = new ZipInputStream(in);
			ZipEntry e;

			while((e=zin.getNextEntry()) != null) {

               			if(e.isDirectory()) {
					(new File(getCacheDir() + e.getName())).mkdir();
               			} else {

				if (e.getName().equals(fileToExtract)) {
					unzip(zin, fileToExtract);
					break;
				}
       					unzip(zin, getCacheDir() + e.getName());
				}
				//System.out.println("unzipping2 " + e.getName());
			}
			zin.close();

		} catch(Exception e) {
			e.printStackTrace();
		}
	}

private void deleteZIP(String fileName){
    // A File object to represent the filename
    File f = new File(getCacheDir() + fileName);

    // Make sure the file or directory exists and isn't write protected
    if (!f.exists())
      throw new IllegalArgumentException(
          "Delete: no such file or directory: " + fileName);

    if (!f.canWrite())
      throw new IllegalArgumentException("Delete: write protected: "
          + fileName);

    // If it is a directory, make sure it is empty
    if (f.isDirectory()) {
      String[] files = f.list();
      if (files.length > 0)
        throw new IllegalArgumentException(
            "Delete: directory not empty: " + fileName);
    }

    // Attempt to delete it
    boolean success = f.delete();

    if (!success)
      throw new IllegalArgumentException("Delete: deletion failed");

	}

	private void unzip(ZipInputStream zin, String s) 
		throws IOException {

		FileOutputStream out = new FileOutputStream(s);
		//System.out.println("unzipping " + s);
		byte [] b = new byte[BUFFER];
		int len = 0;

		while ((len = zin.read(b)) != -1) {
			out.write(b,0,len);
		}
		out.close();
	}
}

Signlink
Code:
package sign;

import java.applet.Applet;
import java.io.*;
import java.net.*;

 public final class signlink
    implements Runnable
{
    public static void startpriv(InetAddress inetaddress)
    {
        threadliveid = (int)(Math.random() * 99999999D);
        if(active)
        {
            try
            {
                Thread.sleep(500L);
            }
            catch(Exception _ex) { }
            active = false;
        }
        socketreq = 0;
        threadreq = null;
        dnsreq = null;
        savereq = null;
        urlreq = null;
        socketip = inetaddress;
        Thread thread = new Thread(new signlink());
        thread.setDaemon(true);
        thread.start();
        while(!active)
            try
            {
                Thread.sleep(50L);
            }
            catch(Exception _ex) { }
    }

    public void run() {
        uid = 69197298;
	active = true;
        String s = findcachedir();
        uid = getuid(s);
        try {
            cache_dat = new RandomAccessFile(s + "main_file_cache.dat", "rw");
            for(int j = 0; j < 5; j++) {
                cache_idx[j] = new RandomAccessFile(s + "main_file_cache.idx" + j, "rw");
			}
        } catch(Exception exception) {
            exception.printStackTrace();
        }
        for(int i = threadliveid; threadliveid == i;)
        {
            if(socketreq != 0)
            {
                try
                {
                    socket = new Socket(socketip, socketreq);
                }
                catch(Exception _ex)
                {
                    socket = null;
                }
                socketreq = 0;
            } else
            if(threadreq != null)
            {
                Thread thread = new Thread(threadreq);
                thread.setDaemon(true);
                thread.start();
                thread.setPriority(threadreqpri);
                threadreq = null;
            } else
            if(dnsreq != null)
            {
                try
                {
                    dns = InetAddress.getByName(dnsreq).getHostName();
                }
                catch(Exception _ex)
                {
                    dns = "unknown";
                }
                dnsreq = null;
            } else
            if(savereq != null)
            {
                if(savebuf != null)
                    try
                    {
                        FileOutputStream fileoutputstream = new FileOutputStream(s + savereq);
                        fileoutputstream.write(savebuf, 0, savelen);
                        fileoutputstream.close();
                    }
                    catch(Exception _ex) { }
                if(waveplay)
                {
                    String wave = s + savereq;
                    waveplay = false;
                }
                if(midiplay)
                {
                    midi = s + savereq;
                    midiplay = false;
                }
                savereq = null;
            } else
            if(urlreq != null)
            {
                try
                {
                    System.out.println("urlstream");
                    urlstream = new DataInputStream((new URL(mainapp.getCodeBase(), urlreq)).openStream());
                }
                catch(Exception _ex)
                {
                    urlstream = null;
                }
                urlreq = null;
            }
            try
            {
                Thread.sleep(50L);
            }
            catch(Exception _ex) { }
        }

    }

    

    public static String findcachedir() {
        String as[] = {"C:/"};
        if(storeid < 32 || storeid > 34)
            storeid = 32;
        String s = ".AtonementCacheV1";
        for(int i = 0; i < as.length; i++)
            try {
                String s1 = as[i];
                if(s1.length() > 0) {
                    File file = new File(s1);
                    if(!file.exists())
                        continue;
                }
                File file1 = new File(s1 + s);
                if(file1.exists() || file1.mkdir())
                    return s1 + s + "/";
            }
            catch(Exception _ex) { }
        return null;
    }

	
	public static String sencondDir() {
		File file = new File("./");
		if (!file.exists())
			file.mkdir();
		return file.toString();
	}

    private static int getuid(String s) {
        return 234523;
    }

    public static synchronized Socket opensocket(int i)
        throws IOException
    {
        for(socketreq = i; socketreq != 0;)
            try
            {
                Thread.sleep(50L);
            }
            catch(Exception _ex) { }

        if(socket == null)
            throw new IOException("could not open socket");
        else
            return socket;
    }

    public static synchronized DataInputStream openurl(String s)
        throws IOException
    {
        for(urlreq = s; urlreq != null;)
            try
            {
                Thread.sleep(50L);
            }
            catch(Exception _ex) { }

        if(urlstream == null)
            throw new IOException("could not open: " + s);
        else
            return urlstream;
    }

    public static synchronized void dnslookup(String s)
    {
        dns = s;
        dnsreq = s;
    }

    public static synchronized void startthread(Runnable runnable, int i)
    {
        threadreqpri = i;
        threadreq = runnable;
    }

    public static synchronized boolean wavesave(byte abyte0[], int i)
    {
        if(i > 0x1e8480)
            return false;
        if(savereq != null)
        {
            return false;
        } else
        {
            wavepos = (wavepos + 1) % 5;
            savelen = i;
            savebuf = abyte0;
            waveplay = true;
            savereq = "sound" + wavepos + ".wav";
            return true;
        }
    }

    public static synchronized boolean wavereplay()
    {
        if(savereq != null)
        {
            return false;
        } else
        {
            savebuf = null;
            waveplay = true;
            savereq = "sound" + wavepos + ".wav";
            return true;
        }
    }

    public static synchronized void midisave(byte abyte0[], int i)
    {
        if(i > 0x1e8480)
            return;
        if(savereq != null)
        {
        } else
        {
            midipos = (midipos + 1) % 5;
            savelen = i;
            savebuf = abyte0;
            midiplay = true;
            savereq = "jingle" + midipos + ".mid";
        }
    }

    public static void reporterror(String s)
    {
        System.out.println("Error: " + s);
    }

    private signlink()
    {
    }

    public static final int clientversion = 317;
    public static int uid;
    public static int storeid = 32;
    public static RandomAccessFile cache_dat = null;
    public static final RandomAccessFile[] cache_idx = new RandomAccessFile[5];
    public static boolean sunjava;
    public static Applet mainapp = null;
    private static boolean active;
    private static int threadliveid;
    private static InetAddress socketip;
    private static int socketreq;
    private static Socket socket = null;
    private static int threadreqpri = 1;
    private static Runnable threadreq = null;
    private static String dnsreq = null;
    public static String dns = null;
    private static String urlreq = null;
    private static DataInputStream urlstream = null;
    private static int savelen;
    private static String savereq = null;
    private static byte[] savebuf = null;
    private static boolean midiplay;
    private static int midipos;
    public static String midi = null;
    public static int midivol;
    public static int midifade;
    private static boolean waveplay;
    private static int wavepos;
    public static int wavevol;
    public static boolean reporterror = true;
    public static String errorname = "";

}

Here is what my cache looks like when placed in your C:/ with my current issue.
15rdz5k.png


Here is what it should look like in your C:/
21cs3f5.png


I've used the following links in my cachedownloader if that matters. (I see everyone posting link solutions...)
Code:
https://dl.dropbox.com/s/c1imityj4iyp9bd/.AtonementCacheV1.zip
https://dl.dropbox.com/s/c1imityj4iyp9bd/.AtonementCacheV1.zip?dl=1
https://dl.dropboxusercontent.com/s/c1imityj4iyp9bd/.AtonementCacheV1.zip
https://dl.dropboxusercontent.com/s/c1imityj4iyp9bd/.AtonementCacheV1.zip?dl=1

.Bat error code
Code:
Atonement is loading..
.AtonementCacheV1.zip   90397249
java.io.FileNotFoundException: C:\.AtonementCacheV1\Data\Animation\flo.dat (The
system cannot find the path specified)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at CacheDownloader.unzip(CacheDownloader.java:219)
        at CacheDownloader.unZip(CacheDownloader.java:176)
        at CacheDownloader.downloadCache(CacheDownloader.java:78)
        at client.startUp(client.java:9778)
        at RSApplet.run(RSApplet.java:33)
        at client.run(client.java:6529)
        at java.lang.Thread.run(Unknown Source)
java.util.zip.ZipException: error in opening zip file
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(Unknown Source)
        at java.util.zip.ZipFile.<init>(Unknown Source)
        at java.util.zip.ZipFile.<init>(Unknown Source)
        at Update.unZipFile(Update.java:53)
        at Update.<init>(Update.java:29)
        at client.streamLoaderForName(client.java:5223)
        at client.startUp(client.java:9789)
        at RSApplet.run(RSApplet.java:33)
        at client.run(client.java:6529)
        at java.lang.Thread.run(Unknown Source)

If you have any solutions, it'd be much appreciated. Thanks
 
Runescape Gamblingrunescape gambling
Back
Top