Framework: Config & Data

Рассказал про Profile — можно сразу рассказать и про реализацию игровых конфигов.

Config

elmortem.core.Config
По сути это тот же самый Profile, только он сам сохраняется по специальному имени каждый раз, когда изменяется переменная.
package elmortem.core {
  import flash.net.SharedObject;
  import elmortem.utils.Data;
  
  public class Config {
    static public function setVar(name:String, value:*):void {
      trace("setConfig: "+name+" = "+value);
      var so:SharedObject = SharedObject.getLocal("__config__");
      so.data[name] = Data.clone(value);
      so.flush();
    }
    static public function getVar(name:String, def:* = ""):* {
      trace("getConfig: "+name);
      var so:SharedObject = SharedObject.getLocal("__config__");
      if (so.data[name] != undefined) return so.data[name]; else return def;
    }
  }
}


Data

elmortem.utils.Data
Утилитный класс, производящий клонирование объектов. Используется в классах Profile и Config.
package elmortem.utils {
  import flash.display.DisplayObject;
  import flash.utils.ByteArray;

  public class Data {
    
    static public function clone(source:*):* {
      try {
        var copier:ByteArray = new ByteArray();
        copier.writeObject(source);
        copier.position = 0;
        return (copier.readObject());
      } catch(e:Error) {
        trace(e.message);
        return source;
      }
    }
    static public function toBool(d:*):Boolean {
      if (d is String && d == "true") return true;
      if (d is int && d == 1) return true;
      return false;
    }
  }
}

Комментарии (2)

0
Не совсем понимаю, зачем нужно копирование через ByteArray(я не говорю, что оно не нужно)? Сам я сохраняю в SharedObject объекты классов, только приходится регистрировать класс, для AMF:
registerClassAlias( 'ClassName', ClassName );
0
Если не клонировать объект, то в хранилище может оказаться ссылка на объект, который может измениться в каком-то месте программы. Так что для надёжности лучше дублировать данные, чтобы они были только в хранилище.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.