Files
2025-11-18 18:38:53 +08:00

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();
}
}