mirror of
https://github.com/wyb10a10/cocos_creator_framework.git
synced 2026-06-07 22:43:13 +08:00
添加requestUnique接口,避免同一请求的重复发送
This commit is contained in:
@@ -45,13 +45,23 @@ export class NetManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
public request(buf: NetData, rspCmd: number, rspObject: CallbackObject, showTips: boolean = true, force: boolean = false, channelId: number) {
|
||||
// 发起请求,并在在结果返回时调用指定好的回调函数
|
||||
public request(buf: NetData, rspCmd: number, rspObject: CallbackObject, showTips: boolean = true, force: boolean = false, channelId: number = 0) {
|
||||
let node = this._channels[channelId];
|
||||
if(node) {
|
||||
node.request(buf, rspCmd, rspObject, showTips, force);
|
||||
}
|
||||
}
|
||||
|
||||
// 同request,但在request之前会先判断队列中是否已有rspCmd,如有重复的则直接返回
|
||||
public requestUnique(buf: NetData, rspCmd: number, rspObject: CallbackObject, showTips: boolean = true, force: boolean = false, channelId: number = 0): boolean {
|
||||
let node = this._channels[channelId];
|
||||
if(node) {
|
||||
return node.requestUnique(buf, rspCmd, rspObject, showTips, force);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 调用Node关闭
|
||||
public close(code?: number, reason?: string, channelId: number = 0) {
|
||||
if (this._channels[channelId]) {
|
||||
|
||||
@@ -55,6 +55,7 @@ export class NetNode {
|
||||
protected _receiveTime: number = 6000000; // 多久没收到数据断开
|
||||
protected _reconnetTimeOut: number = 8000000; // 重连间隔
|
||||
protected _requests: RequestObject[] = Array<RequestObject>(); // 请求列表
|
||||
protected _
|
||||
protected _listener: { [key: number]: CallbackObject[] } = {} // 监听者列表
|
||||
|
||||
/********************** 网络相关处理 *********************/
|
||||
@@ -257,7 +258,7 @@ export class NetNode {
|
||||
}
|
||||
}
|
||||
|
||||
// 发起请求,并进入缓存列表,
|
||||
// 发起请求,并进入缓存列表
|
||||
public request(buf: NetData, rspCmd: number, rspObject: CallbackObject, showTips: boolean = true, force: boolean = false) {
|
||||
if (this._state == NetNodeState.Working || force) {
|
||||
this._socket.send(buf);
|
||||
@@ -273,6 +274,18 @@ export class NetNode {
|
||||
}
|
||||
}
|
||||
|
||||
// 唯一request,确保没有同一响应的请求(避免一个请求重复发送,netTips界面的屏蔽也是一个好的方法)
|
||||
public requestUnique(buf: NetData, rspCmd: number, rspObject: CallbackObject, showTips: boolean = true, force: boolean = false):boolean {
|
||||
for (let i = 0; i < this._requests.length; ++i) {
|
||||
if (this._requests[i].rspCmd == rspCmd) {
|
||||
console.log(`NetNode requestUnique faile for ${rspCmd}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
this.request(buf, rspCmd, rspObject, showTips, force);
|
||||
return true;
|
||||
}
|
||||
|
||||
/********************** 回调相关处理 *********************/
|
||||
public setResponeHandler(cmd: number, callback: NetCallFunc, target?: any): boolean {
|
||||
if (callback == null) {
|
||||
@@ -309,6 +322,14 @@ export class NetNode {
|
||||
}
|
||||
}
|
||||
|
||||
public cleanListeners(cmd: number = -1) {
|
||||
if (cmd == -1) {
|
||||
this._listener = {}
|
||||
} else {
|
||||
this._listener[cmd] = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected getNetListenersIndex(cmd: number, rspObject: CallbackObject): number {
|
||||
let index = -1;
|
||||
for (let i = 0; i < this._listener[cmd].length; i++) {
|
||||
|
||||
Reference in New Issue
Block a user