xushiting 3 年之前
父節點
當前提交
9604acbb45
共有 14 個文件被更改,包括 798 次插入573 次删除
  1. 17 0
      dist/index.html
  2. 501 295
      dist/js/index.js
  3. 1 1
      dist/js/index.js.map
  4. 10 9
      src/ActionsHandler.js
  5. 4 2
      src/EventsController.js
  6. 11 6
      src/EventsManager.js
  7. 6 1
      src/Heartbeat.js
  8. 0 4
      src/NetworkController.js
  9. 1 0
      src/Panorama.js
  10. 86 96
      src/Rtcp.js
  11. 1 0
      src/Signal.js
  12. 58 61
      src/Socket.js
  13. 4 3
      src/XverseEffectManager.js
  14. 98 95
      src/Xverse_Room.js

+ 17 - 0
dist/index.html

@@ -316,7 +316,24 @@ const WASM_Version = "h264"
                 e.indexOf(r) < 0 && Ie.call(i, r) && (t[r] = i[r]);
         return t
     };
+    var E = (i,e,t)=>(Se(i, typeof e != "symbol" ? e + "" : e, t),t);
 
+    Promise.prototype._timeout = function(i, e) {
+        let t;
+        return new Promise((r,n)=>(t = window.setTimeout(()=>{
+            n(e)
+        }
+        , i),
+        this.then(o=>{
+            clearTimeout(t),
+            r(o)
+        }
+        , o=>{
+            clearTimeout(t),
+            n(o)
+        }
+        )))
+    };
 
     </script>
 

文件差異過大導致無法顯示
+ 501 - 295
dist/js/index.js


文件差異過大導致無法顯示
+ 1 - 1
dist/js/index.js.map


+ 10 - 9
src/ActionsHandler.js

@@ -1,7 +1,8 @@
-//const log$p = new Logger("actions-handler")
+//const logger = new Logger("actions-handler")
 // QueueActions = [Actions.Transfer, Actions.ChangeSkin, Actions.GetOnVehicle, Actions.GetOffVehicle];
 import Actions from "./enum/Actions.js"
 import {logger} from "./Logger.js"
