UserData.ts 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. import { Framework } from "../../framework/Framework";
  2. import { ObjectUtil } from "../../framework/util/ObjectUtil";
  3. import { StringUtil } from "../../framework/util/StringUtil";
  4. import { GameEvent } from "./GameEvent";
  5. export const DataKey = {
  6. Role: "Role", //角色
  7. GameInstall: "GameInstall", //设置
  8. UserID: 'UserID', //用户ID
  9. };
  10. interface Account {
  11. openId: string;
  12. openKey: string;
  13. sdkUid;
  14. cdkeyUrl: string;
  15. version: string;
  16. cdnUrl: string;
  17. bulletin: string;
  18. platform: string;
  19. serverOpenTime: number;
  20. serverOpenHour: number;
  21. white: number;
  22. openCdkey: number;
  23. openLogout: number;
  24. download: string;
  25. }
  26. interface Role {
  27. sid: number;
  28. headpic: number;
  29. role_name: string;
  30. uid: string;
  31. lv: number;
  32. last_time: string;
  33. name?: string;
  34. status?: number;
  35. host?: string;
  36. gs?: number;
  37. }
  38. interface Server {
  39. sid: number;
  40. name: string;
  41. status: number;
  42. host: string;
  43. gs: number;
  44. }
  45. // type ServerData = {
  46. // role_list?: { id: string; pic: string; name: string; uid: string; lv: string; last_time: string }[];
  47. // server_list?: { id: string; name: string; status: string; host: string }[];
  48. // lastsid?: number;
  49. // };
  50. class Data {
  51. private _class_id = StringUtil.getUUID(32);
  52. //需要保存的数据
  53. save_data = new Map<string, any>();
  54. UserID: any = null;
  55. private _roleServers: Role[] = [];
  56. private _servers: Server[] = [];
  57. private _recmdServers: Server[] = [];
  58. //账号信息
  59. private _accountData: Account = {
  60. openId: '',
  61. openKey: '',
  62. sdkUid: '',
  63. cdkeyUrl: '',
  64. version: '',
  65. cdnUrl: '',
  66. bulletin: '',
  67. platform: '',
  68. serverOpenTime: 0,
  69. serverOpenHour: 0,
  70. white: 0,
  71. openCdkey: 0,
  72. openLogout: 0,
  73. download: '',
  74. };
  75. //最后一次登录服id
  76. private _sid: number = this.save_locally('lastsid',null,-1);;
  77. //推荐区域
  78. private _arenaId: string = '1';
  79. init(data: any) {
  80. Framework.storage.setUser(this._accountData.openId);
  81. //将服务器的数据替换到本地
  82. // let save = new Map<string, string>();
  83. for (let key in data) {
  84. this[key] = data[key]
  85. Framework.storage.set(key, this[key]);
  86. }
  87. //读取本地数据
  88. //this.era = Framework.storage.get(DataKey.Era, GameConf.Macro.default_era);
  89. //兼容代码
  90. Framework.event.addEvent(GameEvent.Daily_Update, () => {
  91. // Framework.event.fireEvent(GameEvent.Daily_Update);
  92. //每日凌晨更新事件
  93. //
  94. }, this, this._class_id);
  95. }
  96. // 存储本地
  97. save_locally(key: string, value?, defaultValue?: any) {
  98. if (key != 'UserID') {
  99. key += this.UserID
  100. }
  101. if (value) {
  102. this[key] = value
  103. Framework.storage.set(key, value);
  104. this._saveData(key, value)
  105. } else {
  106. this[key] = Framework.storage.get(key, defaultValue);
  107. return this[key];
  108. }
  109. }
  110. _saveData(key: string, value: any) {
  111. this.save_data.delete(key);
  112. if (typeof value === 'object') {
  113. try {
  114. if (value instanceof Map) {
  115. let temp = ObjectUtil.mapToObject(value)
  116. value = JSON.stringify(temp);
  117. } else {
  118. value = JSON.stringify(value);
  119. }
  120. } catch (e) {
  121. console.error(`解析失败,str = ${value}`);
  122. return;
  123. }
  124. } else {
  125. value = value + "";
  126. }
  127. this.save_data.set(key, value);
  128. Framework.storage.set('save_data', this.save_data);
  129. }
  130. private _mapToObject(map: any) {
  131. let obj = {};
  132. for (let [k, v] of map) {
  133. obj[k] = v;
  134. }
  135. return obj;
  136. }
  137. getServerTime() {
  138. return Date.now()
  139. }
  140. parseLoginData(data) {
  141. this.initAccount(data);
  142. this.initRoles(data.role_list);
  143. if (data.server_list) {
  144. this.initServers(data.server_list);
  145. }
  146. if (data.lastsid && data.lastsid > 0) {
  147. UserData.setSid(data.lastsid, true);
  148. }
  149. }
  150. setSid(sid: number, flag: boolean): void {
  151. this._sid = sid;
  152. if (flag) {
  153. this._saveData('lastsid',sid);
  154. }
  155. }
  156. getSid(){
  157. return this._sid;
  158. }
  159. setAreanId(areanId: string): void {
  160. this._arenaId = areanId;
  161. }
  162. private initAccount(data) {
  163. if (data.openid) {
  164. this._accountData.openId = data.openid;
  165. }
  166. if (data.openkey) {
  167. this._accountData.openKey = data.openkey;
  168. }
  169. if (data.sdkuid) {
  170. this._accountData.sdkUid = data.sdkuid;
  171. }
  172. if (data.cdkey) {
  173. this._accountData.cdkeyUrl = data.cdkey;
  174. }
  175. if (data.version) {
  176. this._accountData.version = data.version;
  177. }
  178. if (data.cdn) {
  179. this._accountData.cdnUrl = data.cdn;
  180. }
  181. if (data.bulletin) {
  182. this._accountData.bulletin = data.bulletin;
  183. }
  184. if (data.platform) {
  185. this._accountData.platform = data.platform;
  186. }
  187. if (data.server_open_time) {
  188. this._accountData.serverOpenTime = data.server_open_time;
  189. }
  190. if (data.server_open_hour) {
  191. this._accountData.serverOpenHour = data.server_open_hour;
  192. }
  193. if (data.white) {
  194. this._accountData.white = data.white;
  195. }
  196. if (data.open_cdkey) {
  197. this._accountData.openCdkey = data.open_cdkey;
  198. }
  199. if (data.open_logout) {
  200. this._accountData.openLogout = data.open_logout;
  201. }
  202. if (data.download) {
  203. this._accountData.download = data.download;
  204. }
  205. }
  206. private initRoles(roleList?: { id: string; pic: string; name: string; uid: string; lv: string; last_time: string }[]): void {
  207. if (roleList) {
  208. for (const key in roleList) {
  209. let v = roleList[key];
  210. const t: Role = {
  211. sid: parseInt(v.id),
  212. headpic: parseInt(v.pic),
  213. role_name: v.name,
  214. uid: v.uid,
  215. lv: parseInt(v.lv),
  216. last_time: v.last_time,
  217. };
  218. this._roleServers.push(t);
  219. }
  220. }
  221. }
  222. private initServers(serverList: { id: string; name: string; status: string; host: string }[]): void {
  223. for (const key in serverList) {
  224. let v = serverList[key];
  225. const tab: Server = {
  226. sid: parseInt(v.id),
  227. name: v.name,
  228. status: parseInt(v.status),
  229. host: v.host,
  230. gs: parseInt(v.status) * 10000 + parseInt(v.id),
  231. };
  232. this._servers.push(tab);
  233. if (tab.status === 2) {
  234. this._recmdServers.push(tab);
  235. }
  236. for (const role of this._roleServers) {
  237. if (role.sid === tab.sid) {
  238. role.name = tab.name;
  239. role.status = tab.status;
  240. role.host = tab.host;
  241. role.gs = tab.gs;
  242. break;
  243. }
  244. }
  245. }
  246. this._roleServers.sort((a, b) => (a.last_time > b.last_time ? -1 : 1));
  247. this._servers.sort((a, b) => (a.gs > b.gs ? -1 : 1));
  248. this._recmdServers.sort((a, b) => (a.gs > b.gs ? -1 : 1));
  249. }
  250. getAccountData() {
  251. return this._accountData;
  252. }
  253. getAllServers() {
  254. return this._servers;
  255. }
  256. getRoleServers() {
  257. return this._roleServers;
  258. }
  259. getRecmdServers() {
  260. return this._recmdServers;
  261. }
  262. getServerBySid(sid: number): Server | undefined {
  263. let server = this._servers.find(v => v.sid === sid);
  264. if (!server) {
  265. if (this._servers.length <= 0) {
  266. // PromptMgr.showTips(Util.getString('110573'));
  267. }
  268. this._sid = this._servers[0]?.sid;
  269. server = this._servers[0];
  270. }
  271. return server;
  272. }
  273. }
  274. export let UserData = new Data;