diff --git a/assets/Script/network/NetManager.ts b/assets/Script/network/NetManager.ts index d8fb44a..da4f9c4 100644 --- a/assets/Script/network/NetManager.ts +++ b/assets/Script/network/NetManager.ts @@ -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]) { diff --git a/assets/Script/network/NetNode.ts b/assets/Script/network/NetNode.ts index 39cce58..e7fd1af 100644 --- a/assets/Script/network/NetNode.ts +++ b/assets/Script/network/NetNode.ts @@ -55,6 +55,7 @@ export class NetNode { protected _receiveTime: number = 6000000; // 多久没收到数据断开 protected _reconnetTimeOut: number = 8000000; // 重连间隔 protected _requests: RequestObject[] = Array(); // 请求列表 + 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++) {