HttpSystem.ts 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /**
  2. * @description http请求管理类
  3. * @author 邹勇
  4. */
  5. export default class HttpSystem {
  6. constructor() {
  7. }
  8. /**
  9. * 游戏接口,通用
  10. * @param url 接口完整地址
  11. * @param data 加密前数据
  12. * @param async 是否异步请求(后端要求防阻塞)
  13. */
  14. public async sendData(url, data: any, async = true) {
  15. let encode = '';
  16. let dataN = null;
  17. data.timestamp = Math.floor(new Date().getTime() / 1000);
  18. data.appVersion = gData.appData.appVersion;
  19. data.tfChannel = gData.appData.tfChannel;
  20. data.versioncfg = gData.appData.version;
  21. data.tfSubChannel = 0;
  22. encode = mk.encrypt.encrypt(JSON.stringify(data), gData.loginData.sessionKey, gData.appData.appId);
  23. dataN = {
  24. "uin": gData.loginData.uin,
  25. "encrypt": encode
  26. }
  27. let result = await this.sendRequest(url, 'POST', JSON.stringify(dataN), false, async);
  28. return this.checkData(result);
  29. }
  30. /**
  31. * http请求 登录用
  32. * @param url 请求头
  33. * @param method 'GET' || 'POST'
  34. * @param data 数据
  35. * @param isRsa 是否加密
  36. * @param async 是否异步请求
  37. */
  38. public sendRequest(url, method: string = 'POST', data: string = null, isRsa: boolean = true, async = true) {
  39. url = gData.httpData.getServerUrl() + url;
  40. return new Promise<any>((resolve: (data: any) => void, reject) => {
  41. let requesttimes = 0;
  42. let httpRequest = new XMLHttpRequest();
  43. let send = () => {
  44. httpRequest.open(method, url, async);
  45. httpRequest.setRequestHeader("Content-Type", 'application/json;charset=UTF-8');
  46. if (isRsa && data != null) {
  47. data = mk.encrypt.rsaEncrypt(data);
  48. }
  49. httpRequest.send(data);
  50. };
  51. // httpRequest.timeout = 30000;
  52. httpRequest.onreadystatechange = function () {
  53. if (httpRequest.readyState === 4) {
  54. if (httpRequest.status === 200) {
  55. var responseStr = httpRequest.responseText;
  56. let response = JSON.parse(responseStr);
  57. mk.console.logSingle("response:" + url, response)
  58. resolve(response);
  59. }
  60. else {
  61. mk.console.error("httpRequest.status", httpRequest.status);
  62. reject({ errcode: 1, errmsg: "status..." + httpRequest.status });
  63. }
  64. }
  65. }
  66. httpRequest.ontimeout = function (e) {
  67. requesttimes++;
  68. if (requesttimes >= 3) {
  69. mk.console.error("http.ontimeout", url);
  70. reject({ errcode: 1, errmsg: "ontimeout" });
  71. }
  72. else {
  73. send();
  74. }
  75. };
  76. httpRequest.onerror = function (e) {
  77. mk.console.error("http.onerror", url);
  78. mk.console.logSingle("http.onerror", e);
  79. reject({ errcode: 1, errmsg: "onerror" });
  80. };
  81. send();
  82. });
  83. }
  84. /**
  85. * 检测用明文还是密文
  86. * @param response 返回消息
  87. * @param forceData true 明文 false 有密文优先密文,没密文情况下用明文
  88. */
  89. checkData(response, forceData = false) {
  90. let data = null
  91. if (forceData) {
  92. data = response.data;
  93. }
  94. else {
  95. if (response.encrypt) {
  96. data = mk.encrypt.decrypt(response.encrypt, gData.loginData.sessionKey, gData.appData.appId);
  97. data = JSON.parse(data);
  98. }
  99. else if (response.data) {
  100. data = response.data;
  101. }
  102. }
  103. response.data = data;
  104. if (response.errcode != 0) {
  105. if (response.errcode == 403) {
  106. gData.warnTipData.setSolution(4);
  107. }
  108. }
  109. return response;
  110. }
  111. /**
  112. * http普通请求
  113. * @param url 请求头
  114. * @param method 'GET' || 'POST'
  115. * @param data 数据
  116. * @param isRsa 是否加密
  117. * @param async 是否异步请求
  118. */
  119. public sendRequestNormal(url, method: string = 'POST', data: string = null) {
  120. return new Promise<any>((resolve: (data: any) => void, reject) => {
  121. let requesttimes = 0;
  122. let httpRequest = new XMLHttpRequest();
  123. let send = () => {
  124. httpRequest.open(method, url);
  125. httpRequest.setRequestHeader("Content-Type", 'application/json;charset=UTF-8');
  126. httpRequest.send(data);
  127. };
  128. // httpRequest.timeout = 30000;
  129. httpRequest.onreadystatechange = function () {
  130. if (httpRequest.readyState === 4) {
  131. if (httpRequest.status === 200) {
  132. var responseStr = httpRequest.responseText;
  133. let response = JSON.parse(responseStr);
  134. mk.console.logSingle("response:" + url, response)
  135. resolve(response);
  136. }
  137. else {
  138. mk.console.error("httpRequest.status", httpRequest.status);
  139. reject({ errcode: 1, errmsg: "status..." + httpRequest.status });
  140. }
  141. }
  142. }
  143. httpRequest.ontimeout = function (e) {
  144. requesttimes++;
  145. if (requesttimes >= 3) {
  146. mk.console.error("http.ontimeout", url);
  147. reject({ errcode: 1, errmsg: "ontimeout" });
  148. }
  149. else {
  150. send();
  151. }
  152. };
  153. httpRequest.onerror = function (e) {
  154. mk.console.error("http.onerror", url);
  155. reject({ errcode: 1, errmsg: "onerror" });
  156. };
  157. send();
  158. });
  159. }
  160. }