[storage] use haxe Serializer/Deserializer

This commit is contained in:
2019-03-29 11:49:41 +03:00
parent d55201ecc0
commit 56122a37c3
5 changed files with 58 additions and 33 deletions

View File

@@ -1,9 +1,11 @@
package haxework.storage;
import flash.utils.ByteArray;
interface IStorage {
public function exists(key:String):Bool;
public function write(key:String, value:ByteArray):Void;
public function read(key:String):Null<ByteArray>;
public function write<T>(key:String, value:T):Void;
public function read<T>(key:String):Null<T>;
public function clear():Void;
}

View File

@@ -1,16 +1,16 @@
package haxework.storage;
import flash.utils.ByteArray;
class NoStorage implements IStorage {
public function exists(key:String):Bool {
return false;
}
public function write(key:String, value:ByteArray):Void {}
public function write<T>(key:String, value:T):Void {}
public function read(key:String):Null<ByteArray> {
public function read<T>(key:String):Null<T> {
return null;
}
public function clear():Void {}
}

View File

@@ -1,24 +1,36 @@
package haxework.storage;
import haxe.crypto.Md5;
import flash.net.SharedObject;
import flash.utils.ByteArray;
import haxe.Serializer;
import haxe.Unserializer;
class SharedObjectStorage implements IStorage {
public function exists(key:String):Bool {
var so:SharedObject = SharedObject.getLocal("storage/" + Md5.encode(key));
return so.size > 0;
private var so:SharedObject;
public function new(name:String = "storage") {
so = SharedObject.getLocal(name);
}
public function write(key:String, value:ByteArray):Void {
var so:SharedObject = SharedObject.getLocal("storage/" + Md5.encode(key));
so.setProperty("value", value);
public function exists(key:String):Bool {
return Reflect.hasField(so.data, key);
}
public function write<T>(key:String, value:T):Void {
so.setProperty(key, Serializer.run(value));
so.flush();
}
public function read(key:String):Null<ByteArray> {
var so:SharedObject = SharedObject.getLocal("storage/" + Md5.encode(key));
return so.data.value;
public function read<T>(key:String):Null<T> {
if (exists(key)) {
var data = Reflect.field(so.data, key);
return new Unserializer(data).unserialize();
} else {
return null;
}
}
public function clear():Void {
so.clear();
}
}

View File

@@ -0,0 +1,11 @@
package haxework.utils;
import haxe.Unserializer;
import haxe.Serializer;
class ObjectUtil {
public static function clone<T>(object:T):T {
return new Unserializer(Serializer.run(object)).unserialize();
}
}