66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
import MWSE from "./index";
 | 
						|
 | 
						|
export interface Message {
 | 
						|
    [key:string|number]:any;
 | 
						|
}
 | 
						|
export default class WSTSProtocol
 | 
						|
{
 | 
						|
    public mwse : MWSE;
 | 
						|
    constructor(wsts:MWSE){
 | 
						|
        this.mwse = wsts;
 | 
						|
        this.addListener();
 | 
						|
    }
 | 
						|
    public addListener()
 | 
						|
    {
 | 
						|
        this.mwse.server?.onRecaivePack((pack)=>{
 | 
						|
            this.PackAnalyze(pack)
 | 
						|
        })
 | 
						|
    }
 | 
						|
    public SendRaw(pack: Message)
 | 
						|
    {
 | 
						|
        this.mwse.server.tranferToServer(pack);
 | 
						|
    }
 | 
						|
    public SendOnly(pack: Message)
 | 
						|
    {
 | 
						|
        this.mwse.server.tranferToServer([pack,'R']);
 | 
						|
    }
 | 
						|
    public SendRequest(pack: Message, id: number)
 | 
						|
    {
 | 
						|
        this.mwse.server.tranferToServer([pack, id, 'R']);
 | 
						|
    }
 | 
						|
    public StartStream(pack: Message, id: number)
 | 
						|
    {
 | 
						|
        this.mwse.server.tranferToServer([pack, id, 'S']);
 | 
						|
    }
 | 
						|
    public PackAnalyze(data:any)
 | 
						|
    {
 | 
						|
        let [payload, id, action] = data;
 | 
						|
        if(typeof id === 'number')
 | 
						|
        {
 | 
						|
            let callback = this.mwse.EventPooling.events.get(id);
 | 
						|
            if(callback)
 | 
						|
            {
 | 
						|
                callback[0](payload, action);
 | 
						|
                switch(action)
 | 
						|
                {
 | 
						|
                    case 'E':{  // [E]ND flag
 | 
						|
                        this.mwse.EventPooling.events.delete(id);
 | 
						|
                        break;
 | 
						|
                    }
 | 
						|
                    case 'S':  // [S]TREAM flag
 | 
						|
                    default:{
 | 
						|
                        break;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }else console.warn("Missing event sended from server");
 | 
						|
        }else{
 | 
						|
            let signals = this.mwse.EventPooling.signals.get(id);
 | 
						|
            if(signals)
 | 
						|
            {
 | 
						|
                for (const callback of signals) {
 | 
						|
                    callback(payload);
 | 
						|
                }
 | 
						|
            }else console.warn("Missing event sended from server");
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |