3 lines
8.9 KiB
JavaScript
3 lines
8.9 KiB
JavaScript
(()=>{class e{autoPair=!1;connected=!1;constructor(e){this.endpoint=new URL(e.endpoint),this.autoPair=e.autoPair||!1}connect(){this.ws=new WebSocket(this.endpoint.href),this.addWSEvents()}disconnect(){this.ws.close()}addWSEvents(){this.ws.addEventListener("open",(()=>this.eventOpen())),this.ws.addEventListener("close",(()=>this.eventClose())),this.ws.addEventListener("error",(()=>this.eventError())),this.ws.addEventListener("message",(({data:e})=>this.eventMessage(e)))}eventOpen(){this.connected=!0;for(const e of this.activeConnectionEvent)e(void 0)}eventClose(){this.connected=!1}eventError(){this.connected=!1}recaivePackEvent=[];onRecaivePack(e){this.recaivePackEvent.push(e)}activeConnectionEvent=[];onActive(e){this.connected?e():this.activeConnectionEvent.push(e)}eventMessage(e){if("string"==typeof e){let s=JSON.parse(e);for(const e of this.recaivePackEvent)e(s)}}tranferToServer(e){this.connected&&this.ws.send(JSON.stringify(e))}}class s{events=new Map;signals=new Map;requests=new Map;count=0;constructor(e){this.wsts=e}request(e){return new Promise(((s,t)=>{let o=++this.count;this.wsts.WSTSProtocol.SendRequest(e,o),this.events.set(o,[e=>{s(e)},e=>{t(e)}])}))}stream(e,s){let t=++this.count;this.wsts.WSTSProtocol.StartStream(e,t),this.events.set(t,[e=>{s(e)},()=>{}])}signal(e,s){let t=this.signals.get(e);t?t.push(s):this.signals.set(e,[s])}}class t{events={};emit(e,...s){if(this.events[e])for(const t of this.events[e])t(...s)}on(e,s){this.events[e]?this.events[e].push(s):this.events[e]=[s]}activeScope=!1;scope(e){this.activeScope?e():this.on("scope",e)}}class o{constructor(e){this.mwse=e}async allocAPIPAddress(){let{status:e,ip:s}=await this.mwse.EventPooling.request({type:"alloc/APIPAddress"});if("success"==e)return this.APIPAddress=s,s;throw new Error("Error Allocated Access Point IP Address")}async allocAPNumber(){let{status:e,number:s}=await this.mwse.EventPooling.request({type:"alloc/APNumber"});if("success"==e)return this.APNumber=s,s;throw new Error("Error Allocated Access Point Number")}async allocAPShortCode(){let{status:e,code:s}=await this.mwse.EventPooling.request({type:"alloc/APShortCode"});if("success"==e)return this.APShortCode=s,s;throw new Error("Error Allocated Access Point Short Code")}async reallocAPIPAddress(){let{status:e,ip:s}=await this.mwse.EventPooling.request({type:"realloc/APIPAddress"});if("success"==e)return this.APIPAddress=s,s;throw new Error("Error Reallocated Access Point IP Address")}async reallocAPNumber(){let{status:e,number:s}=await this.mwse.EventPooling.request({type:"realloc/APNumber"});if("success"==e)return this.APNumber=s,s;throw new Error("Error Reallocated Access Point Number")}async reallocAPShortCode(){let{status:e,code:s}=await this.mwse.EventPooling.request({type:"realloc/APShortCode"});if("success"==e)return this.APShortCode=s,s;throw new Error("Error Reallocated Access Point Short Code")}async releaseAPIPAddress(){let{status:e}=await this.mwse.EventPooling.request({type:"release/APIPAddress"});if("success"!=e)throw new Error("Error release Access Point IP Address");this.APIPAddress=void 0}async releaseAPNumber(){let{status:e}=await this.mwse.EventPooling.request({type:"release/APNumber"});if("success"!=e)throw new Error("Error release Access Point Number");this.APNumber=void 0}async releaseAPShortCode(){let{status:e}=await this.mwse.EventPooling.request({type:"release/APShortCode"});if("success"!=e)throw new Error("Error release Access Point Short Code");this.APShortCode=void 0}async queryAPIPAddress(e){let{status:s,socket:t}=await this.mwse.EventPooling.request({type:"whois/APIPAddress",whois:e});return"success"==s?t:null}async queryAPNumber(e){let{status:s,socket:t}=await this.mwse.EventPooling.request({type:"whois/APNumber",whois:e});return"success"==s?t:null}async queryAPShortCode(e){let{status:s,socket:t}=await this.mwse.EventPooling.request({type:"whois/APShortCode",whois:e});return"success"==s?t:null}}class i extends t{options={};selfSocket=!1;active=!1;constructor(e){super(),this.mwse=e}setPeerOptions(e){"string"==typeof e?this.setSocketId(e):this.options=e}setSocketId(e){this.socketId=e}async metadata(){if("me"==this.socketId){let e=await this.mwse.EventPooling.request({type:"my/socketid"});return this.selfSocket=!0,this.active||=!0,this.socketId=e,this.emit("scope"),this.activeScope=!0,e}}async request(e){if(this.active)return await this.mwse.request(this.socketId,e)}equalTo(e){return this.socketId==e.socketId}async isReachable(){return await this.mwse.EventPooling.request({type:"is/reachable",to:this.socketId})}async enablePairAuth(){await this.mwse.EventPooling.request({type:"auth/pair-system",value:"everybody"})}async disablePairAuth(){await this.mwse.EventPooling.request({type:"auth/pair-system",value:"disable"})}async send(e){await this.mwse.EventPooling.request({type:"pack/to",pack:e,to:this.socketId})}async forget(){this.mwse.peers.delete(this.socketId),this.mwse.pairs.delete(this.socketId)}}class r extends t{peers=new Map;constructor(e){super(),this.mwse=e}setRoomOptions(e){if("string"==typeof e)this.roomId=e;else{let s={joinType:"free",ifexistsJoin:!0,accessType:"private",notifyActionInvite:!0,notifyActionJoined:!0,notifyActionEjected:!0};Object.assign(s,e),this.options=s}}setRoomId(e){this.roomId=e}async createRoom(e){let s=this.options||e,t=await this.mwse.EventPooling.request({type:"create-room",...s});if("fail"==t.status){if("ALREADY-EXISTS"==t.message&&this.options.ifexistsJoin)return this.join();throw new Error(t.message||t.messages)}this.options={...this.options,...t.room},this.roomId=t.room.id,this.mwse.rooms.set(this.roomId,this)}async join(){let e=await this.mwse.EventPooling.request({type:"joinroom",name:this.options.name,credential:this.options.credential});if("fail"==e.status)throw new Error(e.message);this.options={...this.options,...e.room},this.roomId=e.room.id,this.mwse.rooms.set(this.roomId,this)}async eject(){let{type:e}=await this.mwse.EventPooling.request({type:"ejectroom",roomId:this.roomId});this.peers.clear(),"success"==e&&this.mwse.rooms.delete(this.roomId)}async send(e,s=!1){await this.mwse.EventPooling.request({type:"pack/room",pack:e,to:this.roomId,wom:s})}async fetchAllPeers(){let{status:e,peers:s}=await this.mwse.EventPooling.request({type:"room-peers",roomId:this.roomId}),t=[];if("fail"==e)throw new Error("Cant using peers on room");if("success"==e)for(const e of s){let s=this.mwse.peer(e);t.push(s),this.peers.set(e,s)}return t}}class n{constructor(e){this.mwse=e,this.addListener()}addListener(){this.mwse.server?.onRecaivePack((e=>{this.PackAnalyze(e)}))}SendRaw(e){this.mwse.server.tranferToServer(e)}SendOnly(e){this.mwse.server.tranferToServer([e,"R"])}SendRequest(e,s){this.mwse.server.tranferToServer([e,s,"R"])}StartStream(e,s){this.mwse.server.tranferToServer([e,s,"S"])}PackAnalyze(e){let[s,t,o]=e;if("number"==typeof t){let e=this.mwse.EventPooling.events.get(t);if(e){if(e[0](s,o),"E"===o)this.mwse.EventPooling.events.delete(t)}else console.warn("Missing event sended from server")}else{let e=this.mwse.EventPooling.signals.get(t);if(e)for(const t of e)t(s);else console.warn("Missing event sended from server")}}}window.MWSE=class extends t{rooms=new Map;pairs=new Map;peers=new Map;constructor(t){super(),this.server=new e(t),this.WSTSProtocol=new n(this),this.EventPooling=new s(this),this.virtualPressure=new o(this),this.server.connect(),this.me=new i(this),this.me.scope((()=>{this.peers.set("me",this.me),this.peers.set(this.me.socketId,this.me)})),this.server.onActive((async()=>{this.me.setSocketId("me"),await this.me.metadata(),this.emit("scope"),this.activeScope=!0})),this.packMessagingSystem()}async request(e,s){let{pack:t}=await this.EventPooling.request({type:"request/to",to:e,pack:s});return t}async response(e,s,t){this.WSTSProtocol.SendOnly({type:"response/to",to:e,pack:t,id:s})}packMessagingSystem(){this.EventPooling.signal("pack",(e=>{let{from:s,pack:t}=e;this.peer(s,!0).emit("message",t)})),this.EventPooling.signal("request",(e=>{let{from:s,pack:t,id:o}=e,i={body:t,response:e=>{this.response(s,o,e)},peer:this.peer(s,!0)};this.peer(s,!0).emit("request",i),this.peer("me").emit("request",i)})),this.EventPooling.signal("pack/room",(e=>{let{from:s,pack:t}=e;this.room(s).emit("message",t)})),this.EventPooling.signal("room/joined",(e=>{let{id:s,roomid:t}=e,o=this.room(t),i=this.peer(s,!0);o.peers.set(i.socketId,i),o.emit("join",i)})),this.EventPooling.signal("room/ejected",(e=>{let{id:s,roomid:t}=e,o=this.room(t),i=this.peer(s);o.peers.delete(i.socketId),o.emit("eject",i)})),this.EventPooling.signal("room/closed",(e=>{let{roomid:s}=e,t=this.room(s);t.peers.clear(),t.emit("close"),this.rooms.delete(s)}))}room(e){if("string"==typeof e&&this.rooms.has(e))return this.rooms.get(e);let s=new r(this);return s.setRoomOptions(e),this.emit("room"),s}peer(e,s=!1){if("string"==typeof e){if(this.peers.has(e))return this.peers.get(e);if(this.pairs.has(e))return this.pairs.get(e)}let t=new i(this);return t.setPeerOptions(e),t.active=s,this.peers.set(t.socketId,t),this.emit("peer",t),t}}})();
|
|
//# sourceMappingURL=index.js.map
|