first commit
This commit is contained in:
88
assets/scripts/network/socket/NetTimer.ts
Normal file
88
assets/scripts/network/socket/NetTimer.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user