mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-14 07:36:06 +09:00
added sources for Slick
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054 Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
This commit is contained in:
138
lib/slick-source/org/newdawn/slick/muffin/WebstartMuffin.java
Normal file
138
lib/slick-source/org/newdawn/slick/muffin/WebstartMuffin.java
Normal file
@@ -0,0 +1,138 @@
|
||||
package org.newdawn.slick.muffin;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.EOFException;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.jnlp.BasicService;
|
||||
import javax.jnlp.FileContents;
|
||||
import javax.jnlp.PersistenceService;
|
||||
import javax.jnlp.ServiceManager;
|
||||
|
||||
import org.newdawn.slick.util.Log;
|
||||
|
||||
/**
|
||||
* A muffin load/save implementation based on using Webstart Muffins (a bit like cookies only
|
||||
* for webstart)
|
||||
*
|
||||
* @author kappaOne
|
||||
*/
|
||||
public class WebstartMuffin implements Muffin {
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.muffin.Muffin#saveFile(java.util.HashMap, java.lang.String)
|
||||
*/
|
||||
public void saveFile(HashMap scoreMap, String fileName) throws IOException {
|
||||
|
||||
PersistenceService ps;
|
||||
BasicService bs;
|
||||
URL configURL;
|
||||
|
||||
try {
|
||||
ps = (PersistenceService) ServiceManager
|
||||
.lookup("javax.jnlp.PersistenceService");
|
||||
bs = (BasicService) ServiceManager
|
||||
.lookup("javax.jnlp.BasicService");
|
||||
URL baseURL = bs.getCodeBase();
|
||||
// System.out.println("CodeBase was " + baseURL);
|
||||
configURL = new URL(baseURL, fileName);
|
||||
} catch (Exception e) {
|
||||
Log.error(e);
|
||||
throw new IOException("Failed to save state: ");
|
||||
}
|
||||
|
||||
try {
|
||||
ps.delete(configURL);
|
||||
} catch (Exception e) {
|
||||
Log.info("No exisiting Muffin Found - First Save");
|
||||
}
|
||||
|
||||
try {
|
||||
ps.create(configURL, 1024); // 1024 bytes for our data
|
||||
|
||||
FileContents fc = ps.get(configURL);
|
||||
DataOutputStream oos = new DataOutputStream(fc
|
||||
.getOutputStream(false));
|
||||
|
||||
// scroll through hashMap and write key and value to file
|
||||
Set keys = scoreMap.keySet(); // get the keys
|
||||
|
||||
// get values using keys
|
||||
for (Iterator i = keys.iterator(); i.hasNext();) {
|
||||
String key = (String) i.next();
|
||||
|
||||
oos.writeUTF(key);
|
||||
|
||||
if (fileName.endsWith("Number")) {
|
||||
double value = ((Double) scoreMap.get(key)).doubleValue();
|
||||
oos.writeDouble(value);
|
||||
} else {
|
||||
String value = (String) scoreMap.get(key);
|
||||
oos.writeUTF(value);
|
||||
}
|
||||
}
|
||||
|
||||
oos.flush();
|
||||
oos.close();
|
||||
} catch (Exception e) {
|
||||
Log.error(e);
|
||||
throw new IOException("Failed to store map of state data");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.muffin.Muffin#loadFile(java.lang.String)
|
||||
*/
|
||||
public HashMap loadFile(String fileName) throws IOException {
|
||||
HashMap hashMap = new HashMap();
|
||||
|
||||
try {
|
||||
PersistenceService ps = (PersistenceService) ServiceManager
|
||||
.lookup("javax.jnlp.PersistenceService");
|
||||
BasicService bs = (BasicService) ServiceManager
|
||||
.lookup("javax.jnlp.BasicService");
|
||||
URL baseURL = bs.getCodeBase();
|
||||
URL configURL = new URL(baseURL, fileName);
|
||||
FileContents fc = ps.get(configURL);
|
||||
DataInputStream ois = new DataInputStream(fc.getInputStream());
|
||||
|
||||
// read in data from muffin
|
||||
String key;
|
||||
|
||||
// load hashMap as <String, Int> or <String, String>
|
||||
if (fileName.endsWith("Number")) {
|
||||
double value;
|
||||
// while not end of file
|
||||
while ((key = ois.readUTF()) != null) {
|
||||
value = ois.readDouble();
|
||||
// load value into hashMap
|
||||
hashMap.put(key, new Double(value));
|
||||
}
|
||||
} else {
|
||||
String value;
|
||||
// while not end of file
|
||||
while ((key = ois.readUTF()) != null) {
|
||||
value = ois.readUTF();
|
||||
// load value into hashMap
|
||||
hashMap.put(key, value);
|
||||
}
|
||||
}
|
||||
|
||||
ois.close();
|
||||
} catch (EOFException e) {
|
||||
// End of the file reached, do nothing
|
||||
} catch (IOException e) {
|
||||
// No data there - thats ok, just not saved before
|
||||
} catch (Exception e) {
|
||||
Log.error(e);
|
||||
throw new IOException("Failed to load state from webstart muffin");
|
||||
}
|
||||
|
||||
return hashMap;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user