UserData.ts 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  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 _areaId: 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._roleServers = [];
  142. this._servers = [];
  143. this._recmdServers = [];
  144. this.initAccount(data);
  145. this.initRoles(data.role_list);
  146. if (data.server_list) {
  147. this.initServers(data.server_list);
  148. }
  149. if (data.lastsid && data.lastsid > 0) {
  150. UserData.setSid(data.lastsid, true);
  151. }
  152. }
  153. setSid(sid: number, flag: boolean): void {
  154. this._sid = sid;
  155. if (flag) {
  156. this._saveData('lastsid',sid);
  157. }
  158. }
  159. getSid(){
  160. return this._sid;
  161. }
  162. setAreanId(areanId: string): void {
  163. this._areaId = areanId;
  164. }
  165. getAreanId(){
  166. return this._areaId;
  167. }
  168. private initAccount(data) {
  169. if (data.openid) {
  170. this._accountData.openId = data.openid;
  171. }
  172. if (data.openkey) {
  173. this._accountData.openKey = data.openkey;
  174. }
  175. if (data.sdkuid) {
  176. this._accountData.sdkUid = data.sdkuid;
  177. }
  178. if (data.cdkey) {
  179. this._accountData.cdkeyUrl = data.cdkey;
  180. }
  181. if (data.version) {
  182. this._accountData.version = data.version;
  183. }
  184. if (data.cdn) {
  185. this._accountData.cdnUrl = data.cdn;
  186. }
  187. if (data.bulletin) {
  188. this._accountData.bulletin = data.bulletin;
  189. }
  190. if (data.platform) {
  191. this._accountData.platform = data.platform;
  192. }
  193. if (data.server_open_time) {
  194. this._accountData.serverOpenTime = data.server_open_time;
  195. }
  196. if (data.server_open_hour) {
  197. this._accountData.serverOpenHour = data.server_open_hour;
  198. }
  199. if (data.white) {
  200. this._accountData.white = data.white;
  201. }
  202. if (data.open_cdkey) {
  203. this._accountData.openCdkey = data.open_cdkey;
  204. }
  205. if (data.open_logout) {
  206. this._accountData.openLogout = data.open_logout;
  207. }
  208. if (data.download) {
  209. this._accountData.download = data.download;
  210. }
  211. }
  212. private initRoles(roleList?: { id: string; pic: string; name: string; uid: string; lv: string; last_time: string }[]): void {
  213. if (roleList) {
  214. for (const key in roleList) {
  215. let v = roleList[key];
  216. const t: Role = {
  217. sid: parseInt(v.id),
  218. headpic: parseInt(v.pic),
  219. role_name: v.name,
  220. uid: v.uid,
  221. lv: parseInt(v.lv),
  222. last_time: v.last_time,
  223. };
  224. this._roleServers.push(t);
  225. }
  226. }
  227. }
  228. private initServers(serverList: { id: string; name: string; status: string; host: string }[]): void {
  229. for (const key in serverList) {
  230. let v = serverList[key];
  231. const tab: Server = {
  232. sid: parseInt(v.id),
  233. name: v.name,
  234. status: parseInt(v.status),
  235. host: v.host,
  236. gs: parseInt(v.status) * 10000 + parseInt(v.id),
  237. };
  238. this._servers.push(tab);
  239. if (tab.status === 2) {
  240. this._recmdServers.push(tab);
  241. }
  242. for (const role of this._roleServers) {
  243. if (role.sid === tab.sid) {
  244. role.name = tab.name;
  245. role.status = tab.status;
  246. role.host = tab.host;
  247. role.gs = tab.gs;
  248. break;
  249. }
  250. }
  251. }
  252. this._roleServers.sort((a, b) => (a.last_time > b.last_time ? -1 : 1));
  253. this._servers.sort((a, b) => (a.gs > b.gs ? -1 : 1));
  254. this._recmdServers.sort((a, b) => (a.gs > b.gs ? -1 : 1));
  255. }
  256. getAccountData() {
  257. return this._accountData;
  258. }
  259. getAllServers() {
  260. return this._servers;
  261. }
  262. getRoleServers() {
  263. return this._roleServers;
  264. }
  265. getRecmdServers() {
  266. return this._recmdServers;
  267. }
  268. getServerBySid(sid: number): Server | undefined {
  269. let server = this._servers.find(v => v.sid === sid);
  270. if (!server) {
  271. if (this._servers.length <= 0) {
  272. // PromptMgr.showTips(Util.getString('110573'));
  273. }
  274. this._sid = this._servers[0]?.sid;
  275. server = this._servers[0];
  276. }
  277. return server;
  278. }
  279. }
  280. export let UserData = new Data;