189 lines
5.0 KiB
JavaScript
189 lines
5.0 KiB
JavaScript
/*******************************************************************************
|
|
*
|
|
* Nx WEB单任务
|
|
*
|
|
*
|
|
*
|
|
* 2021.12.10
|
|
******************************************************************************/
|
|
|
|
const ERR = require( "error" );
|
|
const NxObject = require( "nx.object" );
|
|
const Crypto = require( "cryptoHelper" );
|
|
|
|
const TimeOut = 5000;
|
|
|
|
var NxWebTask = cc.Class( {
|
|
|
|
extends: NxObject,
|
|
name: "NxWebTask",
|
|
|
|
// 初始化
|
|
initialize: function( _args ) {
|
|
|
|
// USPER
|
|
if( !this._super( _args ) ) {
|
|
return false;
|
|
}
|
|
|
|
this.key = _args.key; // 唯一键值
|
|
this.manager = _args.mgr; // 管理器
|
|
this.reqType = _args.reqType; // 请求类型
|
|
this.reqURL = _args.reqURL; // 请求路径
|
|
this.reqArgs = _args.reqArgs; // 请求参数表
|
|
this.reqTime = null; // 请求时间
|
|
this.ansType = "text"; // 回复类型
|
|
this.ansTime = null; // 回复时间
|
|
this.ansCode = 0; // 回复错误码
|
|
this.ansData = null; // 回复内容
|
|
this.listener = _args.cb; // 监听回调
|
|
this.crypto = _args.crypto; // 是否需要加密
|
|
|
|
return true;
|
|
},
|
|
|
|
// 销毁
|
|
uninitialize: function() {
|
|
|
|
// USPER
|
|
return this._super();
|
|
},
|
|
|
|
// 发送请求
|
|
send: function() {
|
|
|
|
// 时间记录
|
|
this.reqTime = cc.sys.now();
|
|
|
|
// 发送
|
|
let xhr = this._genXHR();
|
|
let text = nx.dt.enjson( this.reqArgs );
|
|
xhr.send( this.crypto ? Crypto.encrypt( text ) : text );
|
|
nx.debug( "[WebTask][%s] ===> %s 参数:%s", this.reqType, this.reqURL, text );
|
|
|
|
},
|
|
|
|
// 上传
|
|
upload: function( _data ) {
|
|
|
|
// 时间记录
|
|
this.reqTime = cc.sys.now();
|
|
|
|
// 参数序列化
|
|
let args = "";
|
|
if( nx.dt.objNEmpty( this.reqArgs ) ) {
|
|
args = "?";
|
|
for( let key in this.reqArgs ) {
|
|
if( args != "?" ) args += "&";
|
|
args += key + "=" + this.reqArgs[key];
|
|
}
|
|
}
|
|
|
|
this.reqURL += args;
|
|
this.reqType = "POST";
|
|
|
|
// 发送
|
|
let xhr = this._genXHR();
|
|
// xhr.send( encodeURI(_data) );
|
|
xhr.send( _data );
|
|
nx.debug( "[WebTask][%s] ===> %s 参数:%s", this.reqType, this.reqURL );
|
|
|
|
},
|
|
|
|
// 结果回调
|
|
responsed: function( _code, _params ) {
|
|
|
|
this.ansCode = _code;
|
|
this.ansTime = cc.sys.now();
|
|
|
|
const usedms = this.ansTime - this.reqTime;
|
|
|
|
// Web网路级错误
|
|
if( _code != ERR.OK ) {
|
|
nx.error( "[WebTask]发生错误: code:%s reason:%s", _code, _params || "none" );
|
|
this.ansData = {};
|
|
this.manager._onTaskCallback( this );
|
|
return;
|
|
}
|
|
|
|
// 解密
|
|
try {
|
|
nx.debug( "[WebTask][%s][%dms] <=== %s 参数:%s", this.reqType, usedms, this.reqURL, _params );
|
|
let data = "ok";
|
|
if( nx.dt.strNEmpty( _params ) ) {
|
|
if( this.crypto ) {
|
|
_params = Crypto.decrypt( _params );
|
|
}
|
|
data = nx.dt.dejson( _params );
|
|
}
|
|
this.ansData = data;
|
|
}
|
|
catch( e ) {
|
|
nx.error( "[WebTask][%s] <=== %s 参数解密失败!", this.reqType, this.reqURL );
|
|
this.ansData = {};
|
|
}
|
|
|
|
this.manager._onTaskCallback( this );
|
|
|
|
},
|
|
|
|
// 创建XHR
|
|
_genXHR: function( _ctype ) {
|
|
|
|
let self = this;
|
|
let xhr = new XMLHttpRequest();
|
|
|
|
xhr.open( this.reqType, this.reqURL, true );
|
|
xhr.setRequestHeader( "Content-Type", _ctype || "text/plain" );
|
|
// xhr.setRequestHeader( "TK", encodeURI( this.manager.token || "" ) );
|
|
xhr.responseType = this.ansType;
|
|
xhr.timeout = TimeOut;
|
|
|
|
// 错误处理
|
|
xhr.onerror = function( _err ) {
|
|
self.responsed( ERR.NET.WebError, _err ? _err.message : "unknown" );
|
|
};
|
|
|
|
// 超时处理
|
|
xhr.ontimeout = function() {
|
|
self.responsed( ERR.TimeOut );
|
|
};
|
|
|
|
// 终止处理
|
|
xhr.onabort = function() {
|
|
self.responsed( ERR.NET.Abort );
|
|
};
|
|
|
|
// 请求完成处理
|
|
xhr.onreadystatechange = function() {
|
|
|
|
if( !xhr || xhr.readyState != 4 || xhr.status == 0 ) {
|
|
return;
|
|
}
|
|
|
|
if( xhr.status < 200 || xhr.status >= 400 ) {
|
|
self.responsed( ( xhr.status == 404 ) ? ERR.NET.URLInvalid : ERR.Unkown );
|
|
return;
|
|
}
|
|
|
|
// Token更新
|
|
// let token = xhr.getResponseHeader( "TK" );
|
|
// if( nx.dt.strNEmpty( token ) ) {
|
|
// self.manager.token = token;
|
|
// }
|
|
|
|
// 内容解析
|
|
var resp = xhr.responseText == "text" ? xhr.responseText : xhr.response;
|
|
self.responsed( ERR.OK, resp );
|
|
|
|
xhr = null;
|
|
};
|
|
|
|
return xhr;
|
|
|
|
},
|
|
|
|
} );
|
|
|
|
module.exports = NxWebTask;
|