+import {eventsManager} from "./EventsManager.js"
 
 export default class ActionsHandler {
     constructor(e) {
@@ -54,7 +55,7 @@ export default class ActionsHandler {
           , r = e.data.action_type;
         if (QueueActions.includes(r)) {
             if (this.currentActiveAction)
-                return log$p.error(`${Actions[this.currentActiveAction]} still pending, reject ${Actions[r]}`),
+                return logger.error(`${Actions[this.currentActiveAction]} still pending, reject ${Actions[r]}`),
                 Promise.reject(new FrequencyLimitError(`${Actions[r]} action request frequency limit`));
             this.currentActiveAction = r
         }
@@ -63,7 +64,7 @@ export default class ActionsHandler {
                 await this.stopMoving()
             } catch (a) {
                 this.currentActiveAction = void 0,
-                log$p.error("before action stopMoving failed", a)
+                logger.error("before action stopMoving failed", a)
             }
     }
     async moveTo(e) {
@@ -247,7 +248,7 @@ export default class ActionsHandler {
           , m = this.room.skinList.filter(y=>y.id === r)[0];
         if (!m) {
             const y = `skin ${r} is invalid`;
-            return log$p.error(y),
+            return logger.error(y),
             Promise.reject(new ParamError(y))
         }
         const v = {
@@ -292,7 +293,7 @@ export default class ActionsHandler {
             this.room.sceneManager.staticmeshComponent.getCgMesh().hide(),
             this.room.sceneManager.cameraComponent.switchToMainCamera(),
             this.room.pathManager.currentArea = o,
-            log$p.info("changeSkin _updateSkinAssets susccss"),
+            logger.info("changeSkin _updateSkinAssets susccss"),
             this.room.updateCurrentNetworkOptions({
                 pathName: s,
                 attitude: a,
@@ -408,7 +409,7 @@ export default class ActionsHandler {
                 camera: o
             }
         };
-        return log$p.debug("send data: audience to visitor"),
+        return logger.debug("send data: audience to visitor"),
         this.sendData({
             data: a
         })
@@ -433,7 +434,7 @@ export default class ActionsHandler {
                 }
             }
         };
-        return log$p.debug("send data: visitor to audience"),
+        return logger.debug("send data: visitor to audience"),
         this.sendData({
             data: c
         })
@@ -448,7 +449,7 @@ export default class ActionsHandler {
                 extraInfo: encodeURIComponent(n)
             }
         };
-        return log$p.debug("send data: remove visitor"),
+        return logger.debug("send data: remove visitor"),
         this.sendData({
             data: o
         })
@@ -461,7 +462,7 @@ export default class ActionsHandler {
                 roomID: t
             }
         };
-        return log$p.debug("send data: get user with avatar"),
+        return logger.debug("send data: get user with avatar"),
         this.sendData({
             data: r
         }).then(n=>n.userWithAvatarList)

+ 4 - 2
src/EventsController.js

@@ -1,4 +1,6 @@
-const log$6 = new Logger("eventsController");
+import {eventsManager} from "./EventsManager.js"
+import {logger} from "./Logger.js"
+
 class EventsController {
     constructor(e) {
         E(this, "staticmeshEvent");
@@ -9,7 +11,7 @@ class EventsController {
         );
         E(this, "clickEvent", e=>{
             const {point: t, name: r, type: n, id: o} = e;
-            log$6.debug("pointEvent", e),
+            logger.debug("pointEvent", e),
             this.room.proxyEvents("pointTap", {
                 point: t,
                 meshName: r,

+ 11 - 6
src/EventsManager.js

@@ -1,4 +1,6 @@
-class EventsManager extends EventEmitter {
+import {logger} from "./Logger.js"
+
+export default class EventsManager extends EventEmitter {
     constructor() {
         super(...arguments);
         E(this, "events", new Map);
@@ -35,7 +37,7 @@ class EventsManager extends EventEmitter {
                 if (_ === Codes$1.Success)
                     h(g),
                     this.off(r),
-                    log$r.infoAndReportMeasurement({
+                    logger.infoAndReportMeasurement({
                         metric: s,
                         tag: l,
                         extra: e.extra,
@@ -46,7 +48,7 @@ class EventsManager extends EventEmitter {
                     if (_ === Codes$1.ActionMaybeDelay)
                         return;
                     if (_ === Codes$1.DoActionBlocked && e.event === Actions.Rotation) {
-                        log$r.debug(s + " response code: " + _);
+                        logger.debug(s + " response code: " + _);
                         return
                     }
                     const v = getErrorByCode(_)
@@ -58,7 +60,7 @@ class EventsManager extends EventEmitter {
                         event: e,
                         tag: l
                     }),
-                    log$r.infoAndReportMeasurement({
+                    logger.infoAndReportMeasurement({
                         metric: s,
                         tag: l,
                         extra: e.extra,
@@ -83,7 +85,7 @@ class EventsManager extends EventEmitter {
                 f(_),
                 this.events.delete(r),
                 this.off(r),
-                log$r.infoAndReportMeasurement({
+                logger.infoAndReportMeasurement({
                     metric: s,
                     tag: l,
                     extra: e.extra,
@@ -111,4 +113,7 @@ class EventsManager extends EventEmitter {
             })
         }
     }
-}
+}
+
+const eventsManager = new EventsManager();
+export { eventsManager };

+ 6 - 1
src/Heartbeat.js

@@ -2,7 +2,12 @@ import {logger} from "./Logger.js"
 
 export default class Heartbeat {
     constructor(e) {
-        this._interval = null
+        E(this, "_interval", null);
+        E(this, "ping", ()=>{
+            const e = Date.now().toString();
+            this.handler.ping(e)
+        }
+        );
         this.handler = e
     }
     ping(){

+ 0 - 4
src/NetworkController.js

@@ -6,8 +6,6 @@ import NetworkMonitor from "./NetworkMonitor.js"
 import Stream from "./Stream.js"
 import InternalError from "./error/InternalError.js"
 
-
-
 var workerSourceCode = `onmessage = function (event) {
     const data = event.data
     if (!data) return
@@ -75,7 +73,6 @@ export default class NetworkController extends EventEmitter {
     }
 
     startGame(){
-        debugger;
         return new Promise((e,t)=>{
             if (!this.rtcp.connected)
                 return t(new InternalError("Game cannot load. Please refresh"));
@@ -122,7 +119,6 @@ export default class NetworkController extends EventEmitter {
         return new Promise((t,r)=>{
       
             this.rtcp.on("rtcConnected", ()=>{
-                debugger
                 this.setState("connected"),
                 t()
             }

+ 1 - 0
src/Panorama.js

@@ -1,5 +1,6 @@
 import Codes from "./enum/Codes.js"
 import {logger} from "./Logger.js"
+import {eventsManager} from "./EventsManager.js"
 
 class Panorama {
     constructor(e) {

+ 86 - 96
src/Rtcp.js

@@ -3,105 +3,71 @@ import Workers from "./Workers.js"
 import Heartbeat from "./Heartbeat.js"
  
 export default class Rtcp extends EventEmitter {
-    constructor(network) {
+    constructor(e) {
         super();
-        this.connection = null
-        this.inputChannel = null
-        this.mediaStream = null
-        this.socket = null
-        this.connected = !1
-        this.candidates = []
-        this.isAnswered = !1
-        this.isFlushing = !1
-        this.inputReady = !1
-        this.workers = null
-        this.actived = !0
-        this.heartbeat = null
-        this.network = network;
-
-        //this.workers = new Workers(this,new Logger("decode")),
-        //this.workers.registerLogger(new Logger("decode")),
-        this.workers = new Workers(this,logger);
-        this.workers.registerLogger(logger);
-        this.workers.registerFunction("data", t=>{
-            this.emit("data", t)
-        }
-        ),
-        this.heartbeat = new Heartbeat({
-            ping: t=>{
-                e.room.actionsHandler.echo(t)
-            }
-            ,
-            pong(t, r) {
-                var n;
-                r && t > 500 && logger.warn(`high hb value ${t}, traceId:` + r),
-                (n = e.room.stats) == null || n.assign({
-                    hb: t
+        E(this, "connection", null);
+        E(this, "inputChannel", null);
+        E(this, "mediaStream");
+        E(this, "socket");
+        E(this, "connected", !1);
+        E(this, "candidates", []);
+        E(this, "isAnswered", !1);
+        E(this, "isFlushing", !1);
+        E(this, "inputReady", !1);
+        E(this, "workers");
+        E(this, "actived", !0);
+        E(this, "heartbeat");
+        E(this, "onIcecandidate", e=>{
+            if (e.candidate != null) {
+                const t = JSON.stringify(e.candidate);
+                logger.debug(`Got ice candidate: ${t}`),
+                this.network.socket.send({
+                    id: "ice_candidate",
+                    data: btoa(t)
                 })
             }
-        })
-        //解决onIcecandidate 获取不了this
-        this.onIcecandidate =this.onIcecandidate.bind(this)
-        this.onIceStateChange =this.onIceStateChange.bind(this)
-        this.setRemoteDescription =this.setRemoteDescription.bind(this)
-        this.start =this.start.bind(this)
-        this.flushCandidate = this.flushCandidate.bind(this)
-        this.addCandidate = this.addCandidate.bind(this)
-        this.disconnect =this.disconnect.bind(this)
-    }
-
-    onIcecandidate(e){
-        if (e.candidate != null) {
-            const t = JSON.stringify(e.candidate);
-            logger.debug(`Got ice candidate: ${t}`),
-      
-            this.network.socket.send({
-                id: "ice_candidate",
-                data: btoa(t)
-            })
         }
-    }
-
-    onIcecandidateerror(e){
-        logger.error("onicecandidateerror", e.errorCode, e.errorText, e)
-    }
-
-    onIceStateChange(e){
-        switch (e.target.iceGatheringState) {
+        );
+        E(this, "onIcecandidateerror", e=>{
+            logger.error("onicecandidateerror", e.errorCode, e.errorText, e)
+        }
+        );
+        E(this, "onIceStateChange", e=>{
+            switch (e.target.iceGatheringState) {
             case "gathering":
                 logger.info("ice gathering");
                 break;
             case "complete":
                 logger.info("Ice gathering completed")
             }
-    }
-
-    onIceConnectionStateChange(){
-        if (!!this.connection)
-        switch (logger.info(`iceConnectionState: ${this.connection.iceConnectionState}`),
-        this.connection.iceConnectionState) {
-        case "connected":
-            {
-                this.connected = !0;
-                break
-            }
-        case "disconnected":
-            {
-                this.connected = !1,
-                this.emit("rtcDisconnected");
-                break
-            }
-        case "failed":
-            {
-                this.emit("rtcDisconnected"),
-                this.connected = !1;
-                break
-            }
         }
-    }
-
-    async setRemoteDescription(e,t){
-        var a, s, l;
+        );
+        E(this, "onIceConnectionStateChange", ()=>{
+            if (!!this.connection)
+                switch (logger.info(`iceConnectionState: ${this.connection.iceConnectionState}`),
+                this.connection.iceConnectionState) {
+                case "connected":
+                    {
+                        this.connected = !0;
+                        break
+                    }
+                case "disconnected":
+                    {
+                        this.connected = !1,
+                        this.emit("rtcDisconnected");
+                        break
+                    }
+                case "failed":
+                    {
+                        this.emit("rtcDisconnected"),
+                        this.connected = !1;
+                        break
+                    }
+                }
+        }
+        );
+        E(this, "setRemoteDescription", async(e,t)=>{
+            var a, s, l;
             if (!this.connection)
                 return;
             const r = JSON.parse(atob(e))
@@ -125,10 +91,10 @@ export default class Rtcp extends EventEmitter {
                 data: btoa(JSON.stringify(o))
             }),
             t.srcObject = this.mediaStream
-    }
-
-    flushCandidate(){
-        this.isFlushing || !this.isAnswered || (this.isFlushing = !0,
+        }
+        );
+        E(this, "flushCandidate", ()=>{
+            this.isFlushing || !this.isAnswered || (this.isFlushing = !0,
             this.candidates.forEach(e=>{
                 const t = atob(e)
                   , r = JSON.parse(t);
@@ -143,12 +109,36 @@ export default class Rtcp extends EventEmitter {
             }
             ),
             this.isFlushing = !1)
+        }
+        );
+        E(this, "input", e=>{
+            var t;
+            !this.actived || !this.inputChannel || this.inputChannel.readyState === "open" && ((t = this.inputChannel) == null || t.send(e))
+        }
+        );
+        this.network = e,
+        this.workers = new Workers(this,logger),
+        this.workers.registerLogger(logger),
+        this.workers.registerFunction("data", t=>{
+            this.emit("data", t)
+        }
+        ),
+        this.heartbeat = new Heartbeat({
+            ping: t=>{
+                e.room.actionsHandler.echo(t)
+            }
+            ,
+            pong(t, r) {
+                var n;
+                r && t > 500 && logger.warn(`high hb value ${t}, traceId:` + r),
+                (n = e.room.stats) == null || n.assign({
+                    hb: t
+                })
+            }
+        })
     }
 
-    input(e){
-        var t;
-        !this.actived || !this.inputChannel || this.inputChannel.readyState === "open" && ((t = this.inputChannel) == null || t.send(e))
-    }
+   
 
     start() {
         this.connection = new RTCPeerConnection;

+ 1 - 0
src/Signal.js

@@ -1,6 +1,7 @@
 //const log$4 = new Logger("xverse-signal");
 import Codes from "./enum/Codes.js"
 import {logger} from "./Logger.js"
+import {eventsManager} from "./EventsManager.js"
 
 export default class Signal {
     constructor(e) {

+ 58 - 61
src/Socket.js

@@ -7,11 +7,64 @@ import {reporter} from "./Reporter.js"
 export default class Socket extends EventEmitter {
     constructor(e) {
         super();
-        this._ws = null
-        this._openTimer = null
-        this.connected = !1
-        this._hasTimeout = !1
-        this.heartbeat = null
+        E(this, "_ws");
+        E(this, "_openTimer");
+        E(this, "connected", !1);
+        E(this, "_hasTimeout", !1);
+        E(this, "heartbeat");
+        E(this, "latency", (e,t)=>this.send({
+            id: "checkLatency",
+            data: JSON.stringify(e),
+            packet_id: t
+        }));
+        E(this, "send", e=>{
+            if (this.wsNoReady())
+                return;
+            const t = JSON.stringify(e);
+            e.id !== "heartbeat" && logger.info("send ws frame", t),
+            this._ws.send(t)
+        }
+        );
+        E(this, "startGame", ()=>{
+            const {roomId: e, userId: t, avatarId: r, skinId: n, role: o, avatarComponents: a, versionId: s, rotationRenderType: l, isAllSync: u, nickname: c, avatarScale: h, appId: f, camera: d, player: _, firends: g, syncByEvent: m, areaName: v, attitude: y, pathName: b, person: T, roomTypeId: C="", syncToOthers: A, hasAvatar: S, prioritySync: P, extra: R={}, removeWhenDisconnected: M} = this.network.room.currentNetworkOptions;
+            R.removeWhenDisconnected = M;
+            const x = {
+                id: "start",
+                room_id: e,
+                user_id: t,
+                trace_id: uuid$1(),
+                data: JSON.stringify({
+                    avatar_components: JSON.stringify(a),
+                    avatar_id: r,
+                    skin_id: n,
+                    is_host: o ? o == "host" : !0,
+                    skin_data_version: n !== void 0 && s !== void 0 ? n + s : void 0,
+                    rotation_render_type: l,
+                    is_all_sync: u,
+                    nick_name: encodeURIComponent(c || ""),
+                    app_id: f,
+                    camera: d,
+                    player: _,
+                    person: T,
+                    firends: JSON.stringify(g),
+                    sync_by_event: m,
+                    area_name: v,
+                    path_name: b,
+                    attitude: y,
+                    room_type_id: C,
+                    syncToOthers: A,
+                    hasAvatar: S,
+                    avatarSize: h,
+                    prioritySync: P,
+                    extra: JSON.stringify(R)
+                })
+            };
+            this.send(x),
+            logger.warn("startGame", le(oe({}, x), {
+                data: JSON.parse(x.data)
+            }))
+        }
+        );
         this.network = e,
         this.heartbeat = new Heartbeat({
             ping: t=>{
@@ -38,62 +91,6 @@ export default class Socket extends EventEmitter {
         })
     }
 
-    latency(e,t){
-        this.send({
-            id: "checkLatency",
-            data: JSON.stringify(e),
-            packet_id: t
-        })
-    }
-
-    send(e){
-        if (this.wsNoReady())
-            return;
-        const t = JSON.stringify(e);
-        e.id !== "heartbeat" && logger.info("send ws frame", t),
-        this._ws.send(t)
-    }
-
-    startGame(){
-        const {roomId: e, userId: t, avatarId: r, skinId: n, role: o, avatarComponents: a, versionId: s, rotationRenderType: l, isAllSync: u, nickname: c, avatarScale: h, appId: f, camera: d, player: _, firends: g, syncByEvent: m, areaName: v, attitude: y, pathName: b, person: T, roomTypeId: C="", syncToOthers: A, hasAvatar: S, prioritySync: P, extra: R={}, removeWhenDisconnected: M} = this.network.room.currentNetworkOptions;
-        R.removeWhenDisconnected = M;
-        const x = {
-            id: "start",
-            room_id: e,
-            user_id: t,
-            trace_id: uuid$1(),
-            data: JSON.stringify({
-                avatar_components: JSON.stringify(a),
-                avatar_id: r,
-                skin_id: n,
-                is_host: o ? o == "host" : !0,
-                skin_data_version: n !== void 0 && s !== void 0 ? n + s : void 0,
-                rotation_render_type: l,
-                is_all_sync: u,
-                nick_name: encodeURIComponent(c || ""),
-                app_id: f,
-                camera: d,
-                player: _,
-                person: T,
-                firends: JSON.stringify(g),
-                sync_by_event: m,
-                area_name: v,
-                path_name: b,
-                attitude: y,
-                room_type_id: C,
-                syncToOthers: A,
-                hasAvatar: S,
-                avatarSize: h,
-                prioritySync: P,
-                extra: JSON.stringify(R)
-            })
-        };
-        this.send(x),
-        logger.warn("startGame", le(oe({}, x), {
-            data: JSON.parse(x.data)
-        }))
-    }
-
     get connection() {
         return this._ws
     }

+ 4 - 3
src/XverseEffectManager.js

@@ -1,5 +1,6 @@
-const log$7 = new Logger("xverse-effect-manager")
-class XverseEffectManager extends EventEmitter {
+import {logger} from "./Logger.js"
+
+export default class XverseEffectManager extends EventEmitter {
     constructor(e) {
         super();
         E(this, "effects", new Map);
@@ -22,7 +23,7 @@ class XverseEffectManager extends EventEmitter {
             a
         } catch (a) {
             return this.effects.delete(r),
-            log$7.error(a),
+            logger.error(a),
             Promise.reject(a)
         }
     }

+ 98 - 95
src/Xverse_Room.js

@@ -1,4 +1,4 @@
-//const log$3 = new Logger("xverse-room");
+//const logger = new Logger("xverse-room");
 import XverseAvatarManager from "./XverseAvatarManager.js"
 import {logger} from "./Logger.js"
 import Codes from "./enum/Codes.js"
@@ -10,6 +10,7 @@ import Signal from "./Signal.js"
 import ModelManager from "./ModelManager.js"
 import {reporter} from "./Reporter.js"
 import util from "./util.js"
+import XverseEffectManager from "./XverseEffectManager.js"
 import TimeoutError from "./error/TimeoutError.js"
 import ParamError from "./error/ParamError.js"
 import MotionType from "./enum/MotionType.js"
@@ -17,47 +18,106 @@ import NetworkController from "./NetworkController.js"
 import InitNetworkTimeoutError from "./error/InitNetworkTimeoutError.js"
 import InitConfigTimeoutError from "./error/InitConfigTimeoutError.js"
 import InitDecoderTimeoutError from "./error/InitDecoderTimeoutError.js"
+import {eventsManager} from "./EventsManager.js"
 
 export default class Xverse_Room extends EventEmitter {
     constructor(e) {
         super();
-        this.disableAutoTurn = !1
-        this._currentNetworkOptions = null
-        this.lastSkinId = null
-        this.debug = null
-        this.isFirstDataUsed = !1
-        this.userId = null
-        this.pathManager = new PathManager
-        this.networkController = null
-        this._startTime = Date.now()
-        this.canvas = null
-        this.eventsController = null
-        this.panorama = null
-        this.engineProxy = null
-        this._id = null
-        this.skinList = []
-        this.isHost = !1
-        this.avatarManager = new XverseAvatarManager(this)
-        this.effectManager = new XverseAvatarManager(this)
-        this.sceneManager = null
-        this.scene = null
-        this.breathPointManager = null
-        this._currentState = null
-        this.joined = !1
-        this.disableRotate = !1
-        this.isPano = !1
-        this.movingByClick = !0
-        this.camera = new Camera(this);
-        this.stats = new Stats(this)
-        this.isUpdatedRawYUVData = !1
-        this.actionsHandler = new ActionsHandler(this);
-        this._currentClickingState = null
-        this.signal = new Signal(this);
-        this.firstFrameTimestamp = null
-        this.moveToExtra = '';
-        this.options = e;
-
-        this.options.wsServerUrl || (this.options.wsServerUrl = SERVER_URLS.DEV);
+        E(this, "disableAutoTurn", !1);
+        E(this, "options");
+        E(this, "_currentNetworkOptions");
+        E(this, "lastSkinId");
+        E(this, "debug");
+        E(this, "isFirstDataUsed", !1);
+        E(this, "userId", null);
+        E(this, "pathManager", new PathManager);
+        E(this, "networkController");
+        E(this, "_startTime", Date.now());
+        E(this, "canvas");
+        E(this, "modelManager");
+        E(this, "eventsController");
+        E(this, "panorama");
+        E(this, "engineProxy");
+        E(this, "_id");
+        E(this, "skinList", []);
+        E(this, "isHost", !1);
+        E(this, "avatarManager", new XverseAvatarManager(this));
+        E(this, "effectManager", new XverseEffectManager(this));
+        E(this, "sceneManager");
+        E(this, "scene");
+        E(this, "breathPointManager");
+        E(this, "_currentState");
+        E(this, "joined", !1);
+        E(this, "disableRotate", !1);
+        E(this, "isPano", !1);
+        E(this, "movingByClick", !0);
+        E(this, "camera", new Camera(this));
+        E(this, "stats", new Stats(this));
+        E(this, "isUpdatedRawYUVData", !1);
+        E(this, "actionsHandler", new ActionsHandler(this));
+        E(this, "_currentClickingState", null);
+        E(this, "signal", new Signal(this));
+        E(this, "firstFrameTimestamp");
+        E(this, "receiveRtcData", async()=>{
+            logger.info("Invoke receiveRtcData");
+            let e = !1
+              , t = !1
+              , r = !1
+              , n = !1;
+            return this.viewMode === "serverless" ? (logger.warn("set view mode to serverless"),
+            this.setViewMode("observer").then(()=>this, ()=>this)) : new Promise(o=>{
+                const a = this.networkController.rtcp.workers;
+                a.registerFunction("signal", s=>{
+                    this.signal.handleSignal(s)
+                }
+                ),
+                a.registerFunction("stream", s=>{
+                    var l;
+                    if (this.emit("streamTimestamp", {
+                        timestamp: Date.now()
+                    }),
+                    t || (t = !0,
+                    logger.info("Invoke stream event")),
+                    s.stream) {
+                        r || (r = !0,
+                        logger.info("Invoke updateRawYUVData")),
+                        this.isUpdatedRawYUVData = !1;
+                        const u = (l = this._currentState.skin) == null ? void 0 : l.fov;
+                        this.sceneManager.materialComponent.updateRawYUVData(s.stream, s.width, s.height, u),
+                        this.isUpdatedRawYUVData = !0
+                    }
+                    e || (logger.info("Invoke isAfterRenderRegistered"),
+                    e = !0,
+                    this.scene.registerAfterRender(()=>{
+                        this.engineProxy.frameRenderNumber >= 2 && (n || (n = !0,
+                        logger.info("Invoke registerAfterRender")),
+                        this.isFirstDataUsed || (logger.info("Invoke isStreamAvailable"),
+                        this.isFirstDataUsed = !0,
+                        this.firstFrameTimestamp = Date.now(),
+                        o(this),
+                        this.afterJoinRoom()))
+                    }
+                    ))
+                }
+                ),
+                this.panorama.bindListener(()=>{
+                    o(this),
+                    this.afterJoinRoom()
+                }
+                ),
+                a.registerFunction("reconnectedFrame", ()=>{}
+                ),
+                logger.info("Invoke decoderWorker.postMessage"),
+                a.decoderWorker.postMessage({
+                    t: 5
+                })
+            }
+            )
+        }
+        );
+        E(this, "moveToExtra", "");
+        this.options = e,
+        this.options.wsServerUrl || (this.options.wsServerUrl = SERVER_URLS.DEV),
         this.modelManager = ModelManager.getInstance(e.appId, e.releaseId),
         this.updateReporter();
         const n = e
@@ -72,63 +132,6 @@ export default class Xverse_Room extends EventEmitter {
         })
     }
 
-    async receiveRtcData(){
-        logger.info("Invoke receiveRtcData");
-        let e = !1
-          , t = !1
-          , r = !1
-          , n = !1;
-        return this.viewMode === "serverless" ? (logger.warn("set view mode to serverless"),
-        this.setViewMode("observer").then(()=>this, ()=>this)) : new Promise(o=>{
-            const a = this.networkController.rtcp.workers;
-            a.registerFunction("signal", s=>{
-                this.signal.handleSignal(s)
-            }
-            ),
-            a.registerFunction("stream", s=>{
-                var l;
-                if (this.emit("streamTimestamp", {
-                    timestamp: Date.now()
-                }),
-                t || (t = !0,
-                logger.info("Invoke stream event")),
-                s.stream) {
-                    r || (r = !0,
-                    logger.info("Invoke updateRawYUVData")),
-                    this.isUpdatedRawYUVData = !1;
-                    const u = (l = this._currentState.skin) == null ? void 0 : l.fov;
-                    this.sceneManager.materialComponent.updateRawYUVData(s.stream, s.width, s.height, u),
-                    this.isUpdatedRawYUVData = !0
-                }
-                e || (logger.info("Invoke isAfterRenderRegistered"),
-                e = !0,
-                this.scene.registerAfterRender(()=>{
-                    this.engineProxy.frameRenderNumber >= 2 && (n || (n = !0,
-                    logger.info("Invoke registerAfterRender")),
-                    this.isFirstDataUsed || (logger.info("Invoke isStreamAvailable"),
-                    this.isFirstDataUsed = !0,
-                    this.firstFrameTimestamp = Date.now(),
-                    o(this),
-                    this.afterJoinRoom()))
-                }
-                ))
-            }
-            ),
-            this.panorama.bindListener(()=>{
-                o(this),
-                this.afterJoinRoom()
-            }
-            ),
-            a.registerFunction("reconnectedFrame", ()=>{}
-            ),
-            logger.info("Invoke decoderWorker.postMessage"),
-            a.decoderWorker.postMessage({
-                t: 5
-            })
-        }
-        )
-    }
-
     get currentNetworkOptions() {
         return this._currentNetworkOptions
     }