UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 4.15 kB
import*as Common from"../common/common.js";import*as Host from"../host/host.js";import*as ProtocolClient from"../protocol_client/protocol_client.js";import*as Root from"../root/root.js";import{TargetManager}from"./TargetManager.js";export class MainConnection{onMessage;#s;#n;#e;#t;constructor(){this.onMessage=null,this.#s=null,this.#n="",this.#e=0,this.#t=[Host.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(Host.InspectorFrontendHostAPI.Events.DispatchMessage,this.dispatchMessage,this),Host.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(Host.InspectorFrontendHostAPI.Events.DispatchMessageChunk,this.dispatchMessageChunk,this)]}setOnMessage(s){this.onMessage=s}setOnDisconnect(s){this.#s=s}sendRawMessage(s){this.onMessage&&Host.InspectorFrontendHost.InspectorFrontendHostInstance.sendMessageToBackend(s)}dispatchMessage(s){this.onMessage&&this.onMessage.call(null,s.data)}dispatchMessageChunk(s){const{messageChunk:n,messageSize:e}=s.data;e&&(this.#n="",this.#e=e),this.#n+=n,this.#n.length===this.#e&&this.onMessage&&(this.onMessage.call(null,this.#n),this.#n="",this.#e=0)}async disconnect(){const s=this.#s;Common.EventTarget.removeEventListeners(this.#t),this.#s=null,this.onMessage=null,s&&s.call(null,"force disconnect")}}export class WebSocketConnection{#o;onMessage;#s;#c;#i;#a;constructor(s,n){this.#o=new WebSocket(s),this.#o.onerror=this.onError.bind(this),this.#o.onopen=this.onOpen.bind(this),this.#o.onmessage=s=>{this.onMessage&&this.onMessage.call(null,s.data)},this.#o.onclose=this.onClose.bind(this),this.onMessage=null,this.#s=null,this.#c=n,this.#i=!1,this.#a=[]}setOnMessage(s){this.onMessage=s}setOnDisconnect(s){this.#s=s}onError(){this.#c&&this.#c.call(null),this.#s&&this.#s.call(null,"connection failed"),this.close()}onOpen(){if(this.#i=!0,this.#o){this.#o.onerror=console.error;for(const s of this.#a)this.#o.send(s)}this.#a=[]}onClose(){this.#c&&this.#c.call(null),this.#s&&this.#s.call(null,"websocket closed"),this.close()}close(s){this.#o&&(this.#o.onerror=null,this.#o.onopen=null,this.#o.onclose=s||null,this.#o.onmessage=null,this.#o.close(),this.#o=null),this.#c=null}sendRawMessage(s){this.#i&&this.#o?this.#o.send(s):this.#a.push(s)}disconnect(){return new Promise((s=>{this.close((()=>{this.#s&&this.#s.call(null,"force disconnect"),s()}))}))}}export class StubConnection{onMessage;#s;constructor(){this.onMessage=null,this.#s=null}setOnMessage(s){this.onMessage=s}setOnDisconnect(s){this.#s=s}sendRawMessage(s){window.setTimeout(this.respondWithError.bind(this,s),0)}respondWithError(s){const n=JSON.parse(s),e={message:"This is a stub connection, can't dispatch message.",code:ProtocolClient.InspectorBackend.DevToolsStubErrorCode,data:n};this.onMessage&&this.onMessage.call(null,{id:n.id,error:e})}async disconnect(){this.#s&&this.#s.call(null,"force disconnect"),this.#s=null,this.onMessage=null}}export class ParallelConnection{#r;#h;onMessage;#s;constructor(s,n){this.#r=s,this.#h=n,this.onMessage=null,this.#s=null}setOnMessage(s){this.onMessage=s}setOnDisconnect(s){this.#s=s}getOnDisconnect(){return this.#s}sendRawMessage(s){const n=JSON.parse(s);n.sessionId||(n.sessionId=this.#h),this.#r.sendRawMessage(JSON.stringify(n))}getSessionId(){return this.#h}async disconnect(){this.#s&&this.#s.call(null,"force disconnect"),this.#s=null,this.onMessage=null}}export async function initMainConnection(s,n){ProtocolClient.InspectorBackend.Connection.setFactory(createMainConnection.bind(null,n)),await s(),Host.InspectorFrontendHost.InspectorFrontendHostInstance.connectionReady(),Host.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(Host.InspectorFrontendHostAPI.Events.ReattachRootTarget,(()=>{const n=TargetManager.instance().rootTarget();if(n){const s=n.router();s&&s.connection().disconnect()}s()}))}function createMainConnection(s){const n=Root.Runtime.Runtime.queryParam("ws"),e=Root.Runtime.Runtime.queryParam("wss");if(n||e){return new WebSocketConnection(n?`ws://${n}`:`wss://${e}`,s)}return Host.InspectorFrontendHost.InspectorFrontendHostInstance.isHostedMode()?new StubConnection:new MainConnection}