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
Signlink
Here is what my cache looks like when placed in your C:/ with my current issue.
Here is what it should look like in your C:/
I've used the following links in my cachedownloader if that matters. (I see everyone posting link solutions...)
.Bat error code
If you have any solutions, it'd be much appreciated. Thanks
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.
Here is what it should look like in your C:/
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

