xushiting 3 anni fa
parent
commit
436500161c
91 ha cambiato i file con 6077 aggiunte e 2102 eliminazioni
  1. 1 0
      dist/css/index.cb1a6e05.css
  2. 15 0
      dist/css/toastify.min.css
  3. 199 3
      dist/index.html
  4. 4429 609
      dist/js/index.js
  5. 1 1
      dist/js/index.js.map
  6. 22 19
      src/ActionsHandler.js
  7. 14 5
      src/Broadcast.js
  8. 47 44
      src/Camera.js
  9. 5 0
      src/Error/ActionBlockedError.js
  10. 5 0
      src/Error/ActionMaybeDelayError.js
  11. 5 0
      src/Error/ActionResponseTimeoutError.js
  12. 5 0
      src/Error/AuthenticationError.js
  13. 5 0
      src/Error/AvatarAnimationError.js
  14. 5 0
      src/Error/AvatarAssetLoadingError.js
  15. 5 0
      src/Error/BroadcastFailedError.js
  16. 5 0
      src/Error/ContainerLoadingFailedError.js
  17. 5 0
      src/Error/CreateSessionFailedError.js
  18. 5 0
      src/Error/DataAbnormalError.js
  19. 5 0
      src/Error/DoActionBlockedError.js
  20. 5 0
      src/Error/DoActionFailedError.js
  21. 5 0
      src/Error/DuplicateAvatarIDError.js
  22. 5 0
      src/Error/ExceedMaxAvatarNumError.js
  23. 5 0
      src/Error/FrequencyLimitError.js
  24. 5 0
      src/Error/GetOnVehicleError.js
  25. 5 0
      src/Error/InitConfigTimeoutError.js
  26. 5 0
      src/Error/InitDecoderTimeoutError.js
  27. 5 0
      src/Error/InitEngineError.js
  28. 5 0
      src/Error/InitEngineTimeoutError.js
  29. 6 0
      src/Error/InitNetworkTimeoutError.js
  30. 5 0
      src/Error/InternalError.js
  31. 5 0
      src/Error/LackOfTokenError.js
  32. 5 0
      src/Error/LoginFailedError.js
  33. 7 0
      src/Error/ParamError.js
  34. 5 0
      src/Error/PreloadCanceledError.js
  35. 5 0
      src/Error/RepeatLoginError.js
  36. 5 0
      src/Error/RoomDoseNotExistError.js
  37. 5 0
      src/Error/RoomsUpperLimitError.js
  38. 5 0
      src/Error/RtcConnectionError.js
  39. 5 0
      src/Error/ServerParamError.js
  40. 5 0
      src/Error/ServerRateLimitError.js
  41. 5 0
      src/Error/StateSyncFailedError.js
  42. 5 0
      src/Error/TicketExpireError.js
  43. 7 0
      src/Error/TimeoutError.js
  44. 5 0
      src/Error/TokenExpiredError.js
  45. 5 0
      src/Error/UnsupportedError.js
  46. 5 0
      src/Error/UsersUpperLimitError.js
  47. 5 0
      src/Error/VerifyServiceDownError.js
  48. 5 0
      src/Error/XBreathPointError.js
  49. 5 0
      src/Error/XDecalError.js
  50. 5 0
      src/Error/XDecalTextureError.js
  51. 5 0
      src/Error/XLowpolyJsonError.js
  52. 5 0
      src/Error/XLowpolyModelError.js
  53. 5 0
      src/Error/XMaterialError.js
  54. 5 0
      src/Error/XTvMediaUrlError.js
  55. 5 0
      src/Error/XTvModelError.js
  56. 5 0
      src/Error/XTvVideoElementError.js
  57. 70 0
      src/Error/XverseError.js
  58. 10 10
      src/Heartbeat.js
  59. 0 2
      src/Http1.js
  60. 3 4
      src/JoyStick.js
  61. 0 1
      src/ModelManager.js
  62. 35 29
      src/NetworkController.js
  63. 1 2
      src/NetworkMonitor.js
  64. 5 5
      src/PathManager.js
  65. 3 7
      src/Pool.js
  66. 102 97
      src/Rtcp.js
  67. 3 4
      src/Signal.js
  68. 71 316
      src/Socket.js
  69. 14 14
      src/Stats.js
  70. 2 4
      src/Timeout.js
  71. 34 27
      src/Workers.js
  72. 47 54
      src/XAvatarManager.js
  73. 10 10
      src/XCameraComponent.js
  74. 1 1
      src/XSceneManager.js
  75. 3 0
      src/Xverse.js
  76. 22 18
      src/XverseAvatarManager.js
  77. 4 2
      src/XverseEffect.js
  78. 0 271
      src/XverseError.js
  79. 6 535
      src/XverseRoom.js
  80. 551 0
      src/Xverse_Room.js
  81. 36 0
      src/enum/Actions.js
  82. 5 0
      src/enum/AvatarGroup.js
  83. 7 0
      src/enum/CameraStates.js
  84. 4 0
      src/enum/CoreBroadcastType.js
  85. 5 0
      src/enum/Direction.js
  86. 9 0
      src/enum/EAvatarRelationRank.js
  87. 7 0
      src/enum/MessageHandleType.js
  88. 6 0
      src/enum/MotionType.js
  89. 5 0
      src/enum/RemoveVisitorType.js
  90. 9 8
      src/main.js
  91. 14 0
      src/util.js

File diff suppressed because it is too large
+ 1 - 0
dist/css/index.cb1a6e05.css


File diff suppressed because it is too large
+ 15 - 0
dist/css/toastify.min.css


File diff suppressed because it is too large
+ 199 - 3
dist/index.html


File diff suppressed because it is too large
+ 4429 - 609
dist/js/index.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/index.js.map


+ 22 - 19
src/ActionsHandler.js

