Files
jdt-fish-client/assets/FishSingle/script/engine/utils/HttpClient.ts
2024-05-01 19:13:01 +08:00

131 lines
4.3 KiB
TypeScript

import { _decorator } from 'cc'
import { Logger } from './Logger'
const { ccclass } = _decorator
@ccclass('HttpClient')
export default class HttpClient {
public static instance: HttpClient // = new HttpClient();
// example
// HttpClient.instance.request("http://localhost:8080/haohttp/test", ()=>{
// console.log("http 请求 end=============");
// }, {"nickName":"jhao", "hh":1, "id":9527});
private methodType: string = 'GET'
private responseType: XMLHttpRequestResponseType = 'json'
private xhr: XMLHttpRequest
// --GET or POST
public setMethod(method: string = 'GET') {
this.methodType = method
}
public setParams(paramsObj: object): string {
let resParams = ''
let nowIndex = 1
for (const key in paramsObj) {
if (Object.prototype.hasOwnProperty.call(paramsObj, key)) {
if (nowIndex === 1) resParams += `${key}=${paramsObj[key]}`
else resParams += `&${key}=${paramsObj[key]}`
nowIndex += 1
}
}
Logger.log(this, 'resParam===============', resParams)
return resParams
}
public setResponseType(responseType: XMLHttpRequestResponseType) {
this.responseType = responseType
}
public setContentType() {}
public request(url: string, callback: Function, params: any = null, timeOut: number = 5 * 1000) {
if (params && this.methodType === 'GET') {
let getParams: string = this.setParams(params)
// getParams = StringUtil:encodeURI(params)
getParams = encodeURI(getParams)
url += `?${getParams}`
}
this.xhr = new XMLHttpRequest() // http请求 fget
// this.xhr = cc.loader.getXMLHttpRequest();
const xhr: XMLHttpRequest = this.xhr
xhr.responseType = this.responseType
xhr.timeout = timeOut
// xhr.setRequestHeader("Content-Type", "text/plain");
xhr.onreadystatechange = () => {
Logger.log(this, 'status======', xhr.status, xhr.readyState, xhr.statusText)
// if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) {
if (xhr.readyState === 4 && xhr.status === 200) {
const response = xhr.response
Logger.log(this, 'http response1============', xhr)
try {
const testJson = JSON.stringify(response)
Logger.log(this, 'http response json============', testJson)
if (callback) {
callback(true, response)
callback = null
}
} catch (error) {
Logger.error(this, 'http response json=====error=======', error)
if (callback) {
callback(false)
callback = null
}
}
} else if (xhr.readyState === 4 && xhr.status === 301) {
// 域名转移
Logger.log(this, 'http response222============', xhr.getResponseHeader('Location'))
// console.log("http response333============", xhr.getAllResponseHeaders());
if (HttpClient.instance == null) HttpClient.instance = new HttpClient()
HttpClient.instance.request(xhr.getResponseHeader('Location'), callback)
} else if (xhr.readyState === 4 && xhr.status === 404) {
Logger.log(this, 'http onError============')
if (callback) {
callback(false)
callback = null
}
} else {
Logger.log(this, 'onreadystatechange else====', xhr.status, xhr.readyState, xhr.response)
if (xhr.readyState === 4) {
Logger.log(this, 'http onError else============')
if (callback) {
callback(false)
callback = null
}
}
}
}
xhr.onprogress = () => {
Logger.log(this, 'http onprogress===', xhr.status, xhr.readyState, xhr.response)
}
xhr.onerror = () => {
Logger.log(this, 'http onError============')
if (callback) {
callback(false)
callback = null
}
}
xhr.ontimeout = () => {
Logger.log(this, 'http ontimeout============')
if (callback) {
callback(false)
callback = null
}
}
Logger.log(this, 'http request==============', url)
Logger.log(this, 'http request======method========', this.methodType)
Logger.log(this, 'http request======params========', params)
xhr.open(this.methodType, url, true)
xhr.setRequestHeader('content-type', 'text/plain;charset=UTF-8')
xhr.send(params)
}
public getInfo(callback: Function = null) {}
}