IDataModel.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import GameController from "../../../game/GameController";
  2. import { LOG_TAG, Log } from "../../log/Log";
  3. import { RDPlatformManager } from "../../platform/RDPlatformManager";
  4. export default class IDataModel {
  5. protected modelName: string = 'default';
  6. /**
  7. * 本地缓存的数据
  8. */
  9. private _dLocalData = {};
  10. constructor(modelName = 'default') {
  11. this.modelName = modelName;
  12. this.LoadStorage();
  13. this.registerListeners();
  14. }
  15. clear() {
  16. }
  17. /**
  18. * 注册网络监听事件
  19. */
  20. private registerListeners() {
  21. let tbMsg = this.getMessageListeners();
  22. for (const key in tbMsg) {
  23. if (tbMsg.hasOwnProperty(key)) {
  24. // EventMng.on(key.toString(), function (msg) {
  25. // tbMsg[key](msg);
  26. // })
  27. }
  28. }
  29. }
  30. /**
  31. * 子类需要重写此方法,返回需要注册的监听事件
  32. */
  33. getMessageListeners() {
  34. return {};
  35. };
  36. /**
  37. * 发送协议
  38. * @param msg
  39. */
  40. sendProtocolMsg(msg) {
  41. try {
  42. //GameController.network.send(msg);
  43. } catch (e) {
  44. console.error('send proto', msg, e);
  45. }
  46. }
  47. protected LoadStorage() {
  48. let self = this;
  49. RDPlatformManager.getInstance().loadStorageData([`model_${this.modelName}`], function (data) {
  50. if (!data || data === "") {
  51. self._dLocalData = {}
  52. self.initData();
  53. self.Save();
  54. } else {
  55. self._dLocalData = data;
  56. }
  57. //cc.log("数据获取" + `model_${self.modelName}`)
  58. // cc.log(JSON.stringify(self._dLocalData));
  59. }, function (err) { });
  60. }
  61. /**
  62. * 如果是第一次初始化数据用
  63. */
  64. protected initData() {
  65. //todo 子类实现
  66. Log.log(LOG_TAG.DEBUG, "如果是第一次初始化数据用 父类");
  67. }
  68. /**
  69. * protected 只让实现类操作数据 也就是model类型操作数据 对外提供别的方法
  70. * @param sKey
  71. * @param defaultValue
  72. */
  73. protected Query(sKey: string, defaultValue: any = null) {
  74. if (this._dLocalData[sKey] != undefined) {
  75. return this._dLocalData[sKey];
  76. }
  77. return defaultValue;
  78. }
  79. /**
  80. * 设置成功返回 true,反之返回 false 用于是否保存数据
  81. * @param sKey
  82. * @param value
  83. */
  84. protected Set(sKey: string, value: string | number) {
  85. if (this._dLocalData[sKey] && this._dLocalData[sKey] == value) {
  86. return false;//一样就不要改了
  87. }
  88. this._dLocalData[sKey] = value;
  89. return true;
  90. }
  91. protected Save() {
  92. RDPlatformManager.getInstance().flushStorageData({key:`model_${this.modelName}`,data:this._dLocalData},function(){}),
  93. //cc.log( "数据保存" + `model_${this.modelName}`)
  94. //let self = this;
  95. RDPlatformManager.getInstance().loadStorageData([`model_${this.modelName}`],function(data){
  96. // cc.log( "数据获取" + `model_${self.modelName}`)
  97. // cc.log(JSON.stringify(self._dLocalData));
  98. },function(err){});
  99. //cc.log(JSON.stringify(this._dLocalData));
  100. }
  101. }