MWSE/frontend/WSTSProtocol.ts

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] = JSON.parse(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");
}
}
}