89 lines
2.0 KiB
TypeScript
89 lines
2.0 KiB
TypeScript
|
|
import { _decorator } from 'cc';
|
|
import { NetEvent } from "./NetInterface";
|
|
import { EventMgr } from '../../utils/EventMgr';
|
|
|
|
|
|
export class NetTimerData {
|
|
public name:string = "";
|
|
public seq:number = 0;
|
|
public timeId:number = 0;
|
|
}
|
|
|
|
export class NetTimer {
|
|
private _tokens:any = null;
|
|
private _tokenId:number = 0;
|
|
public init(){
|
|
this._tokens = new Map();
|
|
this._tokenId = 0;
|
|
}
|
|
|
|
public schedule(data:any,delay:number = 0):void{
|
|
|
|
var self = this;
|
|
var token = this._tokenId++;
|
|
var id = setTimeout(function() { self.handleTimeout(token); }, delay);
|
|
|
|
var timerData = new NetTimerData();
|
|
timerData.name = data.name;
|
|
timerData.seq = data.seq;
|
|
timerData.timeId = id;
|
|
|
|
// console.log("NetTimer token size:",this._tokens.size,token)
|
|
this._tokens.set(token,timerData);
|
|
}
|
|
|
|
|
|
private handleTimeout(id:number = 0):void{
|
|
var data = this._tokens.get(id);
|
|
if(data){
|
|
EventMgr.emit(NetEvent.ServerTimeOut, data);
|
|
this._tokens.delete(id);
|
|
}
|
|
}
|
|
|
|
|
|
public cancel(data:any):void{
|
|
if(data == null){
|
|
return
|
|
}
|
|
var id = -1;
|
|
if(typeof(data)=='object'){
|
|
id = this.getKey(data);
|
|
}else{
|
|
id = data;
|
|
}
|
|
|
|
// console.log("NetTimer token id:",id)
|
|
if(id >= 0){
|
|
this._tokens.delete(id);
|
|
clearTimeout(id);
|
|
// console.log("NetTimer token cancel:",this._tokens.size)
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private getKey(data:any):number{
|
|
var return_key = -1;
|
|
this._tokens.forEach((value , key) =>{
|
|
if(value.name == data.name && value.seq == data.seq){
|
|
return_key = key;
|
|
}
|
|
});
|
|
|
|
return return_key;
|
|
}
|
|
|
|
|
|
public destroy():void{
|
|
var self = this;
|
|
this._tokens.forEach(function(key, value){
|
|
self.cancel(key);
|
|
});
|
|
this._tokens.clear();
|
|
}
|
|
|
|
}
|