@@ -1,25 +1,28 @@
-const log$p = new Logger("actions-handler")
-  , QueueActions = [Actions.Transfer, Actions.ChangeSkin, Actions.GetOnVehicle, Actions.GetOffVehicle];
-class ActionsHandler {
+//const log$p = new Logger("actions-handler")
+// QueueActions = [Actions.Transfer, Actions.ChangeSkin, Actions.GetOnVehicle, Actions.GetOffVehicle];
+import Actions from "./enum/Actions.js"
+import {logger} from "./Logger.js"
+
+export default class ActionsHandler {
     constructor(e) {
-        E(this, "room");
-        E(this, "currentActiveAction");
-        E(this, "avatarComponentsSync", e=>{
-            const t = {
-                action_type: Actions.SetPlayerState,
-                set_player_state_action: {
-                    player_state: {
-                        avatar_components: JSON.stringify(e)
-                    }
-                }
-            };
-            this.sendData({
-                data: t
-            })
-        }
-        );
+        this.currentActiveAction = null
         this.room = e
     }
+
+    async avatarComponentsSync(e){
+        const t = {
+            action_type: Actions.SetPlayerState,
+            set_player_state_action: {
+                player_state: {
+                    avatar_components: JSON.stringify(e)
+                }
+            }
+        };
+        this.sendData({
+            data: t
+        })
+    }
+
     async sendData(e) {
         await this.beforeSend(e);
         const t = uuid$1();

+ 14 - 5
src/Broadcast.js

@@ -1,15 +1,24 @@
-const log$q = new Logger("xverse-broadcast")
-class Broadcast{
+//const logger = new Logger("xverse-broadcast")
+import {logger} from "./Logger.js"
+import MessageHandleType from "./enum/MessageHandleType.js"
+
+export default class Broadcast{
     constructor(e, t) {
-        this.room = e,
-        Ee.handlers.push(t)
+        this.room = e;
+        this.handlers = []
+        this.init(t)
     }
+
+    init(t){
+        this.handlers.push(t)
+    }
+
     async handleBroadcast(e) {
         let t = null;
         try {
             t = JSON.parse(e.broadcastAction.data)
         } catch (r) {
-            log$q.error(r);
+            logger.error(r);
             return
         }
     }

+ 47 - 44
src/Camera.js

@@ -1,43 +1,46 @@
-const log$9 = new Logger("camera");
-class Camera extends EventEmitter {
+import {logger} from "./Logger.js"
+import CameraStates from "./enum/CameraStates.js"
+import Person from "./enum/Person.js"
+
+export default class Camera extends EventEmitter {
     constructor(e) {
         super();
-        E(this, "initialFov", 0);
-        E(this, "_state", CameraStates.Normal);
-        E(this, "_person", Person.Third);
-        E(this, "_room");
-        E(this, "_cameraFollowing", !0);
-        E(this, "checkPointOnLeftOrRight", e=>{
-            const t = ue4Position2Xverse(e);
-            if (!t || this.checkPointInView(e))
-                return;
-            const o = this._room.scene.activeCamera;
-            if (!o)
-                return;
-            const a = [o.target.x, o.target.y, o.target.z]
-              , s = [o.position.x, o.position.y, o.position.z]
-              , {x: l, y: u, z: c} = t
-              , h = calNormVector(s, a)
-              , f = calNormVector(s, [l, u, c]);
-            return vectorCrossMulti(h, f) < 0 ? Direction.Right : Direction.Left
-        }
-        );
-        E(this, "checkPointInView", ({x: e, y: t, z: r})=>{
-            const n = ue4Position2Xverse({
-                x: e,
-                y: t,
-                z: r
-            });
-            if (!n)
-                return !1;
-            for (let o = 0; o < 6; o++)
-                if (this._room.scene.frustumPlanes[o].dotCoordinate(n) < 0)
-                    return !1;
-            return !0
-        }
-        );
+        this.initialFov = 0
+        this._state = CameraStates.Normal
+        this._person = Person.Third
+        this._cameraFollowing = !0
         this._room = e
     }
+
+    checkPointOnLeftOrRight(e){
+        const t = ue4Position2Xverse(e);
+        if (!t || this.checkPointInView(e))
+            return;
+        const o = this._room.scene.activeCamera;
+        if (!o)
+            return;
+        const a = [o.target.x, o.target.y, o.target.z]
+          , s = [o.position.x, o.position.y, o.position.z]
+          , {x: l, y: u, z: c} = t
+          , h = calNormVector(s, a)
+          , f = calNormVector(s, [l, u, c]);
+        return vectorCrossMulti(h, f) < 0 ? Direction.Right : Direction.Left
+    }
+
+    checkPointInView(e,t,r){
+        const n = ue4Position2Xverse({
+            x: e,
+            y: t,
+            z: r
+        });
+        if (!n)
+            return !1;
+        for (let o = 0; o < 6; o++)
+            if (this._room.scene.frustumPlanes[o].dotCoordinate(n) < 0)
+                return !1;
+        return !0
+    }
+
     get person() {
         return this._person
     }
@@ -48,7 +51,7 @@ class Camera extends EventEmitter {
         return this._room.currentClickingState.camera
     }
     set cameraFollowing(e) {
-        log$9.info("cameraFollowing setter", e),
+        logger.info("cameraFollowing setter", e),
         this.setCameraFollowing({
             isFollowHost: e
         })
@@ -61,7 +64,7 @@ class Camera extends EventEmitter {
         const {cameraStateType: t} = e.renderInfo
           , r = this._room.sceneManager;
         if (t !== this._state && (this._state = t,
-        log$9.debug("camera._state changed to", CameraStates[t]),
+        logger.debug("camera._state changed to", CameraStates[t]),
         t === CameraStates.CGView ? (r.cameraComponent.switchToCgCamera(),
         r.staticmeshComponent.getCgMesh().show()) : (r.cameraComponent.switchToMainCamera(),
         r.staticmeshComponent.getCgMesh().hide()),
@@ -78,10 +81,10 @@ class Camera extends EventEmitter {
     }
     setCameraState({state: e}) {
         if (this._state === e) {
-            log$9.warn(`You are already in ${CameraStates[e]} camera state`);
+            logger.warn(`You are already in ${CameraStates[e]} camera state`);
             return
         }
-        e === CameraStates.Normal || this._state === CameraStates.ItemView && log$9.warn("CloseUp camera state can only be triggerd by room internally")
+        e === CameraStates.Normal || this._state === CameraStates.ItemView && logger.warn("CloseUp camera state can only be triggerd by room internally")
     }
     turnToFace({extra: e="", offset: t=0}) {
         const r = {
@@ -99,11 +102,11 @@ class Camera extends EventEmitter {
     }
     isInDefaultView() {
         if (!this._room.isHost) {
-            log$9.warn("It is recommended to call the function on the host side");
+            logger.warn("It is recommended to call the function on the host side");
             return
         }
         if (!this._room._currentClickingState)
-            return log$9.error("CurrentState should not be empty"),
+            return logger.error("CurrentState should not be empty"),
             !1;
         const {camera: e, player: t} = this._room._currentClickingState;
         return Math.abs(t.angle.yaw - 180 - e.angle.yaw) % 360 <= 4
@@ -147,12 +150,12 @@ class Camera extends EventEmitter {
         player: this._room._currentClickingState.player
     }) {
         const r = Date.now();
-        return this._setPerson(e, t).then(n=>(log$9.infoAndReportMeasurement({
+        return this._setPerson(e, t).then(n=>(logger.infoAndReportMeasurement({
             tag: Person[e],
             startTime: r,
             metric: "setPerson"
         }),
-        n)).catch(n=>(log$9.infoAndReportMeasurement({
+        n)).catch(n=>(logger.infoAndReportMeasurement({
             tag: Person[e],
             startTime: r,
             metric: "setPerson",

+ 5 - 0
src/Error/ActionBlockedError.js

@@ -0,0 +1,5 @@
+export default class ActionBlockedError extends XverseError {
+    constructor(e) {
+        super(1012, e || "\u52A8\u4F5C\u88AB\u5C4F\u853D")
+    }
+}

+ 5 - 0
src/Error/ActionMaybeDelayError.js

@@ -0,0 +1,5 @@
+export default class ActionMaybeDelayError extends XverseError {
+    constructor(e) {
+        super(2334, e || "\u52A8\u4F5C\u53EF\u80FD\u5EF6\u8FDF\u6267\u884C")
+    }
+}

+ 5 - 0
src/Error/ActionResponseTimeoutError.js

@@ -0,0 +1,5 @@
+export default class ActionResponseTimeoutError extends XverseError {
+    constructor(e) {
+        super(2999, e || "action\u56DE\u5305\u8D85\u65F6")
+    }
+}

+ 5 - 0
src/Error/AuthenticationError.js

@@ -0,0 +1,5 @@
+export default class AuthenticationError extends XverseError {
+    constructor(e) {
+        super(1004, e || "\u9274\u6743\u5931\u8D25")
+    }
+}

+ 5 - 0
src/Error/AvatarAnimationError.js

@@ -0,0 +1,5 @@
+export default class AvatarAnimationError extends XverseError$1 {
+    constructor(e) {
+        super(5101, e || "[Engine] \u89D2\u8272\u52A8\u753B\u64AD\u653E\u5931\u8D25")
+    }
+}

+ 5 - 0
src/Error/AvatarAssetLoadingError.js

@@ -0,0 +1,5 @@
+export default class AvatarAssetLoadingError extends XverseError {
+    constructor(e) {
+        super(5100, e || "[Engine] \u89D2\u8272\u8D44\u4EA7\u52A0\u8F7D\u5931\u8D25")
+    }
+}

+ 5 - 0
src/Error/BroadcastFailedError.js

@@ -0,0 +1,5 @@
+export default class BroadcastFailedError extends XverseError {
+    constructor(e) {
+        super(2011, e || "\u5E7F\u64AD\u63A5\u53E3\u63A5\u53E3\u5F02\u5E38")
+    }
+}

+ 5 - 0
src/Error/ContainerLoadingFailedError.js

@@ -0,0 +1,5 @@
+export default class ContainerLoadingFailedError extends XverseError {
+    constructor(e) {
+        super(5104, e || "[Engine] \u89D2\u8272\u8D44\u4EA7\u62C9\u53D6\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/CreateSessionFailedError.js

@@ -0,0 +1,5 @@
+export default class CreateSessionFailedError extends XverseError {
+    constructor(e) {
+        super(2006, e || "\u521B\u5EFA session \u5931\u8D25")
+    }
+}

+ 5 - 0
src/Error/DataAbnormalError.js

@@ -0,0 +1,5 @@
+export default class DataAbnormalError extends XverseError {
+    constructor(e) {
+        super(2012, e || "\u6570\u636E\u5F02\u5E38")
+    }
+}

+ 5 - 0
src/Error/DoActionBlockedError.js

@@ -0,0 +1,5 @@
+export default class DoActionBlockedError extends XverseError {
+    constructor(e) {
+        super(2333, e || "\u52A8\u4F5C\u88AB\u5C4F\u853D")
+    }
+}

+ 5 - 0
src/Error/DoActionFailedError.js

@@ -0,0 +1,5 @@
+export default class DoActionFailedError extends XverseError {
+    constructor(e) {
+        super(2009, e || "\u52A8\u4F5C\u6267\u884C\u5931\u8D25")
+    }
+}

+ 5 - 0
src/Error/DuplicateAvatarIDError.js

@@ -0,0 +1,5 @@
+export default class DuplicateAvatarIDError extends XverseError {
+    constructor(e) {
+        super(5103, e || "[Engine] \u89D2\u8272id\u91CD\u590D")
+    }
+}

+ 5 - 0
src/Error/ExceedMaxAvatarNumError.js

@@ -0,0 +1,5 @@
+export default class ExceedMaxAvatarNumError extends XverseError {
+    constructor(e) {
+        super(5211, e || "[Engine] \u89D2\u8272\u4E2A\u6570\u8D85\u51FA\u4E0A\u9650")
+    }
+}

+ 5 - 0
src/Error/FrequencyLimitError.js

@@ -0,0 +1,5 @@
+export default class FrequencyLimitError extends XverseError {
+    constructor(e) {
+        super(1014, e || "\u9891\u7387\u9650\u5236")
+    }
+}

+ 5 - 0
src/Error/GetOnVehicleError.js

@@ -0,0 +1,5 @@
+export default class GetOnVehicleError extends XverseError {
+    constructor(e) {
+        super(2015, e || "\u4E0A\u8F7D\u5177\u5931\u8D25\u9700\u8981\u9884\u7EA6")
+    }
+}

+ 5 - 0
src/Error/InitConfigTimeoutError.js

@@ -0,0 +1,5 @@
+export default class InitConfigTimeoutError extends XverseError {
+    constructor(e) {
+        super(1009, e || "\u914D\u7F6E\u521D\u59CB\u5316\u8D85\u65F6")
+    }
+}

+ 5 - 0
src/Error/InitDecoderTimeoutError.js

@@ -0,0 +1,5 @@
+export default class InitDecoderTimeoutError extends XverseError {
+    constructor(e) {
+        super(1008, e || "Decoder \u521D\u59CB\u5316\u8D85\u65F6")
+    }
+}

+ 5 - 0
src/Error/InitEngineError.js

@@ -0,0 +1,5 @@
+export default class InitEngineError extends XverseError {
+    constructor(e) {
+        super(1011, e || "\u5F15\u64CE\u521D\u59CB\u5316\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/InitEngineTimeoutError.js

@@ -0,0 +1,5 @@
+export default class InitEngineTimeoutError extends XverseError {
+    constructor(e) {
+        super(1010, e || "\u5F15\u64CE\u521D\u59CB\u5316\u8D85\u65F6")
+    }
+}

+ 6 - 0
src/Error/InitNetworkTimeoutError.js

@@ -0,0 +1,6 @@
+
+export default class InitNetworkTimeoutError extends XverseError {
+    constructor(e) {
+        super(1007, e || "\u7F51\u7EDC\u521D\u59CB\u5316\u8D85\u65F6")
+    }
+}

+ 5 - 0
src/Error/InternalError.js

@@ -0,0 +1,5 @@
+export default class InternalError extends XverseError {
+    constructor(e) {
+        super(1002, e || "\u5185\u90E8\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/LackOfTokenError.js

@@ -0,0 +1,5 @@
+export default class LackOfTokenError extends XverseError {
+    constructor(e) {
+        super(2003, e || "\u7F3A\u5C11 Token")
+    }
+}

+ 5 - 0
src/Error/LoginFailedError.js

@@ -0,0 +1,5 @@
+export default class LoginFailedError extends XverseError {
+    constructor(e) {
+        super(2004, e || "\u8FDB\u5165\u623F\u95F4\u5931\u8D25")
+    }
+}

+ 7 - 0
src/Error/ParamError.js

@@ -0,0 +1,7 @@
+import XverseError from "./XverseError.js"
+
+export default class ParamError extends XverseError {
+    constructor(e) {
+        super(1001, e || "\u53C2\u6570\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/PreloadCanceledError.js

@@ -0,0 +1,5 @@
+export default class PreloadCanceledError extends XverseError {
+    constructor(e) {
+        super(1013, e || "\u9884\u52A0\u8F7D\u88AB\u53D6\u6D88")
+    }
+}

+ 5 - 0
src/Error/RepeatLoginError.js

@@ -0,0 +1,5 @@
+export default class RepeatLoginError extends XverseError {
+    constructor(e) {
+        super(2017, e || "\u5F02\u5730\u767B\u5F55")
+    }
+}

+ 5 - 0
src/Error/RoomDoseNotExistError.js

@@ -0,0 +1,5 @@
+export default class RoomDoseNotExistError extends XverseError {
+    constructor(e) {
+        super(2018, e || "\u6307\u5B9A\u623F\u95F4\u4E0D\u5B58\u5728")
+    }
+}

+ 5 - 0
src/Error/RoomsUpperLimitError.js

@@ -0,0 +1,5 @@
+export default class RoomsUpperLimitError extends XverseError {
+    constructor(e) {
+        super(2001, e || "\u623F\u95F4\u5230\u8FBE\u4E0A\u9650")
+    }
+}

+ 5 - 0
src/Error/RtcConnectionError.js

@@ -0,0 +1,5 @@
+export default class RtcConnectionError extends XverseError {
+    constructor(e) {
+        super(2008, e || "RTC\u5EFA\u8054\u5931\u8D25")
+    }
+}

+ 5 - 0
src/Error/ServerParamError.js

@@ -0,0 +1,5 @@
+export default class ServerParamError extends XverseError {
+    constructor(e) {
+        super(2002, e || "\u670D\u52A1\u5668\u53C2\u6570\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/ServerRateLimitError.js

@@ -0,0 +1,5 @@
+export default class ServerRateLimitError extends XverseError {
+    constructor(e) {
+        super(2020, e || "\u670D\u52A1\u7AEF\u9891\u7387\u9650\u5236")
+    }
+}

+ 5 - 0
src/Error/StateSyncFailedError.js

@@ -0,0 +1,5 @@
+export default class StateSyncFailedError extends XverseError {
+    constructor(e) {
+        super(2010, e || "\u72B6\u6001\u540C\u6B65\u5931\u8D25")
+    }
+}

+ 5 - 0
src/Error/TicketExpireError.js

@@ -0,0 +1,5 @@
+export default class TicketExpireError extends XverseError {
+    constructor(e) {
+        super(2019, e || "\u7968\u636E\u8FC7\u671F")
+    }
+}

+ 7 - 0
src/Error/TimeoutError.js

@@ -0,0 +1,7 @@
+import XverseError from "./XverseError.js"
+
+export default class TimeoutError extends XverseError {
+    constructor(e) {
+        super(1003, e || "\u8D85\u65F6")
+    }
+}

+ 5 - 0
src/Error/TokenExpiredError.js

@@ -0,0 +1,5 @@
+export default class TokenExpiredError extends XverseError {
+    constructor(e) {
+        super(1005, e || "Token \u5DF2\u8FC7\u671F")
+    }
+}

+ 5 - 0
src/Error/UnsupportedError.js

@@ -0,0 +1,5 @@
+export default class UnsupportedError extends XverseError {
+    constructor(e) {
+        super(1006, e || "\u624B\u673A\u7CFB\u7EDF\u4E0D\u652F\u6301XVerse")
+    }
+}

+ 5 - 0
src/Error/UsersUpperLimitError.js

@@ -0,0 +1,5 @@
+export default class UsersUpperLimitError extends XverseError {
+    constructor(e) {
+        super(2e3, e || "\u76F4\u64AD\u95F4\u4EBA\u6570\u5DF2\u6EE1")
+    }
+}

+ 5 - 0
src/Error/VerifyServiceDownError.js

@@ -0,0 +1,5 @@
+export default class VerifyServiceDownError extends XverseError {
+    constructor(e) {
+        super(2005, e || "\u9274\u6743\u670D\u52A1\u5F02\u5E38")
+    }
+}

+ 5 - 0
src/Error/XBreathPointError.js

@@ -0,0 +1,5 @@
+export default class XBreathPointError extends XverseError {
+    constructor(e) {
+        super(5208, e || "[Engine] \u547C\u5438\u70B9\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/XDecalError.js

@@ -0,0 +1,5 @@
+export default class XDecalError extends XverseError {
+    constructor(e) {
+        super(5206, e || "[Engine] Decal\u6A21\u578B\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/XDecalTextureError.js

@@ -0,0 +1,5 @@
+export default class XDecalTextureError extends XverseError {
+    constructor(e) {
+        super(5207, e || "[Engine] decal\u7EB9\u7406\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/XLowpolyJsonError.js

@@ -0,0 +1,5 @@
+export default class XLowpolyJsonError extends XverseError {
+    constructor(e) {
+        super(5205, e || "[Engine] \u4F20\u5165\u6A21\u578Bjson\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/XLowpolyModelError.js

@@ -0,0 +1,5 @@
+export default class XLowpolyModelError extends XverseError {
+    constructor(e) {
+        super(5204, e || "[Engine] \u4F20\u5165\u6A21\u578Burl\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/XMaterialError.js

@@ -0,0 +1,5 @@
+export default class XMaterialError extends XverseError {
+    constructor(e) {
+        super(5210, e || "[Engine] Material\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/XTvMediaUrlError.js

@@ -0,0 +1,5 @@
+export default class XTvMediaUrlError extends XverseError {
+    constructor(e) {
+        super(5201, e || "[Engine] \u4F20\u5165Url\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/XTvModelError.js

@@ -0,0 +1,5 @@
+export default class XTvModelError extends XverseError {
+    constructor(e) {
+        super(5203, e || "[Engine] \u4F20\u5165TV\u6A21\u578Burl\u9519\u8BEF")
+    }
+}

+ 5 - 0
src/Error/XTvVideoElementError.js

@@ -0,0 +1,5 @@
+export default class XTvVideoElementError extends XverseError {
+    constructor(e) {
+        super(5202, e || "[Engine] \u4F20\u5165video DOM\u9519\u8BEF")
+    }
+}

+ 70 - 0
src/Error/XverseError.js

@@ -0,0 +1,70 @@
+import Codes from "../enum/Codes.js"
+
+export default class XverseError extends Error {
+    constructor(e, t) {
+        super(t);
+        this.code = e
+    }
+    toJSON() {
+        return {
+            code: this.code,
+            message: this.message
+        }
+    }
+    toString() {
+        if (Object(this) !== this)
+            throw new TypeError;
+        let t = this.name;
+        t = t === void 0 ? "Error" : String(t);
+        let r = this.message;
+        r = r === void 0 ? "" : String(r);
+        const n = this.code;
+        return r = n === void 0 ? r : n + "," + r,
+        t === "" ? r : r === "" ? t : t + ": " + r
+    }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 10 - 10
src/Heartbeat.js

@@ -1,21 +1,21 @@
-const log$n = new Logger("heartbeat");
-class Heartbeat {
+import {logger} from "./Logger.js"
+
+export default class Heartbeat {
     constructor(e) {
-        E(this, "_interval", null);
-        E(this, "ping", ()=>{
-            const e = Date.now().toString();
-            this.handler.ping(e)
-        }
-        );
+        this._interval = null
         this.handler = e
     }
+    ping(){
+        const e = Date.now().toString();
+        this.handler.ping(e)
+    }
     start() {
         this.stop(),
-        log$n.debug(`Setting ping interval to ${PING_INTERVAL_MS}ms`),
+        logger.debug(`Setting ping interval to ${PING_INTERVAL_MS}ms`),
         this._interval = window.setInterval(this.ping, PING_INTERVAL_MS)
     }
     stop() {
-        log$n.debug("stop heartbeat"),
+        logger.debug("stop heartbeat"),
         this._interval && window.clearInterval(this._interval)
     }
     pong(e, t) {

+ 0 - 2
src/Http1.js

@@ -1,6 +1,4 @@
 import {logger} from "./Logger.js"
-import Xverse from "./Xverse.js"
-import {modelTable} from "./ModelTable.js"
 import AxiosCanceler from "./AxiosCanceler"
 
 class Http1 extends EventEmitter {

+ 3 - 4
src/JoyStick.js

@@ -1,8 +1,7 @@
-class JoyStick {
+export default class JoyStick {
     constructor(e) {
-        E(this, "_zone", document.createElement("div"));
-        E(this, "_joystick", null);
-        E(this, "_room");
+        this._zone = document.createElement("div")
+        this._joystick = null
         this._room = e
     }
     init(e) {

+ 0 - 1
src/ModelManager.js

@@ -1,6 +1,5 @@
 //const log$f = new Logger("model-manager")
 import {logger} from "./Logger.js"
-import Xverse from "./Xverse.js"
 import {http1} from "./Http1.js"
 
 export default class ModelManager{

+ 35 - 29
src/NetworkController.js

@@ -1,38 +1,23 @@
 import Codes from "./enum/Codes.js"
 import {logger} from "./Logger.js"
+import Socket from "./Socket.js"
+import Rtcp from "./Rtcp.js"
+import NetworkMonitor from "./NetworkMonitor.js"
 
-class NetworkController extends EventEmitter {
+export default class NetworkController extends EventEmitter {
     constructor(e) {
         super();
-        E(this, "socket");
-        E(this, "rtcp");
-        E(this, "stream");
-        E(this, "_state", "connecting");
-        E(this, "_networkMonitor");
-        E(this, "blockedActions", []);
-        E(this, "reconnectCount", 0);
-        E(this, "startGame", ()=>new Promise((e,t)=>{
-            if (!this.rtcp.connected)
-                return t(new InternalError("Game cannot load. Please refresh"));
-            if (!this.rtcp.inputReady)
-                return t(new InternalError("Game is not ready yet. Please wait"));
-            this.socket.on("gameRoomAvailable", r=>{
-                this.setState("connected"),
-                e(r),
-                this.rtcp.heartbeat.start()
-            }
-            ),
-            this.socket.on("socketClosed", r=>{
-                t(r)
-            }
-            ),
-            this.socket.startGame()
-        }
-        ));
+        this.socket = null
+        this.rtcp = null
+        this.stream = null
+        this._state = 'connecting'
+        this._networkMonitor = null
+        this.blockedActions = []
+        this.reconnectCount = 0
         this.room = e,
-        this.socket = new Socket(this),
-        this.rtcp = new Rtcp(this),
-        this.stream = new Stream,
+        this.socket = new Socket(this);
+        this.rtcp = new Rtcp(this);
+        this.stream = new Stream;
         this._networkMonitor = new NetworkMonitor(()=>{
             logger.info("network changed, online:", this._networkMonitor.isOnline),
             this._state === "disconnected" && this._networkMonitor.isOnline && (logger.info("network back to online, try to reconnect"),
@@ -59,6 +44,27 @@ class NetworkController extends EventEmitter {
         }
         )
     }
+
+    startGame(){
+        return new Promise((e,t)=>{
+            if (!this.rtcp.connected)
+                return t(new InternalError("Game cannot load. Please refresh"));
+            if (!this.rtcp.inputReady)
+                return t(new InternalError("Game is not ready yet. Please wait"));
+            this.socket.on("gameRoomAvailable", r=>{
+                this.setState("connected"),
+                e(r),
+                this.rtcp.heartbeat.start()
+            }
+            ),
+            this.socket.on("socketClosed", r=>{
+                t(r)
+            }
+            ),
+            this.socket.startGame()
+        })
+    }
+
     addBlockedActions(e) {
         this.blockedActions.push(...e)
     }

+ 1 - 2
src/NetworkMonitor.js

@@ -1,6 +1,5 @@
-class NetworkMonitor {
+export default class NetworkMonitor {
     constructor(e) {
-        E(this, "_listener");
         this._listener = e
     }
     get isOnline() {

+ 5 - 5
src/PathManager.js

@@ -1,9 +1,9 @@
-class PathManager {
+export default class PathManager {
     constructor() {
-        E(this, "currentArea", "");
-        E(this, "currentPathName", "");
-        E(this, "currentAttitude", "");
-        E(this, "speed", 0)
+        this.currentArea = ''
+        this.currentPathName = ''
+        this.currentAttitude = ''
+        this.speed = 0
     }
     getSpeed(e) {
         const t = {

+ 3 - 7
src/Pool.js

@@ -1,11 +1,7 @@
-class Pool {
+export default class Pool {
     constructor(e, t, r, n, ...o) {
-        E(this, "objCreator");
-        E(this, "objReseter");
-        E(this, "_pool");
-        E(this, "lastFree");
-        E(this, "nextFree");
-        E(this, "capacity");
+        this.lastFree = null
+        this.nextFree = null
         this._pool = [],
         this.objCreator = e,
         this.objReseter = t;

+ 102 - 97
src/Rtcp.js

@@ -1,70 +1,96 @@
-const log$l = new Logger("rtcp");
-class Rtcp extends EventEmitter {
+import {logger} from "./Logger.js"
+import Workers from "./Workers.js"
+
+export default class Rtcp extends EventEmitter {
     constructor(e) {
         super();
-        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);
-                log$l.debug(`Got ice candidate: ${t}`),
-                this.network.socket.send({
-                    id: "ice_candidate",
-                    data: btoa(t)
+        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 = e;
+        //this.workers = new Workers(this,new Logger("decode")),
+        //this.workers.registerLogger(new Logger("decode")),
+        this.workers = new Workers(this);
+        this.workers.registerLogger();
+        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
                 })
             }
+        })
+    }
+
+    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)
+            })
         }
-        );
-        E(this, "onIcecandidateerror", e=>{
-            log$l.error("onicecandidateerror", e.errorCode, e.errorText, e)
-        }
-        );
-        E(this, "onIceStateChange", e=>{
-            switch (e.target.iceGatheringState) {
+    }
+
+    onIcecandidateerror(e){
+        logger.error("onicecandidateerror", e.errorCode, e.errorText, e)
+    }
+
+    onIceStateChange(e){
+        switch (e.target.iceGatheringState) {
             case "gathering":
-                log$l.info("ice gathering");
+                logger.info("ice gathering");
                 break;
             case "complete":
-                log$l.info("Ice gathering completed")
+                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
             }
         }
-        );
-        E(this, "onIceConnectionStateChange", ()=>{
-            if (!!this.connection)
-                switch (log$l.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;
+    }
+
+    async setRemoteDescription(e,t){
+        var a, s, l;
             if (!this.connection)
                 return;
             const r = JSON.parse(atob(e))
@@ -79,7 +105,7 @@ class Rtcp extends EventEmitter {
             try {
                 await this.connection.setLocalDescription(o)
             } catch (u) {
-                log$l.error("error", u)
+                logger.error("error", u)
             }
             this.isAnswered = !0,
             this.network.rtcp.flushCandidate(),
@@ -88,10 +114,10 @@ class Rtcp extends EventEmitter {
                 data: btoa(JSON.stringify(o))
             }),
             t.srcObject = this.mediaStream
-        }
-        );
-        E(this, "flushCandidate", ()=>{
-            this.isFlushing || !this.isAnswered || (this.isFlushing = !0,
+    }
+
+    flushCandidate(){
+        this.isFlushing || !this.isAnswered || (this.isFlushing = !0,
             this.candidates.forEach(e=>{
                 const t = atob(e)
                   , r = JSON.parse(t);
@@ -100,57 +126,36 @@ class Rtcp extends EventEmitter {
                 const n = new RTCIceCandidate(r);
                 this.connection && this.connection.addIceCandidate(n).then(()=>{}
                 , o=>{
-                    log$l.info("add candidate failed", o)
+                    logger.info("add candidate failed", o)
                 }
                 )
             }
             ),
             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,new Logger("decode")),
-        this.workers.registerLogger(new Logger("decode")),
-        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 && log$l.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;
         const e = Date.now();
         this.connection.ondatachannel = t=>{
-            log$l.info(`ondatachannel: ${t.channel.label}`),
+            logger.info(`ondatachannel: ${t.channel.label}`),
             this.inputChannel = t.channel,
             this.inputChannel.onopen = ()=>{
                 var r;
-                log$l.info("The input channel has opened, id:", (r = this.inputChannel) == null ? void 0 : r.id),
+                logger.info("The input channel has opened, id:", (r = this.inputChannel) == null ? void 0 : r.id),
                 this.inputReady = !0,
                 this.emit("rtcConnected"),
-                this.network.room.currentNetworkOptions.reconnect || (log$l.infoAndReportMeasurement({
+                this.network.room.currentNetworkOptions.reconnect || (logger.infoAndReportMeasurement({
                     metric: "datachannelOpenedAt",
                     startTime: this.network.room._startTime,
                     group: "joinRoom"
                 }),
-                log$l.infoAndReportMeasurement({
+                logger.infoAndReportMeasurement({
                     metric: "datachannelOpenedCost",
                     startTime: e,
                     group: "joinRoom"
@@ -159,7 +164,7 @@ class Rtcp extends EventEmitter {
             ,
             this.inputChannel.onclose = ()=>{
                 var r;
-                return log$l.info("The input channel has closed, id:", (r = this.inputChannel) == null ? void 0 : r.id)
+                return logger.info("The input channel has closed, id:", (r = this.inputChannel) == null ? void 0 : r.id)
             }
             ,
             this.inputChannel.onmessage = r=>{
@@ -184,7 +189,7 @@ class Rtcp extends EventEmitter {
     disconnect() {
         var e, t, r;
         this.heartbeat.stop(),
-        log$l.info("ready to close datachannel, id", (e = this.inputChannel) == null ? void 0 : e.id),
+        logger.info("ready to close datachannel, id", (e = this.inputChannel) == null ? void 0 : e.id),
         (t = this.inputChannel) == null || t.close(),
         (r = this.connection) == null || r.close(),
         this.connection = null,
@@ -198,7 +203,7 @@ class Rtcp extends EventEmitter {
         try {
             t = JSON.stringify(e)
         } catch (r) {
-            log$l.error(r);
+            logger.error(r);
             return
         }
         this.input(t)

+ 3 - 4
src/Signal.js

@@ -2,11 +2,10 @@
 import Codes from "./enum/Codes.js"
 import {logger} from "./Logger.js"
 
-class Signal {
+export default class Signal {
     constructor(e) {
-        E(this, "_room");
-        E(this, "signalHandleActived", !0);
-        E(this, "isUpdatedYUV", !0);
+        this.signalHandleActived = !0
+        this.isUpdatedYUV = !0
         this._room = e
     }
     handleSignal(e) {

+ 71 - 316
src/Socket.js

@@ -1,76 +1,14 @@
-class Socket extends EventEmitter {
+import {logger} from "./Logger.js"
+import Heartbeat from "./Heartbeat.js"
+
+export default class Socket extends EventEmitter {
     constructor(e) {
         super();
-        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: tconst log$k = new Logger("ws");
-class Socket extends EventEmitter {
-    constructor(e) {
-        super();
-        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" && log$k.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),
-            log$k.warn("startGame", le(oe({}, x), {
-                data: JSON.parse(x.data)
-            }))
-        }
-        );
+        this._ws = null
+        this._openTimer = null
+        this.connected = !1
+        this._hasTimeout = !1
+        this.heartbeat = null
         this.network = e,
         this.heartbeat = new Heartbeat({
             ping: t=>{
@@ -96,253 +34,70 @@ class Socket extends EventEmitter {
             }
         })
     }
-    get connection() {
-        return this._ws
-    }
-    start() {
-        this._hasTimeout = !1;
-        const e = this.getAddress();
-        log$k.info(`connecting to ${e}`);
-        const t = Date.now();
-        this._ws = new WebSocket(e),
-        this._openTimer = new Timeout(()=>{
-            const r = `Failed to open websocket in ${DEFAULT_OPEN_TIMEOUT_MS} ms`;
-            this._hasTimeout = !0,
-            this.emit("socketClosed", new InitNetworkTimeoutError(r))
-        }
-        ,DEFAULT_OPEN_TIMEOUT_MS),
-        this._ws.onopen = ()=>{
-            var r;
-            (r = this._openTimer) == null || r.clear(),
-            this.connected = !0,
-            this.heartbeat.start(),
-            this.network.room.currentNetworkOptions.reconnect || (log$k.infoAndReportMeasurement({
-                metric: "wsOpenedAt",
-                group: "joinRoom",
-                startTime: this.network.room._startTime
-            }),
-            log$k.infoAndReportMeasurement({
-                metric: "wsOpenedCost",
-                group: "joinRoom",
-                startTime: t
-            }))
-        }
-        ,
-        this.handleWSEvent()
-    }
-    getAddress() {
-        const {wsServerUrl: e, reconnect: t, sessionId: r, token: n, roomId: o, userId: a, pageSession: s} = this.network.room.currentNetworkOptions
-          , l = this.network.room.skinId;
-        let u = e;
-        t && (u = u + `?reconnect=true&lastSessionID=${r}`);
-        const c = `userId=${a}&roomId=${o}&pageSession=${s}` + (this.network.room.isHost ? `&skinId=${l}` : "") + (n ? `&token=${n}` : "");
-        return u = u.indexOf("?") > -1 ? u + "&" + c : u + "?" + c,
-        u
-    }
-    handleWSEvent() {
-        const e = this._ws;
-        e.addEventListener("error", t=>{
-            this.connected = !1,
-            log$k.error("webscoket error", t),
-            this.emit("socketClosed", new InternalError("connect to address error: " + this.network.room.currentNetworkOptions.wsServerUrl))
-        }
-        ),
-        e.addEventListener("close", t=>{
-            this.connected = !1,
-            this._onClose(t)
-        }
-        ),
-        e.addEventListener("message", t=>{
-            if (!t || this._hasTimeout || !this.connected)
-                return;
-            let r = null;
-            try {
-                r = JSON.parse(t.data)
-            } catch (o) {
-                log$k.error(o);
-                return
-            }
-            if (!r)
-                return;
-            const n = r.id;
-            if (!!n)
-                switch (n !== "heartbeat" && log$k.info(`receive ws frame: ${t.data}`),
-                n) {
-                case "fail":
-                    break;
-                case "init":
-                    try {
-                        const o = r.data.slice(-37, -1);
-                        reporter.updateBody({
-                            serverSession: o
-                        })
-                    } catch (o) {
-                        console.error(o)
-                    }
-                    this.network.rtcp.start();
-                    break;
-                case "heartbeat":
-                    this.heartbeat.pong(r.data);
-                    break;
-                case "offer":
-                    this.network.rtcp.setRemoteDescription(r.data, this.network.stream.el);
-                    break;
-                case "ice_candidate":
-                    this.network.rtcp.addCandidate(r.data);
-                    break;
-                case "start":
-                    this.emit("gameRoomAvailable", r);
-                    break;
-                case "error":
-                    try {
-                        const {Code: o, Msg: a} = JSON.parse(r.data);
-                        if (o) {
-                            if (o == 3003)
-                                return this.emit("socketClosed", new TokenExpiredError);
-                            if (authenticationErrorCodes.indexOf(o) > -1)
-                                return this.emit("socketClosed", new AuthenticationError("\u9274\u6743\u9519\u8BEF:" + a));
-                            {
-                                const s = getErrorByCode(o);
-                                this.emit("socketClosed", new s(a))
-                            }
-                        }
-                    } catch (o) {
-                        log$k.error(o),
-                        this.emit("socketClosed", new InternalError(r.data))
-                    }
-                    break;
-                case "checkLatency":
-                    {
-                        const o = r.packet_id
-                          , a = r.data.split(",");
-                        this.onLatencyCheck({
-                            packetId: o,
-                            addresses: a
-                        });
-                        break
-                    }
-                default:
-                    log$k.warn("unkown ws message type", n, r)
-                }
-        }
-        )
-    }
-    onLatencyCheck(e) {
-        const t = [...new Set(e.addresses || [])];
-        Promise.all(t.map(r=>({
-            [r]: 9999
-        }))).then(r=>{
-            const n = Object.assign({}, ...r);
-            this.latency(n, e.packetId)
-        }
-        )
-    }
-    wsNoReady() {
-        return this._ws.readyState == WebSocket.CLOSED || this._ws.readyState == WebSocket.CLOSING || this._ws.readyState == WebSocket.CONNECTING
-    }
-    prepareReconnect() {
-        this._close({
-            code: WS_CLOSE_RECONNECT,
-            reason: "reconnect"
+
+    latency(e,t){
+        this.send({
+            id: "checkLatency",
+            data: JSON.stringify(e),
+            packet_id: t
         })
     }
-    _onClose({code: e, reason: t}) {
-        this._openTimer && this._openTimer.clear(),
-        log$k.warn(`ws closed: ${e} ` + t),
-        [WS_CLOSE_RECONNECT, WS_CLOSE_NORMAL].includes(e) || this.emit("socketClosed", new InternalError("Websocket error"))
+
+    send(e){
+        if (this.wsNoReady())
+            return;
+        const t = JSON.stringify(e);
+        e.id !== "heartbeat" && logger.info("send ws frame", t),
+        this._ws.send(t)
     }
-    _close({code: e, reason: t}) {
-        var r;
-        (r = this._ws) == null || r.close(e, t)
-    }
-    quit() {
-        this._close({
-            code: WS_CLOSE_NORMAL,
-            reason: "quit"
-        })
-    }
-}
-        }));
-        E(this, "send", e=>{
-            if (this.wsNoReady())
-                return;
-            const t = JSON.stringify(e);
-            e.id !== "heartbeat" && log$k.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),
-            log$k.warn("startGame", le(oe({}, x), {
-                data: JSON.parse(x.data)
-            }))
-        }
-        );
-        this.network = e,
-        this.heartbeat = new Heartbeat({
-            ping: t=>{
-                var r;
-                if (!this.connected) {
-                    this.heartbeat.stop(),
-                    (r = e.room.stats) == null || r.assign({
-                        rtt: 0
-                    });
-                    return
-                }
-                this.send({
-                    id: "heartbeat",
-                    data: t
-                })
-            }
-            ,
-            pong(t) {
-                var r;
-                (r = e.room.stats) == null || r.assign({
-                    rtt: 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
     }
     start() {
         this._hasTimeout = !1;
         const e = this.getAddress();
-        log$k.info(`connecting to ${e}`);
+        logger.info(`connecting to ${e}`);
         const t = Date.now();
         this._ws = new WebSocket(e),
         this._openTimer = new Timeout(()=>{
@@ -356,12 +111,12 @@ class Socket extends EventEmitter {
             (r = this._openTimer) == null || r.clear(),
             this.connected = !0,
             this.heartbeat.start(),
-            this.network.room.currentNetworkOptions.reconnect || (log$k.infoAndReportMeasurement({
+            this.network.room.currentNetworkOptions.reconnect || (logger.infoAndReportMeasurement({
                 metric: "wsOpenedAt",
                 group: "joinRoom",
                 startTime: this.network.room._startTime
             }),
-            log$k.infoAndReportMeasurement({
+            logger.infoAndReportMeasurement({
                 metric: "wsOpenedCost",
                 group: "joinRoom",
                 startTime: t
@@ -383,7 +138,7 @@ class Socket extends EventEmitter {
         const e = this._ws;
         e.addEventListener("error", t=>{
             this.connected = !1,
-            log$k.error("webscoket error", t),
+            logger.error("webscoket error", t),
             this.emit("socketClosed", new InternalError("connect to address error: " + this.network.room.currentNetworkOptions.wsServerUrl))
         }
         ),
@@ -399,14 +154,14 @@ class Socket extends EventEmitter {
             try {
                 r = JSON.parse(t.data)
             } catch (o) {
-                log$k.error(o);
+                logger.error(o);
                 return
             }
             if (!r)
                 return;
             const n = r.id;
             if (!!n)
-                switch (n !== "heartbeat" && log$k.info(`receive ws frame: ${t.data}`),
+                switch (n !== "heartbeat" && logger.info(`receive ws frame: ${t.data}`),
                 n) {
                 case "fail":
                     break;
@@ -447,7 +202,7 @@ class Socket extends EventEmitter {
                             }
                         }
                     } catch (o) {
-                        log$k.error(o),
+                        logger.error(o),
                         this.emit("socketClosed", new InternalError(r.data))
                     }
                     break;
@@ -462,7 +217,7 @@ class Socket extends EventEmitter {
                         break
                     }
                 default:
-                    log$k.warn("unkown ws message type", n, r)
+                    logger.warn("unkown ws message type", n, r)
                 }
         }
         )
@@ -488,7 +243,7 @@ class Socket extends EventEmitter {
     }
     _onClose({code: e, reason: t}) {
         this._openTimer && this._openTimer.clear(),
-        log$k.warn(`ws closed: ${e} ` + t),
+        logger.warn(`ws closed: ${e} ` + t),
         [WS_CLOSE_RECONNECT, WS_CLOSE_NORMAL].includes(e) || this.emit("socketClosed", new InternalError("Websocket error"))
     }
     _close({code: e, reason: t}) {

+ 14 - 14
src/Stats.js

@@ -1,20 +1,20 @@
-const log$h = new Logger("stats")
-  , numberFormat = new Intl.NumberFormat(window.navigator.language,{
+
+const numberFormat = new Intl.NumberFormat(window.navigator.language,{
     maximumFractionDigits: 0
 });
-class Stats extends EventEmitter {
+import {logger} from "./Logger.js"
+export default class Stats extends EventEmitter {
     constructor(e) {
         super();
-        E(this, "_interval", null);
-        E(this, "_netInterval", null);
-        E(this, "_disabled", !1);
-        E(this, "_show", !1);
-        E(this, "_aggregatedStats", {});
-        E(this, "_displayElement", null);
-        E(this, "_extraStats", {});
-        E(this, "_networkSamples", []);
-        E(this, "externalStats");
-        E(this, "constructedTime");
+        this._netInterval = null
+        this._disabled = !1
+        this._show = !1
+        this._aggregatedStats = {}
+        this._displayElement = null
+        this._extraStats = {}
+        this._networkSamples = []
+        this.externalStats = null
+        this.constructedTime = null
         this.room = e,
         this.constructedTime = Date.now(),
         this._interval = window.setInterval(()=>{
@@ -88,7 +88,7 @@ class Stats extends EventEmitter {
           , d = 70;
         (h >= d || f >= d) && (e = !0);
         const _ = this.room.viewMode === "observer" || this.room.viewMode === "serverless";
-        e && !_ && (log$h.infoAndReportMeasurement({
+        e && !_ && (logger.infoAndReportMeasurement({
             metric: "weakNetwork",
             startTime: Date.now(),
             extra: {

+ 2 - 4
src/Timeout.js

@@ -1,8 +1,6 @@
-class Timeout {
+export default class Timeout {
     constructor(e, t, r=!0) {
-        E(this, "_fn");
-        E(this, "_delay");
-        E(this, "_timeout");
+        this._timeout = null
         this._fn = e,
         this._delay = t,
         r && this.start()

+ 34 - 27
src/Workers.js

@@ -1,10 +1,17 @@
-let log$m = defaultLogger;
+const defaultLogger = {
+    info: console.log,
+    debug: console.log,
+    error: console.error,
+    infoAndReportMeasurement: (...i)=>{}
+};
+
 const USER_ID = "987412365"
   , PAGE_SESSION = "aaabbbccc"
   , SERVER_SESSION = "cccbbbaaa"
   , COS_PREFIX = "error-bitstreams-auto-uploaded-from-application/"
   , FRAME_COMPOSE_LENGTH = 5;
-class Workers {
+
+export default class Workers {
     constructor(e, t) {
         this.rtcp = e,
         this.cacheSize = 0,
@@ -164,7 +171,7 @@ class Workers {
         this._rtcp = e
     }
     registerLogger(e) {
-        log$m = e
+        defaultLogger = e
     }
     registerFunction(e, t) {
         this.functionMap.set(e, t)
@@ -211,7 +218,7 @@ class Workers {
             user_id: this.userId_test,
             packet_id: a
         };
-        log$m.debug("send data: ", s),
+        defaultLogger.debug("send data: ", s),
         this._rtcp.sendData(s)
     }
     onRotateInPanoMode(e) {
@@ -249,7 +256,7 @@ class Workers {
                 this.StartMovingTs = this.PendingStartMovingTs,
                 this.PendingMovingTraceId = "",
                 this.PendingStartMovingTs = 0,
-                log$m.info("MoveTo TraceId match", this.StartMovingTs, Date.now());
+                defaultLogger.info("MoveTo TraceId match", this.StartMovingTs, Date.now());
                 const r = Date.now();
                 this.lastMoveResponseTime = r,
                 this.lastMoveProcessTime = r,
@@ -301,17 +308,17 @@ class Workers {
                             break
                         }
                     case 3:
-                        log$m.debug("status is 3")
+                        defaultLogger.debug("status is 3")
                     }
                 }
             }
             , 1e3)
         } else
-            o === "MoveTo" ? (log$m.info("receive moveto traceId ", r, " at timestamp", n),
+            o === "MoveTo" ? (defaultLogger.info("receive moveto traceId ", r, " at timestamp", n),
             this.PendingMovingTraceId = r,
             this.PendingStartMovingTs = n,
             this.moveEvent = o,
-            this.frameServerCircular.clear()) : o === "GetOnAirship" || o === "GetOnVehicle" ? (log$m.info("receive airship traceId ", r, " at timestamp ", n),
+            this.frameServerCircular.clear()) : o === "GetOnAirship" || o === "GetOnVehicle" ? (defaultLogger.info("receive airship traceId ", r, " at timestamp ", n),
             this.PendingMovingTraceId = r,
             this.PendingStartMovingTs = n,
             this.moveEvent = o,
@@ -355,14 +362,14 @@ class Workers {
         if (!this.firstYUVReceived) {
             this.firstYUVDecoded = e.data.yuv_ts;
             const o = this.firstYUVDecoded - this.rtcp.network.room._startTime;
-            log$m.infoAndReportMeasurement({
+            defaultLogger.infoAndReportMeasurement({
                 metric: "firstYUVDecodedAt",
                 value: o,
                 group: "joinRoom"
             }),
             this.firstRender = Date.now();
             const a = this.firstYUVDecoded - this.rtcp.network.room._startTime;
-            log$m.infoAndReportMeasurement({
+            defaultLogger.infoAndReportMeasurement({
                 metric: "firstRenderAt",
                 value: a,
                 group: "joinRoom"
@@ -437,12 +444,12 @@ class Workers {
         try {
             c = JSON.stringify(u)
         } catch (y) {
-            log$m.error(y);
+            defaultLogger.error(y);
             return
         }
     }
     ReceivePanoramaDecodeMessage(e) {
-        log$m.info("Receive Panorama Image in Workers.ts"),
+        defaultLogger.info("Receive Panorama Image in Workers.ts"),
         MaskSetToOne(e.data.tileId, this.PanoView);
         let t = 0, r;
         const n = this.PendingMasks.length;
@@ -541,8 +548,8 @@ class Workers {
                     });
                     break;
                 case 6:
-                    log$m.infoAndReportMeasurement(n.data),
-                    log$m.debug("WASM Ready Cost");
+                    defaultLogger.infoAndReportMeasurement(n.data),
+                    defaultLogger.debug("WASM Ready Cost");
                     break;
                 case 7:
                     this.ReceivePanoramaDecodeMessage(n);
@@ -556,7 +563,7 @@ class Workers {
                         try {
                             a = JSON.stringify(o)
                         } catch (l) {
-                            log$m.error(l);
+                            defaultLogger.error(l);
                             return
                         }
                         const s = "wasm:" + a;
@@ -565,12 +572,12 @@ class Workers {
                     }
                 case 9:
                     {
-                        log$m.info(n.data.printMsg);
+                        defaultLogger.info(n.data.printMsg);
                         break
                     }
                 case 10:
                     {
-                        log$m.error(n.data.printMsg),
+                        defaultLogger.error(n.data.printMsg),
                         this.executeFunction("error", {
                             code: n.data.code,
                             message: n.data.printMsg
@@ -578,8 +585,8 @@ class Workers {
                         break
                     }
                 default:
-                    log$m.error("Receive unknown message event from decoder"),
-                    log$m.debug(n.data);
+                    defaultLogger.error("Receive unknown message event from decoder"),
+                    defaultLogger.debug(n.data);
                     break
                 }
             }
@@ -593,7 +600,7 @@ class Workers {
             const n = Date.now();
             if (this.firstUpdateYUV) {
                 const h = ((t = this.cachedStreams[e]) == null ? void 0 : t.byteLength) || 0;
-                log$m.infoAndReportMeasurement({
+                defaultLogger.infoAndReportMeasurement({
                     metric: "firstUpdateStreamLength",
                     value: h,
                     group: "joinRoom"
@@ -615,7 +622,7 @@ class Workers {
             const a = Date.now()
               , s = o - n
               , l = a - o;
-            (s > 33 || l > 10) && log$m.debug("[wwwarning] updateYUV takes ", s, " ms, postMessage takes ", l, " ms for index ", this.cachedPtss[e]),
+            (s > 33 || l > 10) && defaultLogger.debug("[wwwarning] updateYUV takes ", s, " ms, postMessage takes ", l, " ms for index ", this.cachedPtss[e]),
             o - this.lastRenderTs > 84 && this.JankTimes++,
             o - this.lastRenderTs > 125 && this.bigJankTimes++,
             this.lastRenderTs = o;
@@ -782,7 +789,7 @@ class Workers {
         this.calcSendTimeDiff(h);
         let b;
         if (this.inPanoMode && (c > 0 || f))
-            return log$m.error("Stream Protocal Violation: receive illegal stream in Pano mode"),
+            return defaultLogger.error("Stream Protocal Violation: receive illegal stream in Pano mode"),
             !0;
         if (v === m) {
             this.receivedMedia++;
@@ -844,7 +851,7 @@ class Workers {
             !this.firstMediaReceived) {
                 this.firstMediaArraval = Date.now();
                 const G = this.firstMediaArraval - this.rtcp.network.room._startTime;
-                log$m.infoAndReportMeasurement({
+                defaultLogger.infoAndReportMeasurement({
                     metric: "firstMediaArravalAt",
                     value: G,
                     group: "joinRoom"
@@ -914,7 +921,7 @@ class Workers {
                     !this.firstMediaReceived) {
                         this.firstMediaArraval = Date.now();
                         const H = this.firstMediaArraval - this.rtcp.network.room._startTime;
-                        log$m.infoAndReportMeasurement({
+                        defaultLogger.infoAndReportMeasurement({
                             metric: "firstMediaArravalAt",
                             value: H,
                             group: "joinRoom"
@@ -922,7 +929,7 @@ class Workers {
                         this.firstMediaReceived = !0
                     }
                 } else
-                    this.cacheFrameComposes[O].size > m && log$m.debug("I frame exceed, cache size is ", this.cacheSize, ", total size is ", m);
+                    this.cacheFrameComposes[O].size > m && defaultLogger.debug("I frame exceed, cache size is ", this.cacheSize, ", total size is ", m);
             else if (O == -1) {
                 let D = this.hasFrmCntInCache(-1);
                 if (D == -1) {
@@ -943,7 +950,7 @@ class Workers {
         return !0
     }
     reset() {
-        log$m.debug("Worker reset is called"),
+        defaultLogger.debug("Worker reset is called"),
         this.cacheFrameCnt = 0,
         this.receivedMedia = 0,
         this.reconnectSignal = !0,
@@ -952,7 +959,7 @@ class Workers {
         })
     }
     dataHandleOff(e) {
-        log$m.debug("hhh")
+        defaultLogger.debug("hhh")
     }
     dataHandle(e) {
         this.saveframe && (this.decoderWorker.postMessage({

+ 47 - 54
src/XAvatarManager.js

@@ -1,47 +1,40 @@
-const log$D = new Logger$1("AvatarManager");
-var EAvatarRelationRank = (i=>(i[i.Self = 0] = "Self",
-i[i.Npc = 1] = "Npc",
-i[i.Friend = 2] = "Friend",
-i[i.Stranger = 3] = "Stranger",
-i[i.Robot = 4] = "Robot",
-i[i.Unknown = 5] = "Unknown",
-i))(EAvatarRelationRank || {});
-class XAvatarManager {
+import {logger} from "./Logger.js"
+import Pool from "./Pool"
+
+export default class XAvatarManager {
     constructor(e) {
-        E(this, "characterMap", new Map);
-        E(this, "curAnimList", []);
-        E(this, "extraComps", new Map);
-        E(this, "_mainUser");
-        E(this, "_scene");
-        E(this, "_sceneManager");
-        E(this, "_lodSettings");
-        E(this, "maxBillBoardDist", 0);
-        E(this, "maxAvatarNum", 0);
-        E(this, "currentLODUsers", []);
-        E(this, "bboxMeshPool");
-        E(this, "_distLevels", []);
-        E(this, "_maxLODUsers", []);
-        E(this, "_cullingDistance", 0);
-        E(this, "_maxDistRange");
-        E(this, "_delayTime", 100);
-        E(this, "_queueLength", -1);
-        E(this, "_queue", []);
-        E(this, "_processList", []);
-        E(this, "_process");
-        E(this, "_updateLoopObserver");
-        E(this, "_avatarInDistance", []);
-        E(this, "_renderedAvatar", []);
-        E(this, "_enableNickname", !0);
-        E(this, "_tickObserver");
-        E(this, "_tickInterval");
-        E(this, "_defaultAnims");
-        E(this, "_tickDispose", 0);
-        E(this, "_disposeTime", 100);
-        E(this, "avatarLoader", avatarLoader);
-        this._scene = e.mainScene,
-        this._sceneManager = e,
-        this.initAvatarMap(),
-        this._initSettings(),
+        this.characterMap = new Map
+        this.curAnimList = []
+        this.extraComps = new Map
+        this._mainUser = null
+        this._lodSettings = null
+        this.maxBillBoardDist = 0
+        this.maxAvatarNum = 0
+        this.currentLODUsers = []
+        this.bboxMeshPool = null
+        this._distLevels = []
+        this._maxLODUsers = []
+        this._cullingDistance = 0
+        this._maxDistRange = null
+        this._delayTime = 100
+        this._queueLength = -1
+        this._queue = []
+        this._processList = []
+        this._process = null
+        this._updateLoopObserver = null
+        this._avatarInDistance = []
+        this._renderedAvatar = []
+        this._enableNickname = !0
+        this._tickObserver = null
+        this._tickInterval = null
+        this._defaultAnims = null
+        this._tickDispose = 0
+        this._disposeTime = 100
+        this.avatarLoader = avatarLoader
+        this._scene = e.mainScene;
+        this._sceneManager = e;
+        this.initAvatarMap();
+        this._initSettings();
         this._maxDistRange = this._distLevels[this._distLevels.length - 1],
         this.bboxMeshPool = new Pool(this.createBboxAsset,this.resetBboxAsset,0,this.maxAvatarNum,this._sceneManager.Scene,0,0,0),
         this._tickInterval = 250;
@@ -184,7 +177,7 @@ class XAvatarManager {
             if (this.registerAvatar(u),
             r == 0)
                 this.setMainAvatar(u.id),
-                this.addAvatarToScene(u, 0).then(c=>(log$D.debug(`[Engine] avatar ${u.id} has been added to scene`),
+                this.addAvatarToScene(u, 0).then(c=>(logger.debug(`[Engine] avatar ${u.id} has been added to scene`),
                 c ? (this._updateBillboardStatus(c, BillboardStatus.SHOW),
                 setTimeout(()=>{
                     this.launchProcessLoadingLoop()
@@ -241,14 +234,14 @@ class XAvatarManager {
             }
             return calcDistance3D(t, r) * s
         } else
-            return log$D.warn("user position or camera position is not correct!"),
+            return logger.warn("user position or camera position is not correct!"),
             1e11
     }
     _distToCamera(e) {
         var n;
         const t = (n = this._sceneManager) == null ? void 0 : n.cameraComponent.getCameraPose().position
           , r = e.position;
-        return r && t ? calcDistance3D(t, r) : (log$D.warn("user position or camera position is not correct!"),
+        return r && t ? calcDistance3D(t, r) : (logger.warn("user position or camera position is not correct!"),
         1e11)
     }
     showAll(e) {
@@ -303,7 +296,7 @@ class XAvatarManager {
                 return
             }
             if (this.getAvatarById(t.id).rootNode.getChildMeshes().length < e.size) {
-                log$D.error(`this avatar does not have complete components, render failed. current list ${(a = this.getAvatarById(t.id)) == null ? void 0 : a.clothesList},avatar: ${t.id},${t.nickName}`),
+                logger.error(`this avatar does not have complete components, render failed. current list ${(a = this.getAvatarById(t.id)) == null ? void 0 : a.clothesList},avatar: ${t.id},${t.nickName}`),
                 t.isInLoadingList = !1,
                 t.removeAvatarFromScene(),
                 this.currentLODUsers[t.distLevel]--;
@@ -316,7 +309,7 @@ class XAvatarManager {
             t.getBbox(),
             t.nameBoard && t.nickName.length > 0 && t.setNickName(t.nickName, t.nameBoard.DEFAULT_CONFIGS),
             t.bubble && t.words.length > 0 && t.say(t.words, t.bubble.DEFAULT_CONFIGS),
-            log$D.debug(`[Engine] avatar ${t.id} has been added to scene, current number of users : ${this.currentLODUsers}`)
+            logger.debug(`[Engine] avatar ${t.id} has been added to scene, current number of users : ${this.currentLODUsers}`)
         }
         )
     }
@@ -475,7 +468,7 @@ class XAvatarManager {
                     this._process.isInLoadingList = !1,
                     this._process = void 0,
                     t += 100),
-                    log$D.warn(`[Engine] body ${o.id} uri error, type ${o.type}, avatar has been hided` + a)
+                    logger.warn(`[Engine] body ${o.id} uri error, type ${o.type}, avatar has been hided` + a)
                 }
                 ) : o.type === avatarSetting.animations ? this.loadAnimation(this._process.avatarType, o.id).then(a=>{
                     a && e.set(avatarSetting.animations, a),
@@ -489,7 +482,7 @@ class XAvatarManager {
                     this._process.isInLoadingList = !1,
                     this._process = void 0,
                     t += 100),
-                    log$D.warn(`animation  ${o.id} uri error, type ${o.type}, avatar has been hided` + a)
+                    logger.warn(`animation  ${o.id} uri error, type ${o.type}, avatar has been hided` + a)
                 }
                 ) : this.loadDecoration(o.type, o.id, o.lod).then(a=>{
                     a && e.set(a.type, a),
@@ -503,7 +496,7 @@ class XAvatarManager {
                     this._process.isInLoadingList = !1,
                     this._process = void 0,
                     t += 100),
-                    log$D.warn(`component ${o.id} uri error, type ${o.type}, avatar has been hided` + a)
+                    logger.warn(`component ${o.id} uri error, type ${o.type}, avatar has been hided` + a)
                 }
                 ) : t += 100
             }
@@ -511,8 +504,8 @@ class XAvatarManager {
         }
     }
     _validateContainer(e) {
-        return !e.meshes || e.meshes.length <= 1 ? (log$D.warn("import container has no valid meshes"),
-        !1) : !e.skeletons || e.skeletons.length == 0 ? (log$D.warn("import container has no valid skeletons"),
+        return !e.meshes || e.meshes.length <= 1 ? (logger.warn("import container has no valid meshes"),
+        !1) : !e.skeletons || e.skeletons.length == 0 ? (logger.warn("import container has no valid skeletons"),
         !1) : !0
     }
     _getAssetContainer(e, t) {
@@ -591,7 +584,7 @@ class XAvatarManager {
                 this._clipContainerRes(a);
                 const s = a.meshes[1].clone(a.meshes[1].name, null);
                 if (!s) {
-                    log$D.warn("[Engine] decoration does not exist!"),
+                    logger.warn("[Engine] decoration does not exist!"),
                     n(null);
                     return
                 }

+ 10 - 10
src/XCameraComponent.js

@@ -12,21 +12,21 @@ class XCameraComponent {
         E(this, "initCamera", e=>{
             const {maxZ: t=1e4, minZ: r=.1, angularSensibility: n=2e3} = e;
             this.mainCamera = new FreeCamera("camera_main",new Vector3(0,1e3,0),this.scene),
-            this.mainCamera.mode = Camera$1.PERSPECTIVE_CAMERA,
+            this.mainCamera.mode = BABYLON.Camera.PERSPECTIVE_CAMERA,
             this.mainCamera.speed = .1,
             this.mainCamera.angularSensibility = n,
             this.mainCamera.setTarget(new Vector3(0,1010,0)),
             this.mainCamera.minZ = r,
             this.mainCamera.fov = Math.PI * this.yuvInfo.fov / 180,
             this.mainCamera.maxZ = t,
-            this.mainCamera.fovMode = Camera$1.FOVMODE_HORIZONTAL_FIXED,
+            this.mainCamera.fovMode = BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED,
             this.cgCamera = new FreeCamera("camera_temp",new Vector3(0,1e3,0),this.scene),
-            this.cgCamera.mode = Camera$1.PERSPECTIVE_CAMERA,
+            this.cgCamera.mode = BABYLON.Camera.PERSPECTIVE_CAMERA,
             this.cgCamera.speed = .1,
             this.cgCamera.setTarget(new Vector3(0,1010,0)),
             this.cgCamera.maxZ = t,
             this.cgCamera.minZ = r,
-            this.cgCamera.fovMode = Camera$1.FOVMODE_HORIZONTAL_FIXED,
+            this.cgCamera.fovMode = BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED,
             this.cameraFovChange(this.yuvInfo)
         }
         );
@@ -42,10 +42,10 @@ class XCameraComponent {
                   , l = 2 * Math.atan(r / (2 * s));
                 this.mainCamera.fov = l,
                 this.cgCamera.fov = l,
-                this.mainCamera.fovMode = Camera$1.FOVMODE_VERTICAL_FIXED,
-                this.cgCamera.fovMode = Camera$1.FOVMODE_VERTICAL_FIXED
-            } else if (this.mainCamera.fovMode = Camera$1.FOVMODE_HORIZONTAL_FIXED,
-            this.cgCamera.fovMode = Camera$1.FOVMODE_HORIZONTAL_FIXED,
+                this.mainCamera.fovMode = BABYLON.Camera.FOVMODE_VERTICAL_FIXED,
+                this.cgCamera.fovMode = BABYLON.Camera.FOVMODE_VERTICAL_FIXED
+            } else if (this.mainCamera.fovMode = BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED,
+            this.cgCamera.fovMode = BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED,
             n / o < t / r && this.mainCamera.fov) {
                 const s = o
                   , l = n
@@ -144,7 +144,7 @@ class XCameraComponent {
         return this.cgCamera
     }
     getCameraHorizonFov() {
-        return this.mainCamera.fovMode == Camera$1.FOVMODE_HORIZONTAL_FIXED ? this.mainCamera.fov : Math.PI * this.yuvInfo.fov / 180
+        return this.mainCamera.fovMode == BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED ? this.mainCamera.fov : Math.PI * this.yuvInfo.fov / 180
     }
     changeMainCameraRotationDamping(e=2e3) {
         this.mainCamera.angularSensibility = e
@@ -226,7 +226,7 @@ class XCameraComponent {
     }
     changeCameraFov(e, t) {
         this.mainCamera.fov = e,
-        t != null && (this.mainCamera.fovMode = t == 0 ? Camera$1.FOVMODE_HORIZONTAL_FIXED : Camera$1.FOVMODE_VERTICAL_FIXED)
+        t != null && (this.mainCamera.fovMode = t == 0 ? BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED : BABYLON.Camera.FOVMODE_VERTICAL_FIXED)
     }
     controlCameraRotation(e, t, r=.5, n=.5) {
         const o = {

+ 1 - 1
src/XSceneManager.js

@@ -63,7 +63,7 @@ class XSceneManager {
                   , r = this.canvas.height;
                 let n = 0
                   , o = [[0, 0, 0, 0], [0, 0, 0, 0]];
-                if (((e = this._cameraManager.MainCamera) == null ? void 0 : e.fovMode) === Camera$1.FOVMODE_HORIZONTAL_FIXED ? (n = Math.ceil((r - this._yuvInfo.height * t / this._yuvInfo.width) / 2),
+                if (((e = this._cameraManager.MainCamera) == null ? void 0 : e.fovMode) === BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED ? (n = Math.ceil((r - this._yuvInfo.height * t / this._yuvInfo.width) / 2),
                 o = [[0, 0, t, n], [0, r - n, t, n]]) : (n = Math.ceil((t - this._yuvInfo.width * r / this._yuvInfo.height) / 2),
                 o = [[0, 0, n, r], [t - n, 0, n, r]]),
                 n > 0) {

+ 3 - 0
src/Xverse.js

@@ -2,7 +2,10 @@ import util from "./util.js"
 import {reporter} from "./Reporter.js"
 import {logger} from "./Logger.js"
 import ModelManager from "./ModelManager.js"
+import XverseRoom from "./XverseRoom.js"
 import Preload from "./Preload.js"
+import RenderType from "./enum/RenderType.js"
+import Person from "./enum/Person.js"
 
 export default class Xverse{
     constructor(e) {

+ 22 - 18
src/XverseAvatarManager.js

@@ -1,15 +1,19 @@
-const log = new Logger("xverse-avatar-manager")
-class XverseAvatarManager extends EventEmitter {
+//const logger = new Logger("xverse-avatar-manager")
+import {logger} from "./Logger.js"
+import CoreBroadcastType from "./enum/CoreBroadcastType.js"
+import AvatarGroup from "./enum/AvatarGroup.js"
+import Broadcast from "./Broadcast.js"
+import TimeoutError from "./error/TimeoutError.js"
+
+export default class XverseAvatarManager extends EventEmitter {
     constructor(e) {
         super();
-        E(this, "xAvatarManager");
-        E(this, "_room");
-        E(this, "avatars", new Map);
-        E(this, "syncAvatarsLength", 0);
-        E(this, "broadcast");
-        this._room = e,
-        this._usersStatistics(),
-        this.broadcast = this.setupBroadcast(),
+        this.xAvatarManager = null
+        this.avatars = new Map
+        this.syncAvatarsLength = 0
+        this._room = e;
+        this._usersStatistics();
+        this.broadcast = this.setupBroadcast();
         e.on("skinChanged", ()=>{
             this.avatars.forEach(t=>{
                 t.disconnected && this.removeAvatar(t.userId, !0)
@@ -54,7 +58,7 @@ class XverseAvatarManager extends EventEmitter {
             }
             return Promise.reject("cannot find avatar config list")
         } catch (e) {
-            return log.error(e),
+            return logger.error(e),
             Promise.reject("avatar mananger init error!")
         }
     }
@@ -138,14 +142,14 @@ class XverseAvatarManager extends EventEmitter {
                         this.updateAvatarPositionAndRotation(t),
                         r && (this.xAvatarManager.setMainAvatar(t.userId),
                         this._room.emit("userAvatarLoaded"),
-                        log.info("userAvatarLoaded"))
+                        logger.info("userAvatarLoaded"))
                     }
                     ).catch(A=>{
                         r && (this.xAvatarManager.setMainAvatar(t.userId),
                         this._room.emit("userAvatarFailed", {
                             error: A
                         }),
-                        log.error("userAvatarFailed", A))
+                        logger.error("userAvatarFailed", A))
                     }
                     )
                 }
@@ -257,12 +261,12 @@ class XverseAvatarManager extends EventEmitter {
                 avatars: this._room.avatars
             }),
             s && g._setNickname(s),
-            t === this._room.userId && (log.infoAndReportMeasurement({
+            t === this._room.userId && (logger.infoAndReportMeasurement({
                 metric: "avatarLoadDuration",
                 startTime: y,
                 group: "costs"
             }),
-            log.infoAndReportMeasurement({
+            logger.infoAndReportMeasurement({
                 metric: "avatarLoadAt",
                 startTime: this._room._startTime,
                 group: "costs"
@@ -273,7 +277,7 @@ class XverseAvatarManager extends EventEmitter {
             this._room.emit("avatarChanged", {
                 avatars: this._room.avatars
             }),
-            log.error(b),
+            logger.error(b),
             Promise.reject(b)
         }
     }
@@ -307,7 +311,7 @@ class XverseAvatarManager extends EventEmitter {
                 n && (a = "Walking",
                 o.motionType === MotionType.Run && (a = "Running")),
                 o._playAnimation(a, !0, !0),
-                log.infoAndReportMeasurement({
+                logger.infoAndReportMeasurement({
                     startTime: Date.now(),
                     value: 0,
                     metric: n ? "userAvatarStartRotating" : "userAvatarStopRotating",
@@ -332,7 +336,7 @@ class XverseAvatarManager extends EventEmitter {
                     extra: this._room.moveToExtra
                 })),
                 o._playAnimation(a, !0, !0),
-                log.infoAndReportMeasurement({
+                logger.infoAndReportMeasurement({
                     startTime: Date.now(),
                     value: 0,
                     metric: r ? "userAvatarStartMoving" : "userAvatarStopMoving",

+ 4 - 2
src/XverseEffect.js

@@ -1,5 +1,7 @@
-const log$8 = new Logger("effectManager");
-class XverseEffect extends EventEmitter {
+//const log$8 = new Logger("effectManager");
+import TimeoutError from "./error/TimeoutError.js"
+
+export default class XverseEffect extends EventEmitter {
     constructor({id: e, jsonPath: t, type: r, room: n, scale: o=1}) {
         super();
         E(this, "_id");

+ 0 - 271
src/XverseError.js

@@ -1,271 +0,0 @@
-import Codes from "./enum/Codes.js"
-
-class XverseError extends Error {
-    constructor(e, t) {
-        super(t);
-        E(this, "code");
-        this.code = e
-    }
-    toJSON() {
-        return {
-            code: this.code,
-            message: this.message
-        }
-    }
-    toString() {
-        if (Object(this) !== this)
-            throw new TypeError;
-        let t = this.name;
-        t = t === void 0 ? "Error" : String(t);
-        let r = this.message;
-        r = r === void 0 ? "" : String(r);
-        const n = this.code;
-        return r = n === void 0 ? r : n + "," + r,
-        t === "" ? r : r === "" ? t : t + ": " + r
-    }
-}
-class AvatarAssetLoadingError extends XverseError$1 {
-    constructor(e) {
-        super(5100, e || "[Engine] \u89D2\u8272\u8D44\u4EA7\u52A0\u8F7D\u5931\u8D25")
-    }
-}
-class AvatarAnimationError extends XverseError$1 {
-    constructor(e) {
-        super(5101, e || "[Engine] \u89D2\u8272\u52A8\u753B\u64AD\u653E\u5931\u8D25")
-    }
-}
-class TimeoutError$1 extends XverseError$1 {
-    constructor(e) {
-        super(Codes.Timeout, e || "[Engine] \u8D85\u65F6\u9519\u8BEF")
-    }
-}
-class DuplicateAvatarIDError extends XverseError$1 {
-    constructor(e) {
-        super(5103, e || "[Engine] \u89D2\u8272id\u91CD\u590D")
-    }
-}
-class ContainerLoadingFailedError extends XverseError$1 {
-    constructor(e) {
-        super(5104, e || "[Engine] \u89D2\u8272\u8D44\u4EA7\u62C9\u53D6\u9519\u8BEF")
-    }
-}
-class XTvMediaUrlError extends XverseError$1 {
-    constructor(e) {
-        super(5201, e || "[Engine] \u4F20\u5165Url\u9519\u8BEF")
-    }
-}
-class XTvVideoElementError extends XverseError$1 {
-    constructor(e) {
-        super(5202, e || "[Engine] \u4F20\u5165video DOM\u9519\u8BEF")
-    }
-}
-class XTvModelError extends XverseError$1 {
-    constructor(e) {
-        super(5203, e || "[Engine] \u4F20\u5165TV\u6A21\u578Burl\u9519\u8BEF")
-    }
-}
-class XLowpolyModelError extends XverseError$1 {
-    constructor(e) {
-        super(5204, e || "[Engine] \u4F20\u5165\u6A21\u578Burl\u9519\u8BEF")
-    }
-}
-class XLowpolyJsonError extends XverseError$1 {
-    constructor(e) {
-        super(5205, e || "[Engine] \u4F20\u5165\u6A21\u578Bjson\u9519\u8BEF")
-    }
-}
-class XDecalError extends XverseError$1 {
-    constructor(e) {
-        super(5206, e || "[Engine] Decal\u6A21\u578B\u9519\u8BEF")
-    }
-}
-class XDecalTextureError extends XverseError$1 {
-    constructor(e) {
-        super(5207, e || "[Engine] decal\u7EB9\u7406\u9519\u8BEF")
-    }
-}
-class XBreathPointError extends XverseError$1 {
-    constructor(e) {
-        super(5208, e || "[Engine] \u547C\u5438\u70B9\u9519\u8BEF")
-    }
-}
-class XMaterialError extends XverseError$1 {
-    constructor(e) {
-        super(5210, e || "[Engine] Material\u9519\u8BEF")
-    }
-}
-class ExceedMaxAvatarNumError extends XverseError$1 {
-    constructor(e) {
-        super(5211, e || "[Engine] \u89D2\u8272\u4E2A\u6570\u8D85\u51FA\u4E0A\u9650")
-    }
-}
-class ParamError extends XverseError {
-    constructor(e) {
-        super(1001, e || "\u53C2\u6570\u9519\u8BEF")
-    }
-}
-class InternalError extends XverseError {
-    constructor(e) {
-        super(1002, e || "\u5185\u90E8\u9519\u8BEF")
-    }
-}
-class TimeoutError extends XverseError {
-    constructor(e) {
-        super(1003, e || "\u8D85\u65F6")
-    }
-}
-class AuthenticationError extends XverseError {
-    constructor(e) {
-        super(1004, e || "\u9274\u6743\u5931\u8D25")
-    }
-}
-class TokenExpiredError extends XverseError {
-    constructor(e) {
-        super(1005, e || "Token \u5DF2\u8FC7\u671F")
-    }
-}
-class UnsupportedError extends XverseError {
-    constructor(e) {
-        super(1006, e || "\u624B\u673A\u7CFB\u7EDF\u4E0D\u652F\u6301XVerse")
-    }
-}
-class InitNetworkTimeoutError extends XverseError {
-    constructor(e) {
-        super(1007, e || "\u7F51\u7EDC\u521D\u59CB\u5316\u8D85\u65F6")
-    }
-}
-class InitDecoderTimeoutError extends XverseError {
-    constructor(e) {
-        super(1008, e || "Decoder \u521D\u59CB\u5316\u8D85\u65F6")
-    }
-}
-class InitConfigTimeoutError extends XverseError {
-    constructor(e) {
-        super(1009, e || "\u914D\u7F6E\u521D\u59CB\u5316\u8D85\u65F6")
-    }
-}
-class InitEngineTimeoutError extends XverseError {
-    constructor(e) {
-        super(1010, e || "\u5F15\u64CE\u521D\u59CB\u5316\u8D85\u65F6")
-    }
-}
-class InitEngineError extends XverseError {
-    constructor(e) {
-        super(1011, e || "\u5F15\u64CE\u521D\u59CB\u5316\u9519\u8BEF")
-    }
-}
-class ActionBlockedError extends XverseError {
-    constructor(e) {
-        super(1012, e || "\u52A8\u4F5C\u88AB\u5C4F\u853D")
-    }
-}
-class PreloadCanceledError extends XverseError {
-    constructor(e) {
-        super(1013, e || "\u9884\u52A0\u8F7D\u88AB\u53D6\u6D88")
-    }
-}
-class FrequencyLimitError extends XverseError {
-    constructor(e) {
-        super(1014, e || "\u9891\u7387\u9650\u5236")
-    }
-}
-class UsersUpperLimitError extends XverseError {
-    constructor(e) {
-        super(2e3, e || "\u76F4\u64AD\u95F4\u4EBA\u6570\u5DF2\u6EE1")
-    }
-}
-class RoomsUpperLimitError extends XverseError {
-    constructor(e) {
-        super(2001, e || "\u623F\u95F4\u5230\u8FBE\u4E0A\u9650")
-    }
-}
-class ServerParamError extends XverseError {
-    constructor(e) {
-        super(2002, e || "\u670D\u52A1\u5668\u53C2\u6570\u9519\u8BEF")
-    }
-}
-class LackOfTokenError extends XverseError {
-    constructor(e) {
-        super(2003, e || "\u7F3A\u5C11 Token")
-    }
-}
-class LoginFailedError extends XverseError {
-    constructor(e) {
-        super(2004, e || "\u8FDB\u5165\u623F\u95F4\u5931\u8D25")
-    }
-}
-class VerifyServiceDownError extends XverseError {
-    constructor(e) {
-        super(2005, e || "\u9274\u6743\u670D\u52A1\u5F02\u5E38")
-    }
-}
-class CreateSessionFailedError extends XverseError {
-    constructor(e) {
-        super(2006, e || "\u521B\u5EFA session \u5931\u8D25")
-    }
-}
-class RtcConnectionError extends XverseError {
-    constructor(e) {
-        super(2008, e || "RTC\u5EFA\u8054\u5931\u8D25")
-    }
-}
-class DoActionFailedError extends XverseError {
-    constructor(e) {
-        super(2009, e || "\u52A8\u4F5C\u6267\u884C\u5931\u8D25")
-    }
-}
-class StateSyncFailedError extends XverseError {
-    constructor(e) {
-        super(2010, e || "\u72B6\u6001\u540C\u6B65\u5931\u8D25")
-    }
-}
-class BroadcastFailedError extends XverseError {
-    constructor(e) {
-        super(2011, e || "\u5E7F\u64AD\u63A5\u53E3\u63A5\u53E3\u5F02\u5E38")
-    }
-}
-class DataAbnormalError extends XverseError {
-    constructor(e) {
-        super(2012, e || "\u6570\u636E\u5F02\u5E38")
-    }
-}
-class GetOnVehicleError extends XverseError {
-    constructor(e) {
-        super(2015, e || "\u4E0A\u8F7D\u5177\u5931\u8D25\u9700\u8981\u9884\u7EA6")
-    }
-}
-class RepeatLoginError extends XverseError {
-    constructor(e) {
-        super(2017, e || "\u5F02\u5730\u767B\u5F55")
-    }
-}
-class RoomDoseNotExistError extends XverseError {
-    constructor(e) {
-        super(2018, e || "\u6307\u5B9A\u623F\u95F4\u4E0D\u5B58\u5728")
-    }
-}
-class TicketExpireError extends XverseError {
-    constructor(e) {
-        super(2019, e || "\u7968\u636E\u8FC7\u671F")
-    }
-}
-class ServerRateLimitError extends XverseError {
-    constructor(e) {
-        super(2020, e || "\u670D\u52A1\u7AEF\u9891\u7387\u9650\u5236")
-    }
-}
-class DoActionBlockedError extends XverseError {
-    constructor(e) {
-        super(2333, e || "\u52A8\u4F5C\u88AB\u5C4F\u853D")
-    }
-}
-class ActionMaybeDelayError extends XverseError {
-    constructor(e) {
-        super(2334, e || "\u52A8\u4F5C\u53EF\u80FD\u5EF6\u8FDF\u6267\u884C")
-    }
-}
-class ActionResponseTimeoutError extends XverseError {
-    constructor(e) {
-        super(2999, e || "action\u56DE\u5305\u8D85\u65F6")
-    }
-}

+ 6 - 535
src/XverseRoom.js

@@ -1,541 +1,12 @@
-import Codes from "./enum/Codes.js"
-import {logger} from "./Logger.js"
+import JoyStick from "./JoyStick.js"
+import Xverse_Room from "./Xverse_Room.js"
 
-class XverseRoom extends XverseRoom$1 {
-    constructor() {
-        super(...arguments);
-        E(this, "joyStick", new JoyStick(this))
+export default class XverseRoom extends Xverse_Room {
+    constructor(e) {
+        super(e);
+        this.joyStick = new JoyStick(this)
     }
     afterJoinRoomHook() {
         this.joyStick.init({})
     }
-}
-
-//const log$3 = new Logger("xverse-room");
-class XverseRoom$1 extends EventEmitter {
-    constructor(e) {
-        super();
-        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
-          , {canvas: t} = n
-          , r = Oe(n, ["canvas"]);
-        logger.infoAndReportMeasurement({
-            metric: "startJoinRoomAt",
-            startTime: Date.now(),
-            group: "joinRoom",
-            extra: r,
-            value: 0
-        })
-    }
-    get currentNetworkOptions() {
-        return this._currentNetworkOptions
-    }
-    get viewMode() {
-        var e;
-        return ((e = this._currentState) == null ? void 0 : e.viewMode) || "full"
-    }
-    get id() {
-        return this._id
-    }
-    get skinId() {
-        return this._currentState.skinId
-    }
-    get skin() {
-        return this._currentState.skin
-    }
-    get sessionId() {
-        return this.currentNetworkOptions.sessionId
-    }
-    get pictureQualityLevel() {
-        return this.currentState.pictureQualityLevel
-    }
-    get avatars() {
-        return Array.from(this.avatarManager.avatars.values())
-    }
-    get currentState() {
-        var e;
-        return le(oe({}, this._currentState), {
-            state: (e = this.networkController) == null ? void 0 : e._state
-        })
-    }
-    get _userAvatar() {
-        return this.avatars.find(e=>e.userId === this.userId)
-    }
-    get tvs() {
-        return this.engineProxy._tvs
-    }
-    get tv() {
-        return this.tvs[0]
-    }
-    get currentClickingState() {
-        return this._currentClickingState
-    }
-    afterJoinRoomHook() {}
-    beforeJoinRoomResolveHook() {}
-    afterReconnectedHook() {}
-    handleSignalHook(e) {}
-    skinChangedHook() {}
-    async beforeStartGameHook(e) {}
-    loadAssetsHook() {}
-    afterUserAvatarLoadedHook() {}
-    audienceViewModeHook() {}
-    setViewModeToObserver() {}
-    handleVehicleHook(e) {}
-    updateReporter() {
-        const {avatarId: e, skinId: t, userId: r, roomId: n, role: o, appId: a, wsServerUrl: s} = this.options;
-        reporter.updateHeader({
-            userId: r
-        }),
-        reporter.updateBody({
-            roomId: n,
-            role: o,
-            skinId: t,
-            avatarId: e,
-            appId: a,
-            wsServerUrl: s
-        })
-    }
-    async initRoom() {
-        const {timeout: e=DEFAULT_JOINROOM_TIMEOUT} = this.options;
-        return isSupported() ? this._initRoom()._timeout(e, new TimeoutError("initRoom timeout")) : Promise.reject(new UnsupportedError)
-    }
-    async _initRoom() {
-        const e = this.validateOptions(this.options);
-        if (e)
-            return logger.error("initRoom param error", e),
-            Promise.reject(e);
-        const {canvas: t, avatarId: r, skinId: n, userId: o, wsServerUrl: a, role: s, token: l, pageSession: u, rotationRenderType: c, isAllSync: h=!1, appId: f, camera: d, player: _, avatarComponents: g, nickname: m, avatarScale: v, firends: y=[], syncByEvent: b=!1, areaName: T, attitude: C=MotionType.Walk, pathName: A, viewMode: S="full", person: P, roomId: R, roomTypeId: M, hasAvatar: x=!1, syncToOthers: I=!1, prioritySync: w=!1, removeWhenDisconnected: O=!0, extra: D} = this.options;
-        this.setCurrentNetworkOptions({
-            avatarId: r,
-            skinId: n,
-            roomId: R,
-            userId: o,
-            wsServerUrl: a,
-            role: s,
-            token: l,
-            pageSession: u,
-            rotationRenderType: c,
-            isAllSync: h,
-            appId: f,
-            camera: d,
-            player: _,
-            avatarComponents: g,
-            nickname: m,
-            avatarScale: v,
-            firends: y,
-            syncByEvent: b,
-            areaName: T,
-            attitude: C,
-            pathName: A,
-            person: P,
-            roomTypeId: M,
-            hasAvatar: x,
-            syncToOthers: I,
-            prioritySync: w,
-            extra: D,
-            removeWhenDisconnected: O
-        }),
-        this.userId = o,
-        this.canvas = t,
-        T && (this.pathManager.currentArea = T),
-        this.networkController = new NetworkController(this),
-        this.setCurrentState({
-            areaName: T,
-            pathName: A,
-            attitude: C,
-            speed: 0,
-            viewMode: S,
-            state: this.networkController._state,
-            skinId: n
-        });
-        try {
-            await Promise.all([this.initNetwork(), this.initConfig(), this.initWasm()]),
-            logger.info("network config wasm all ready, start to create game");
-            const F = await this.requestCreateRoom({
-                skinId: n
-            })
-              , V = F.routeList.find(L=>L.areaName === T)
-              , N = ((V == null ? void 0 : V.step) || 7.5) * 30;
-            this.updateCurrentState({
-                skin: F,
-                skinId: F.id,
-                versionId: F.versionId,
-                speed: N
-            }),
-            await this.initEngine(F)
-        } catch (F) {
-            return Promise.reject(F)
-        }
-        return this.beforeJoinRoomResolve(),
-        this.receiveRtcData()
-    }
-    beforeJoinRoomResolve() {
-        this.setupStats(),
-        this.eventsController = new EventsController(this),
-        this.eventsController.bindEvents(),
-        this.panorama = new Panorama(this),
-        this.beforeJoinRoomResolveHook()
-    }
-    afterJoinRoom() {
-        this.joined = !0,
-        this.viewMode === "observer" && this.setViewModeToObserver(),
-        logger.infoAndReportMeasurement({
-            tag: this.viewMode,
-            value: this.firstFrameTimestamp - this._startTime,
-            startTime: Date.now(),
-            metric: "joinRoom"
-        }),
-        this.camera.initialFov = this.sceneManager.cameraComponent.getCameraFov(),
-        this.stats.on("stats", ({stats: e})=>{
-            reporter.report("stats", oe({}, e))
-        }
-        ),
-        this.debug = new Debug(this),
-        this.afterJoinRoomHook()
-    }
-    afterReconnected() {
-        this.avatarManager.clearOtherUsers(),
-        this.afterReconnectedHook()
-    }
-    leave() {
-        var e, t;
-        return logger.info("Invoke room.leave"),
-        (e = this.eventsController) == null || e.clearEvents(),
-        (t = this.networkController) == null || t.quit(),
-        this
-    }
-    validateOptions(e) {
-        const {canvas: t, avatarId: r, skinId: n, userId: o, role: a, roomId: s, token: l, appId: u, avatarComponents: c} = e || {}
-          , h = [];
-        return t instanceof HTMLCanvasElement || h.push(new ParamError("`canvas` must be instanceof of HTMLCanvasElement")),
-        (!o || typeof o != "string") && h.push(new ParamError("`userId` must be string")),
-        (!l || typeof l != "string") && h.push(new ParamError("`token` must be string")),
-        (!u || typeof u != "string") && h.push(new ParamError("`appId` must be string")),
-        a == "audience" || (!r || !n) && h.push(new ParamError("`avatarId` and `skinId` is required when create room")),
-        h[0]
-    }
-    async initNetwork() {
-        if (this.viewMode === "serverless")
-            return Promise.resolve();
-        const e = Date.now();
-        try {
-            await this.networkController.connect()._timeout(8e3, new InitNetworkTimeoutError),
-            logger.infoAndReportMeasurement({
-                metric: "networkInitAt",
-                startTime: this._startTime,
-                group: "joinRoom"
-            }),
-            logger.infoAndReportMeasurement({
-                metric: "networkInitCost",
-                startTime: e,
-                group: "joinRoom"
-            })
-        } catch (t) {
-            throw logger.infoAndReportMeasurement({
-                metric: "networkInitAt",
-                startTime: e,
-                group: "joinRoom",
-                error: t
-            }),
-            t
-        }
-    }
-    async initConfig() {
-        const e = Date.now();
-        try {
-            await this.modelManager.getApplicationConfig()._timeout(8e3, new InitConfigTimeoutError),
-            logger.infoAndReportMeasurement({
-                metric: "configInitAt",
-                startTime: this._startTime,
-                group: "joinRoom"
-            }),
-            logger.infoAndReportMeasurement({
-                metric: "configInitCost",
-                startTime: e,
-                group: "joinRoom"
-            })
-        } catch (t) {
-            throw logger.infoAndReportMeasurement({
-                metric: "configInitAt",
-                startTime: e,
-                group: "joinRoom",
-                error: t
-            }),
-            t
-        }
-    }
-    async initEngine(e) {
-        const t = Date.now();
-        try {
-            this.engineProxy = new EngineProxy(this),
-            await this.engineProxy.initEngine(e),
-            logger.infoAndReportMeasurement({
-                metric: "webglInitAt",
-                startTime: this._startTime,
-                group: "joinRoom"
-            }),
-            logger.infoAndReportMeasurement({
-                metric: "webglInitCost",
-                startTime: t,
-                group: "joinRoom"
-            });
-            return
-        } catch (r) {
-            let n = r;
-            return r.code !== Codes.InitEngineTimeout && (n = new InitEngineError),
-            logger.error(r),
-            logger.infoAndReportMeasurement({
-                metric: "webglInitAt",
-                startTime: t,
-                group: "joinRoom",
-                error: n
-            }),
-            Promise.reject(n)
-        }
-    }
-    async initWasm() {
-        if (this.viewMode === "serverless")
-            return Promise.resolve();
-        const e = Date.now();
-        try {
-            await this.networkController.rtcp.workers.init(this.options.resolution)._timeout(8e3, new InitDecoderTimeoutError),
-            this.networkController.rtcp.workers.registerFunction("error", t=>{
-                logger.error("decode error", t);
-                const {code: r, message: n} = t;
-                this.emit("error", {
-                    code: r,
-                    msg: n
-                })
-            }
-            ),
-            logger.infoAndReportMeasurement({
-                metric: "wasmInitAt",
-                group: "joinRoom",
-                startTime: this._startTime
-            }),
-            logger.infoAndReportMeasurement({
-                metric: "wasmInitCost",
-                group: "joinRoom",
-                startTime: e
-            }),
-            eventsManager.on("traceId", t=>{
-                this.networkController.rtcp.workers.onTraceId(t)
-            }
-            )
-        } catch (t) {
-            throw logger.infoAndReportMeasurement({
-                metric: "wasmInitAt",
-                group: "joinRoom",
-                startTime: e,
-                error: t
-            }),
-            t
-        }
-    }
-    async requestCreateRoom({skinId: e}) {
-        let t;
-        if (e) {
-            t = await this.getSkin(e);
-            const r = await this.modelManager.findRoute(e, this.options.pathName);
-            this.updateCurrentNetworkOptions({
-                areaName: r.areaName,
-                attitude: r.attitude,
-                versionId: t.versionId
-            });
-            const {camera: n, player: o} = getRandomItem(r.birthPointList) || this.options;
-            this.options.camera || this.updateCurrentNetworkOptions({
-                camera: n
-            }),
-            this.options.player || this.updateCurrentNetworkOptions({
-                player: o
-            })
-        }
-        if (this.viewMode === "serverless")
-            return t;
-        try {
-            await this.beforeStartGameHook(this.options);
-            const {room_id: r, data: n, session_id: o} = await this.networkController.startGame();
-            this._id = r;
-            const a = JSON.parse(n);
-            this.isHost = a.IsHost,
-            e = a.SkinID || e;
-            const s = await this.getSkin(e);
-            return this.updateCurrentNetworkOptions({
-                roomId: r,
-                sessionId: o
-            }),
-            reporter.updateBody({
-                roomId: r,
-                skinId: e,
-                serverSession: o
-            }),
-            s
-        } catch (r) {
-            throw logger.error("Request create room error", r),
-            r
-        }
-    }
-    pause() {
-        return this.engineProxy.pause()
-    }
-    resume() {
-        return this.engineProxy.resume()
-    }
-    reconnect() {
-        this.networkController.reconnect()
-    }
-    async setViewMode(e) {}
-    handleRepetLogin() {
-        logger.warn("receive " + Codes.RepeatLogin + " for repeat login"),
-        this.emit("repeatLogin"),
-        reporter.disable(),
-        this.networkController.quit()
-    }
-    setPictureQualityLevel(e) {
-        const t = {
-            high: EImageQuality.high,
-            low: EImageQuality.low,
-            average: EImageQuality.mid
-        };
-        return this.updateCurrentState({
-            pictureQualityLevel: e
-        }),
-        this.sceneManager.setImageQuality(t[e])
-    }
-    async getSkin(e) {
-        let t = null;
-        if (t = (this.skinList = await this.modelManager.getSkinsList()).find(n=>n.id === e || n.id === e),
-        t)
-            return t;
-        {
-            const n = `skin is invalid: skinId: ${e}`;
-            return Promise.reject(new ParamError(n))
-        }
-    }
-    setupStats() {
-        this.stats.assign({
-            roomId: this.id,
-            userId: this.userId
-        }),
-        setInterval(this.engineProxy.updateStats, 1e3)
-    }
-    proxyEvents(e, t) {
-        this.emit(e, t)
-    }
-    setCurrentNetworkOptions(e) {
-        this._currentNetworkOptions = e
-    }
-    updateCurrentNetworkOptions(e) {
-        Object.assign(this._currentNetworkOptions, e),
-        Object.assign(this.options, e)
-    }
-    setCurrentState(e) {
-        this._currentState = e
-    }
-    updateCurrentState(e) {
-        e.skinId && (this.lastSkinId = this.currentState.skinId,
-        this.updateCurrentNetworkOptions({
-            skinId: e.skinId
-        })),
-        e.versionId && this.updateCurrentNetworkOptions({
-            versionId: e.versionId
-        }),
-        Object.assign(this._currentState, e)
-    }
 }

+ 551 - 0
src/Xverse_Room.js

@@ -0,0 +1,551 @@
+//const log$3 = new Logger("xverse-room");
+import XverseAvatarManager from "./XverseAvatarManager.js"
+import {logger} from "./Logger.js"
+import Codes from "./enum/Codes.js"
+import PathManager from "./PathManager.js"
+import Camera from "./Camera.js"
+import Stats from "./Stats.js"
+import ActionsHandler from "./ActionsHandler.js"
+import Signal from "./Signal.js"
+import ModelManager from "./ModelManager.js"
+import {reporter} from "./Reporter.js"
+import util from "./util.js"
+import TimeoutError from "./error/TimeoutError.js"
+import ParamError from "./error/ParamError.js"
+import MotionType from "./enum/MotionType.js"
+import NetworkController from "./NetworkController.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);
+        this.modelManager = ModelManager.getInstance(e.appId, e.releaseId),
+        this.updateReporter();
+        const n = e
+          , {canvas: t} = n
+          , r = Oe(n, ["canvas"]);
+        logger.infoAndReportMeasurement({
+            metric: "startJoinRoomAt",
+            startTime: Date.now(),
+            group: "joinRoom",
+            extra: r,
+            value: 0
+        })
+    }
+
+    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
+    }
+    get viewMode() {
+        var e;
+        return ((e = this._currentState) == null ? void 0 : e.viewMode) || "full"
+    }
+    get id() {
+        return this._id
+    }
+    get skinId() {
+        return this._currentState.skinId
+    }
+    get skin() {
+        return this._currentState.skin
+    }
+    get sessionId() {
+        return this.currentNetworkOptions.sessionId
+    }
+    get pictureQualityLevel() {
+        return this.currentState.pictureQualityLevel
+    }
+    get avatars() {
+        return Array.from(this.avatarManager.avatars.values())
+    }
+    get currentState() {
+        var e;
+        return le(oe({}, this._currentState), {
+            state: (e = this.networkController) == null ? void 0 : e._state
+        })
+    }
+    get _userAvatar() {
+        return this.avatars.find(e=>e.userId === this.userId)
+    }
+    get tvs() {
+        return this.engineProxy._tvs
+    }
+    get tv() {
+        return this.tvs[0]
+    }
+    get currentClickingState() {
+        return this._currentClickingState
+    }
+    afterJoinRoomHook() {}
+    beforeJoinRoomResolveHook() {}
+    afterReconnectedHook() {}
+    handleSignalHook(e) {}
+    skinChangedHook() {}
+    async beforeStartGameHook(e) {}
+    loadAssetsHook() {}
+    afterUserAvatarLoadedHook() {}
+    audienceViewModeHook() {}
+    setViewModeToObserver() {}
+    handleVehicleHook(e) {}
+    updateReporter() {
+        const {avatarId: e, skinId: t, userId: r, roomId: n, role: o, appId: a, wsServerUrl: s} = this.options;
+        reporter.updateHeader({
+            userId: r
+        }),
+        reporter.updateBody({
+            roomId: n,
+            role: o,
+            skinId: t,
+            avatarId: e,
+            appId: a,
+            wsServerUrl: s
+        })
+    }
+    async initRoom() {
+        const {timeout: e=DEFAULT_JOINROOM_TIMEOUT} = this.options;
+        if(util.isSupported()){
+            return this._initRoom()._timeout(e, new TimeoutError("initRoom timeout"))
+        }
+        else{
+            return Promise.reject(new UnsupportedError)
+        }
+    }
+    async _initRoom() {
+        const e = this.validateOptions(this.options);
+        if(e)
+        {
+            return logger.error("initRoom param error", e),
+            Promise.reject(e);
+        }
+        const {canvas: t, avatarId: r, skinId: n, userId: o, wsServerUrl: a, role: s, token: l, pageSession: u, rotationRenderType: c, isAllSync: h=!1, appId: f, camera: d, player: _, avatarComponents: g, nickname: m, avatarScale: v, firends: y=[], syncByEvent: b=!1, areaName: T, attitude: C=MotionType.Walk, pathName: A, viewMode: S="full", person: P, roomId: R, roomTypeId: M, hasAvatar: x=!1, syncToOthers: I=!1, prioritySync: w=!1, removeWhenDisconnected: O=!0, extra: D} = this.options;
+        this.setCurrentNetworkOptions({
+            avatarId: r,
+            skinId: n,
+            roomId: R,
+            userId: o,
+            wsServerUrl: a,
+            role: s,
+            token: l,
+            pageSession: u,
+            rotationRenderType: c,
+            isAllSync: h,
+            appId: f,
+            camera: d,
+            player: _,
+            avatarComponents: g,
+            nickname: m,
+            avatarScale: v,
+            firends: y,
+            syncByEvent: b,
+            areaName: T,
+            attitude: C,
+            pathName: A,
+            person: P,
+            roomTypeId: M,
+            hasAvatar: x,
+            syncToOthers: I,
+            prioritySync: w,
+            extra: D,
+            removeWhenDisconnected: O
+        });
+        this.userId = o;
+        this.canvas = t;
+        T && (this.pathManager.currentArea = T);
+        this.networkController = new NetworkController(this);
+        this.setCurrentState({
+            areaName: T,
+            pathName: A,
+            attitude: C,
+            speed: 0,
+            viewMode: S,
+            state: this.networkController._state,
+            skinId: n
+        });
+        try {
+            await Promise.all([this.initNetwork(), this.initConfig(), this.initWasm()]),
+            logger.info("network config wasm all ready, start to create game");
+            const F = await this.requestCreateRoom({
+                skinId: n
+            })
+              , V = F.routeList.find(L=>L.areaName === T)
+              , N = ((V == null ? void 0 : V.step) || 7.5) * 30;
+            this.updateCurrentState({
+                skin: F,
+                skinId: F.id,
+                versionId: F.versionId,
+                speed: N
+            }),
+            await this.initEngine(F)
+        } catch (F) {
+            return Promise.reject(F)
+        }
+        return this.beforeJoinRoomResolve(),
+        this.receiveRtcData()
+    }
+    beforeJoinRoomResolve() {
+        this.setupStats(),
+        this.eventsController = new EventsController(this),
+        this.eventsController.bindEvents(),
+        this.panorama = new Panorama(this),
+        this.beforeJoinRoomResolveHook()
+    }
+    afterJoinRoom() {
+        this.joined = !0,
+        this.viewMode === "observer" && this.setViewModeToObserver(),
+        logger.infoAndReportMeasurement({
+            tag: this.viewMode,
+            value: this.firstFrameTimestamp - this._startTime,
+            startTime: Date.now(),
+            metric: "joinRoom"
+        }),
+        this.camera.initialFov = this.sceneManager.cameraComponent.getCameraFov(),
+        this.stats.on("stats", ({stats: e})=>{
+            reporter.report("stats", oe({}, e))
+        }
+        ),
+        this.debug = new Debug(this),
+        this.afterJoinRoomHook()
+    }
+    afterReconnected() {
+        this.avatarManager.clearOtherUsers(),
+        this.afterReconnectedHook()
+    }
+    leave() {
+        var e, t;
+        return logger.info("Invoke room.leave"),
+        (e = this.eventsController) == null || e.clearEvents(),
+        (t = this.networkController) == null || t.quit(),
+        this
+    }
+    validateOptions(e) {
+        const {canvas: t, avatarId: r, skinId: n, userId: o, role: a, roomId: s, token: l, appId: u, avatarComponents: c} = e || {}
+          , h = [];
+        t instanceof HTMLCanvasElement || h.push(new ParamError("`canvas` must be instanceof of HTMLCanvasElement"));
+        (!o || typeof o != "string") && h.push(new ParamError("`userId` must be string"));
+        (!l || typeof l != "string") && h.push(new ParamError("`token` must be string"));
+        (!u || typeof u != "string") && h.push(new ParamError("`appId` must be string"));
+        a == "audience" || (!r || !n) && h.push(new ParamError("`avatarId` and `skinId` is required when create room"));
+        return h[0]
+    }
+    async initNetwork() {
+        if (this.viewMode === "serverless")
+            return Promise.resolve();
+        const e = Date.now();
+        try {
+            await this.networkController.connect()._timeout(8e3, new InitNetworkTimeoutError),
+            logger.infoAndReportMeasurement({
+                metric: "networkInitAt",
+                startTime: this._startTime,
+                group: "joinRoom"
+            }),
+            logger.infoAndReportMeasurement({
+                metric: "networkInitCost",
+                startTime: e,
+                group: "joinRoom"
+            })
+        } catch (t) {
+            throw logger.infoAndReportMeasurement({
+                metric: "networkInitAt",
+                startTime: e,
+                group: "joinRoom",
+                error: t
+            }),
+            t
+        }
+    }
+    async initConfig() {
+        const e = Date.now();
+        try {
+            await this.modelManager.getApplicationConfig()._timeout(8e3, new InitConfigTimeoutError),
+            logger.infoAndReportMeasurement({
+                metric: "configInitAt",
+                startTime: this._startTime,
+                group: "joinRoom"
+            }),
+            logger.infoAndReportMeasurement({
+                metric: "configInitCost",
+                startTime: e,
+                group: "joinRoom"
+            })
+        } catch (t) {
+            throw logger.infoAndReportMeasurement({
+                metric: "configInitAt",
+                startTime: e,
+                group: "joinRoom",
+                error: t
+            }),
+            t
+        }
+    }
+    async initEngine(e) {
+        const t = Date.now();
+        try {
+            this.engineProxy = new EngineProxy(this),
+            await this.engineProxy.initEngine(e),
+            logger.infoAndReportMeasurement({
+                metric: "webglInitAt",
+                startTime: this._startTime,
+                group: "joinRoom"
+            }),
+            logger.infoAndReportMeasurement({
+                metric: "webglInitCost",
+                startTime: t,
+                group: "joinRoom"
+            });
+            return
+        } catch (r) {
+            let n = r;
+            return r.code !== Codes.InitEngineTimeout && (n = new InitEngineError),
+            logger.error(r),
+            logger.infoAndReportMeasurement({
+                metric: "webglInitAt",
+                startTime: t,
+                group: "joinRoom",
+                error: n
+            }),
+            Promise.reject(n)
+        }
+    }
+    async initWasm() {
+        if (this.viewMode === "serverless")
+            return Promise.resolve();
+        const e = Date.now();
+        try {
+            await this.networkController.rtcp.workers.init(this.options.resolution)._timeout(8e3, new InitDecoderTimeoutError),
+            this.networkController.rtcp.workers.registerFunction("error", t=>{
+                logger.error("decode error", t);
+                const {code: r, message: n} = t;
+                this.emit("error", {
+                    code: r,
+                    msg: n
+                })
+            }
+            ),
+            logger.infoAndReportMeasurement({
+                metric: "wasmInitAt",
+                group: "joinRoom",
+                startTime: this._startTime
+            }),
+            logger.infoAndReportMeasurement({
+                metric: "wasmInitCost",
+                group: "joinRoom",
+                startTime: e
+            }),
+            eventsManager.on("traceId", t=>{
+                this.networkController.rtcp.workers.onTraceId(t)
+            }
+            )
+        } catch (t) {
+            throw logger.infoAndReportMeasurement({
+                metric: "wasmInitAt",
+                group: "joinRoom",
+                startTime: e,
+                error: t
+            }),
+            t
+        }
+    }
+    async requestCreateRoom({skinId: e}) {
+        let t;
+        if (e) {
+            t = await this.getSkin(e);
+            const r = await this.modelManager.findRoute(e, this.options.pathName);
+            this.updateCurrentNetworkOptions({
+                areaName: r.areaName,
+                attitude: r.attitude,
+                versionId: t.versionId
+            });
+            const {camera: n, player: o} = getRandomItem(r.birthPointList) || this.options;
+            this.options.camera || this.updateCurrentNetworkOptions({
+                camera: n
+            }),
+            this.options.player || this.updateCurrentNetworkOptions({
+                player: o
+            })
+        }
+        if (this.viewMode === "serverless")
+            return t;
+        try {
+            await this.beforeStartGameHook(this.options);
+            const {room_id: r, data: n, session_id: o} = await this.networkController.startGame();
+            this._id = r;
+            const a = JSON.parse(n);
+            this.isHost = a.IsHost,
+            e = a.SkinID || e;
+            const s = await this.getSkin(e);
+            return this.updateCurrentNetworkOptions({
+                roomId: r,
+                sessionId: o
+            }),
+            reporter.updateBody({
+                roomId: r,
+                skinId: e,
+                serverSession: o
+            }),
+            s
+        } catch (r) {
+            throw logger.error("Request create room error", r),
+            r
+        }
+    }
+    pause() {
+        return this.engineProxy.pause()
+    }
+    resume() {
+        return this.engineProxy.resume()
+    }
+    reconnect() {
+        this.networkController.reconnect()
+    }
+    async setViewMode(e) {}
+    handleRepetLogin() {
+        logger.warn("receive " + Codes.RepeatLogin + " for repeat login"),
+        this.emit("repeatLogin"),
+        reporter.disable(),
+        this.networkController.quit()
+    }
+    setPictureQualityLevel(e) {
+        const t = {
+            high: EImageQuality.high,
+            low: EImageQuality.low,
+            average: EImageQuality.mid
+        };
+        return this.updateCurrentState({
+            pictureQualityLevel: e
+        }),
+        this.sceneManager.setImageQuality(t[e])
+    }
+    async getSkin(e) {
+        let t = null;
+        if (t = (this.skinList = await this.modelManager.getSkinsList()).find(n=>n.id === e || n.id === e),
+        t)
+            return t;
+        {
+            const n = `skin is invalid: skinId: ${e}`;
+            return Promise.reject(new ParamError(n))
+        }
+    }
+    setupStats() {
+        this.stats.assign({
+            roomId: this.id,
+            userId: this.userId
+        }),
+        setInterval(this.engineProxy.updateStats, 1e3)
+    }
+    proxyEvents(e, t) {
+        this.emit(e, t)
+    }
+    setCurrentNetworkOptions(e) {
+        this._currentNetworkOptions = e
+    }
+    updateCurrentNetworkOptions(e) {
+        Object.assign(this._currentNetworkOptions, e),
+        Object.assign(this.options, e)
+    }
+    setCurrentState(e) {
+        this._currentState = e
+    }
+    updateCurrentState(e) {
+        e.skinId && (this.lastSkinId = this.currentState.skinId,
+        this.updateCurrentNetworkOptions({
+            skinId: e.skinId
+        })),
+        e.versionId && this.updateCurrentNetworkOptions({
+            versionId: e.versionId
+        }),
+        Object.assign(this._currentState, e)
+    }
+}

+ 36 - 0
src/enum/Actions.js

@@ -0,0 +1,36 @@
+var Actions = {
+    Clicking:1,
+    PlayCG:6,
+    Back:7,
+    ChangeRoom:8,
+    ChangeSkin:13,
+    Joystick:15,
+    Transfer:18,
+    GetOnVehicle:22,
+    GetOffVehicle:23,
+    StopMoving:34,
+    UnaryActionLine:1e3,
+    Init:1001,
+    Exit:1002,
+    SetIFrameInfo:1003,
+    GetNeighborPoints:1004,
+    ReserveSeat:1005,
+    GetReserveStatus:1006,
+    ChangeNickname:1007,
+    ChangeBitRateInfo:1008,
+    Echo:1009,
+    SetPlayerState:1010,
+    TurnTo:1011,
+    TurnToFace:1012,
+    RotateTo:1013,
+    Rotation:1014,
+    CameraTurnTo:1015,
+    ConfirmEvent:1016,
+    Broadcast:1017,
+    NotifyActionLine:2e4,
+    AudienceChangeToVisitor:1020,
+    VisitorChangeToAudience:1021,
+    RemoveVisitor:1022,
+    GetUserWithAvatar:1023
+}
+export default Actions

+ 5 - 0
src/enum/AvatarGroup.js

@@ -0,0 +1,5 @@
+var AvatarGroup = {
+    Npc:'npc',
+    User:'user'
+}
+export default AvatarGroup

+ 7 - 0
src/enum/CameraStates.js

@@ -0,0 +1,7 @@
+var CameraStates = {
+    Normal:0,
+    ItemView:1,
+    CGView:2,
+    PathView:3
+}
+export default CameraStates

+ 4 - 0
src/enum/CoreBroadcastType.js

@@ -0,0 +1,4 @@
+var CoreBroadcastType = {
+    PlayAnimation:'PlayAnimation'
+}
+export default CoreBroadcastType

+ 5 - 0
src/enum/Direction.js

@@ -0,0 +1,5 @@
+var Direction = {
+    Left:'left',
+    Right:'right'
+}
+export default Direction

+ 9 - 0
src/enum/EAvatarRelationRank.js

@@ -0,0 +1,9 @@
+var EAvatarRelationRank = {
+    Self:0,
+    Npc:1,
+    Friend:2,
+    Stranger:3,
+    Robot:4,
+    Unknown:5
+}
+export default EAvatarRelationRank

+ 7 - 0
src/enum/MessageHandleType.js

@@ -0,0 +1,7 @@
+var MessageHandleType = {
+    MHT_Undefined:0,
+    MHT_RoomMulticast:1,
+    MHT_FollowListMulticast:2,
+    MHT_CustomTargetSync:3
+}
+export default MessageHandleType

+ 6 - 0
src/enum/MotionType.js

@@ -0,0 +1,6 @@
+var MotionType = {
+    Walk:'walk',
+    Run:'run',
+    Fly:'fly'
+}
+export default MotionType

+ 5 - 0
src/enum/RemoveVisitorType.js

@@ -0,0 +1,5 @@
+var RemoveVisitorType = {
+    RVT_ChangeToObserver:1,
+    RVT_MoveOutOfTheRoom:2
+}
+export default RemoveVisitorType

+ 9 - 8
src/main.js

@@ -3,7 +3,7 @@ import Codes from "./enum/Codes.js"
 
 const xverse = new Xverse({
     env: "DEV",
-    appId:10016,
+    appId:"10016",
     releaseId:'2203120033_29769e'
 });
 
@@ -35,7 +35,7 @@ const l = async()=>{
             roomId: 'e629ef3e-022d-4e64-8654-703bb96410eb',
             userId: '1f7acca1db9d5',
             wsServerUrl: 'wss://uat-eks.xverse.cn/ws',
-            appId: 10016,
+            appId: "10016",
             token: " ",
             nickname: '1f7acca1db9d5',
             firends: ["user1"],
@@ -48,13 +48,14 @@ const l = async()=>{
             objectFit: null,
             hasAvatar: !0,
             syncToOthers: !0
-        })
-        u(),
-        c(),
-        window.room = room,
-        e(!1)
+        });
+        debugger
+        u();
+        c();
+        window.room = room;
+        e(!1);
     } catch (M) {
-        console.error(M),
+        console.error(M);
         alert(M);
         return
     }

+ 14 - 0
src/util.js

@@ -60,6 +60,20 @@ var util = {
             l(i.slice(0, e))
         }
         )
+    },
+    isWebAssemblySupported(){
+        try {
+            if (typeof WebAssembly == "object" && typeof WebAssembly.instantiate == "function") {
+                const i = new WebAssembly.Module(Uint8Array.of(0, 97, 115, 109, 1, 0, 0, 0));
+                if (i instanceof WebAssembly.Module)
+                    return new WebAssembly.Instance(i)instanceof WebAssembly.Instance
+            }
+        } catch {}
+        return console.log("wasm is not supported"),
+        !1
+    },
+    isSupported() {
+        return typeof RTCPeerConnection == "function" && this.isWebAssemblySupported()
     }
 }
 export default util