/**
* Name: Metaverse
* Date: 2022/4/9
* Author: https://www.4dkankan.com
* Copyright © 2022 4DAGE Co., Ltd. All rights reserved.
* Licensed under the GLP license
*/
(function (factory) {
typeof define === 'function' && define.amd ? define(factory) :
factory();
})((function () { 'use strict';
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _asyncToGenerator(fn) {
return function () {
var self = this,
args = arguments;
return new Promise(function (resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(undefined);
});
};
}
function createCommonjsModule(fn) {
var module = { exports: {} };
return fn(module, module.exports), module.exports;
}
/**
* Copyright (c) 2014-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var runtime_1 = createCommonjsModule(function (module) {
var runtime = (function (exports) {
var Op = Object.prototype;
var hasOwn = Op.hasOwnProperty;
var undefined$1; // More compressible than void 0.
var $Symbol = typeof Symbol === "function" ? Symbol : {};
var iteratorSymbol = $Symbol.iterator || "@@iterator";
var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
function define(obj, key, value) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
return obj[key];
}
try {
// IE 8 has a broken Object.defineProperty that only works on DOM objects.
define({}, "");
} catch (err) {
define = function(obj, key, value) {
return obj[key] = value;
};
}
function wrap(innerFn, outerFn, self, tryLocsList) {
// If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
var generator = Object.create(protoGenerator.prototype);
var context = new Context(tryLocsList || []);
// The ._invoke method unifies the implementations of the .next,
// .throw, and .return methods.
generator._invoke = makeInvokeMethod(innerFn, self, context);
return generator;
}
exports.wrap = wrap;
// Try/catch helper to minimize deoptimizations. Returns a completion
// record like context.tryEntries[i].completion. This interface could
// have been (and was previously) designed to take a closure to be
// invoked without arguments, but in all the cases we care about we
// already have an existing method we want to call, so there's no need
// to create a new function object. We can even get away with assuming
// the method takes exactly one argument, since that happens to be true
// in every case, so we don't have to touch the arguments object. The
// only additional allocation required is the completion record, which
// has a stable shape and so hopefully should be cheap to allocate.
function tryCatch(fn, obj, arg) {
try {
return { type: "normal", arg: fn.call(obj, arg) };
} catch (err) {
return { type: "throw", arg: err };
}
}
var GenStateSuspendedStart = "suspendedStart";
var GenStateSuspendedYield = "suspendedYield";
var GenStateExecuting = "executing";
var GenStateCompleted = "completed";
// Returning this object from the innerFn has the same effect as
// breaking out of the dispatch switch statement.
var ContinueSentinel = {};
// Dummy constructor functions that we use as the .constructor and
// .constructor.prototype properties for functions that return Generator
// objects. For full spec compliance, you may wish to configure your
// minifier not to mangle the names of these two functions.
function Generator() {}
function GeneratorFunction() {}
function GeneratorFunctionPrototype() {}
// This is a polyfill for %IteratorPrototype% for environments that
// don't natively support it.
var IteratorPrototype = {};
define(IteratorPrototype, iteratorSymbol, function () {
return this;
});
var getProto = Object.getPrototypeOf;
var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
if (NativeIteratorPrototype &&
NativeIteratorPrototype !== Op &&
hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
// This environment has a native %IteratorPrototype%; use it instead
// of the polyfill.
IteratorPrototype = NativeIteratorPrototype;
}
var Gp = GeneratorFunctionPrototype.prototype =
Generator.prototype = Object.create(IteratorPrototype);
GeneratorFunction.prototype = GeneratorFunctionPrototype;
define(Gp, "constructor", GeneratorFunctionPrototype);
define(GeneratorFunctionPrototype, "constructor", GeneratorFunction);
GeneratorFunction.displayName = define(
GeneratorFunctionPrototype,
toStringTagSymbol,
"GeneratorFunction"
);
// Helper for defining the .next, .throw, and .return methods of the
// Iterator interface in terms of a single ._invoke method.
function defineIteratorMethods(prototype) {
["next", "throw", "return"].forEach(function(method) {
define(prototype, method, function(arg) {
return this._invoke(method, arg);
});
});
}
exports.isGeneratorFunction = function(genFun) {
var ctor = typeof genFun === "function" && genFun.constructor;
return ctor
? ctor === GeneratorFunction ||
// For the native GeneratorFunction constructor, the best we can
// do is to check its .name property.
(ctor.displayName || ctor.name) === "GeneratorFunction"
: false;
};
exports.mark = function(genFun) {
if (Object.setPrototypeOf) {
Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
} else {
genFun.__proto__ = GeneratorFunctionPrototype;
define(genFun, toStringTagSymbol, "GeneratorFunction");
}
genFun.prototype = Object.create(Gp);
return genFun;
};
// Within the body of any async function, `await x` is transformed to
// `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
// `hasOwn.call(value, "__await")` to determine if the yielded value is
// meant to be awaited.
exports.awrap = function(arg) {
return { __await: arg };
};
function AsyncIterator(generator, PromiseImpl) {
function invoke(method, arg, resolve, reject) {
var record = tryCatch(generator[method], generator, arg);
if (record.type === "throw") {
reject(record.arg);
} else {
var result = record.arg;
var value = result.value;
if (value &&
typeof value === "object" &&
hasOwn.call(value, "__await")) {
return PromiseImpl.resolve(value.__await).then(function(value) {
invoke("next", value, resolve, reject);
}, function(err) {
invoke("throw", err, resolve, reject);
});
}
return PromiseImpl.resolve(value).then(function(unwrapped) {
// When a yielded Promise is resolved, its final value becomes
// the .value of the Promise<{value,done}> result for the
// current iteration.
result.value = unwrapped;
resolve(result);
}, function(error) {
// If a rejected Promise was yielded, throw the rejection back
// into the async generator function so it can be handled there.
return invoke("throw", error, resolve, reject);
});
}
}
var previousPromise;
function enqueue(method, arg) {
function callInvokeWithMethodAndArg() {
return new PromiseImpl(function(resolve, reject) {
invoke(method, arg, resolve, reject);
});
}
return previousPromise =
// If enqueue has been called before, then we want to wait until
// all previous Promises have been resolved before calling invoke,
// so that results are always delivered in the correct order. If
// enqueue has not been called before, then it is important to
// call invoke immediately, without waiting on a callback to fire,
// so that the async generator function has the opportunity to do
// any necessary setup in a predictable way. This predictability
// is why the Promise constructor synchronously invokes its
// executor callback, and why async functions synchronously
// execute code before the first await. Since we implement simple
// async functions in terms of async generators, it is especially
// important to get this right, even though it requires care.
previousPromise ? previousPromise.then(
callInvokeWithMethodAndArg,
// Avoid propagating failures to Promises returned by later
// invocations of the iterator.
callInvokeWithMethodAndArg
) : callInvokeWithMethodAndArg();
}
// Define the unified helper method that is used to implement .next,
// .throw, and .return (see defineIteratorMethods).
this._invoke = enqueue;
}
defineIteratorMethods(AsyncIterator.prototype);
define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
return this;
});
exports.AsyncIterator = AsyncIterator;
// Note that simple async functions are implemented on top of
// AsyncIterator objects; they just return a Promise for the value of
// the final result produced by the iterator.
exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {
if (PromiseImpl === void 0) PromiseImpl = Promise;
var iter = new AsyncIterator(
wrap(innerFn, outerFn, self, tryLocsList),
PromiseImpl
);
return exports.isGeneratorFunction(outerFn)
? iter // If outerFn is a generator, return the full iterator.
: iter.next().then(function(result) {
return result.done ? result.value : iter.next();
});
};
function makeInvokeMethod(innerFn, self, context) {
var state = GenStateSuspendedStart;
return function invoke(method, arg) {
if (state === GenStateExecuting) {
throw new Error("Generator is already running");
}
if (state === GenStateCompleted) {
if (method === "throw") {
throw arg;
}
// Be forgiving, per 25.3.3.3.3 of the spec:
// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
return doneResult();
}
context.method = method;
context.arg = arg;
while (true) {
var delegate = context.delegate;
if (delegate) {
var delegateResult = maybeInvokeDelegate(delegate, context);
if (delegateResult) {
if (delegateResult === ContinueSentinel) continue;
return delegateResult;
}
}
if (context.method === "next") {
// Setting context._sent for legacy support of Babel's
// function.sent implementation.
context.sent = context._sent = context.arg;
} else if (context.method === "throw") {
if (state === GenStateSuspendedStart) {
state = GenStateCompleted;
throw context.arg;
}
context.dispatchException(context.arg);
} else if (context.method === "return") {
context.abrupt("return", context.arg);
}
state = GenStateExecuting;
var record = tryCatch(innerFn, self, context);
if (record.type === "normal") {
// If an exception is thrown from innerFn, we leave state ===
// GenStateExecuting and loop back for another invocation.
state = context.done
? GenStateCompleted
: GenStateSuspendedYield;
if (record.arg === ContinueSentinel) {
continue;
}
return {
value: record.arg,
done: context.done
};
} else if (record.type === "throw") {
state = GenStateCompleted;
// Dispatch the exception by looping back around to the
// context.dispatchException(context.arg) call above.
context.method = "throw";
context.arg = record.arg;
}
}
};
}
// Call delegate.iterator[context.method](context.arg) and handle the
// result, either by returning a { value, done } result from the
// delegate iterator, or by modifying context.method and context.arg,
// setting context.delegate to null, and returning the ContinueSentinel.
function maybeInvokeDelegate(delegate, context) {
var method = delegate.iterator[context.method];
if (method === undefined$1) {
// A .throw or .return when the delegate iterator has no .throw
// method always terminates the yield* loop.
context.delegate = null;
if (context.method === "throw") {
// Note: ["return"] must be used for ES3 parsing compatibility.
if (delegate.iterator["return"]) {
// If the delegate iterator has a return method, give it a
// chance to clean up.
context.method = "return";
context.arg = undefined$1;
maybeInvokeDelegate(delegate, context);
if (context.method === "throw") {
// If maybeInvokeDelegate(context) changed context.method from
// "return" to "throw", let that override the TypeError below.
return ContinueSentinel;
}
}
context.method = "throw";
context.arg = new TypeError(
"The iterator does not provide a 'throw' method");
}
return ContinueSentinel;
}
var record = tryCatch(method, delegate.iterator, context.arg);
if (record.type === "throw") {
context.method = "throw";
context.arg = record.arg;
context.delegate = null;
return ContinueSentinel;
}
var info = record.arg;
if (! info) {
context.method = "throw";
context.arg = new TypeError("iterator result is not an object");
context.delegate = null;
return ContinueSentinel;
}
if (info.done) {
// Assign the result of the finished delegate to the temporary
// variable specified by delegate.resultName (see delegateYield).
context[delegate.resultName] = info.value;
// Resume execution at the desired location (see delegateYield).
context.next = delegate.nextLoc;
// If context.method was "throw" but the delegate handled the
// exception, let the outer generator proceed normally. If
// context.method was "next", forget context.arg since it has been
// "consumed" by the delegate iterator. If context.method was
// "return", allow the original .return call to continue in the
// outer generator.
if (context.method !== "return") {
context.method = "next";
context.arg = undefined$1;
}
} else {
// Re-yield the result returned by the delegate method.
return info;
}
// The delegate iterator is finished, so forget it and continue with
// the outer generator.
context.delegate = null;
return ContinueSentinel;
}
// Define Generator.prototype.{next,throw,return} in terms of the
// unified ._invoke helper method.
defineIteratorMethods(Gp);
define(Gp, toStringTagSymbol, "Generator");
// A Generator should always return itself as the iterator object when the
// @@iterator function is called on it. Some browsers' implementations of the
// iterator prototype chain incorrectly implement this, causing the Generator
// object to not be returned from this call. This ensures that doesn't happen.
// See https://github.com/facebook/regenerator/issues/274 for more details.
define(Gp, iteratorSymbol, function() {
return this;
});
define(Gp, "toString", function() {
return "[object Generator]";
});
function pushTryEntry(locs) {
var entry = { tryLoc: locs[0] };
if (1 in locs) {
entry.catchLoc = locs[1];
}
if (2 in locs) {
entry.finallyLoc = locs[2];
entry.afterLoc = locs[3];
}
this.tryEntries.push(entry);
}
function resetTryEntry(entry) {
var record = entry.completion || {};
record.type = "normal";
delete record.arg;
entry.completion = record;
}
function Context(tryLocsList) {
// The root entry object (effectively a try statement without a catch
// or a finally block) gives us a place to store values thrown from
// locations where there is no enclosing try statement.
this.tryEntries = [{ tryLoc: "root" }];
tryLocsList.forEach(pushTryEntry, this);
this.reset(true);
}
exports.keys = function(object) {
var keys = [];
for (var key in object) {
keys.push(key);
}
keys.reverse();
// Rather than returning an object with a next method, we keep
// things simple and return the next function itself.
return function next() {
while (keys.length) {
var key = keys.pop();
if (key in object) {
next.value = key;
next.done = false;
return next;
}
}
// To avoid creating an additional object, we just hang the .value
// and .done properties off the next function object itself. This
// also ensures that the minifier will not anonymize the function.
next.done = true;
return next;
};
};
function values(iterable) {
if (iterable) {
var iteratorMethod = iterable[iteratorSymbol];
if (iteratorMethod) {
return iteratorMethod.call(iterable);
}
if (typeof iterable.next === "function") {
return iterable;
}
if (!isNaN(iterable.length)) {
var i = -1, next = function next() {
while (++i < iterable.length) {
if (hasOwn.call(iterable, i)) {
next.value = iterable[i];
next.done = false;
return next;
}
}
next.value = undefined$1;
next.done = true;
return next;
};
return next.next = next;
}
}
// Return an iterator with no values.
return { next: doneResult };
}
exports.values = values;
function doneResult() {
return { value: undefined$1, done: true };
}
Context.prototype = {
constructor: Context,
reset: function(skipTempReset) {
this.prev = 0;
this.next = 0;
// Resetting context._sent for legacy support of Babel's
// function.sent implementation.
this.sent = this._sent = undefined$1;
this.done = false;
this.delegate = null;
this.method = "next";
this.arg = undefined$1;
this.tryEntries.forEach(resetTryEntry);
if (!skipTempReset) {
for (var name in this) {
// Not sure about the optimal order of these conditions:
if (name.charAt(0) === "t" &&
hasOwn.call(this, name) &&
!isNaN(+name.slice(1))) {
this[name] = undefined$1;
}
}
}
},
stop: function() {
this.done = true;
var rootEntry = this.tryEntries[0];
var rootRecord = rootEntry.completion;
if (rootRecord.type === "throw") {
throw rootRecord.arg;
}
return this.rval;
},
dispatchException: function(exception) {
if (this.done) {
throw exception;
}
var context = this;
function handle(loc, caught) {
record.type = "throw";
record.arg = exception;
context.next = loc;
if (caught) {
// If the dispatched exception was caught by a catch block,
// then let that catch block handle the exception normally.
context.method = "next";
context.arg = undefined$1;
}
return !! caught;
}
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
var record = entry.completion;
if (entry.tryLoc === "root") {
// Exception thrown outside of any try block that could handle
// it, so set the completion value of the entire function to
// throw the exception.
return handle("end");
}
if (entry.tryLoc <= this.prev) {
var hasCatch = hasOwn.call(entry, "catchLoc");
var hasFinally = hasOwn.call(entry, "finallyLoc");
if (hasCatch && hasFinally) {
if (this.prev < entry.catchLoc) {
return handle(entry.catchLoc, true);
} else if (this.prev < entry.finallyLoc) {
return handle(entry.finallyLoc);
}
} else if (hasCatch) {
if (this.prev < entry.catchLoc) {
return handle(entry.catchLoc, true);
}
} else if (hasFinally) {
if (this.prev < entry.finallyLoc) {
return handle(entry.finallyLoc);
}
} else {
throw new Error("try statement without catch or finally");
}
}
}
},
abrupt: function(type, arg) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
if (entry.tryLoc <= this.prev &&
hasOwn.call(entry, "finallyLoc") &&
this.prev < entry.finallyLoc) {
var finallyEntry = entry;
break;
}
}
if (finallyEntry &&
(type === "break" ||
type === "continue") &&
finallyEntry.tryLoc <= arg &&
arg <= finallyEntry.finallyLoc) {
// Ignore the finally entry if control is not jumping to a
// location outside the try/catch block.
finallyEntry = null;
}
var record = finallyEntry ? finallyEntry.completion : {};
record.type = type;
record.arg = arg;
if (finallyEntry) {
this.method = "next";
this.next = finallyEntry.finallyLoc;
return ContinueSentinel;
}
return this.complete(record);
},
complete: function(record, afterLoc) {
if (record.type === "throw") {
throw record.arg;
}
if (record.type === "break" ||
record.type === "continue") {
this.next = record.arg;
} else if (record.type === "return") {
this.rval = this.arg = record.arg;
this.method = "return";
this.next = "end";
} else if (record.type === "normal" && afterLoc) {
this.next = afterLoc;
}
return ContinueSentinel;
},
finish: function(finallyLoc) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
if (entry.finallyLoc === finallyLoc) {
this.complete(entry.completion, entry.afterLoc);
resetTryEntry(entry);
return ContinueSentinel;
}
}
},
"catch": function(tryLoc) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
if (entry.tryLoc === tryLoc) {
var record = entry.completion;
if (record.type === "throw") {
var thrown = record.arg;
resetTryEntry(entry);
}
return thrown;
}
}
// The context.catch method must only be called with a location
// argument that corresponds to a known catch block.
throw new Error("illegal catch attempt");
},
delegateYield: function(iterable, resultName, nextLoc) {
this.delegate = {
iterator: values(iterable),
resultName: resultName,
nextLoc: nextLoc
};
if (this.method === "next") {
// Deliberately forget the last sent value so that we don't
// accidentally pass it on to the delegate.
this.arg = undefined$1;
}
return ContinueSentinel;
}
};
// Regardless of whether this script is executing as a CommonJS module
// or not, return the runtime object so that we can declare the variable
// regeneratorRuntime in the outer scope, which allows this module to be
// injected easily by `bin/regenerator --include-runtime script.js`.
return exports;
}(
// If this script is executing as a CommonJS module, use module.exports
// as the regeneratorRuntime namespace. Otherwise create a new empty
// object. Either way, the resulting object will be used to initialize
// the regeneratorRuntime variable at the top of this file.
module.exports
));
try {
regeneratorRuntime = runtime;
} catch (accidentalStrictMode) {
// This module should not be running in strict mode, so the above
// assignment should always work unless something is misconfigured. Just
// in case runtime.js accidentally runs in strict mode, in modern engines
// we can explicitly access globalThis. In older engines we can escape
// strict mode using a global Function call. This could conceivably fail
// if a Content Security Policy forbids using Function, but in that case
// the proper solution is to fix the accidental strict mode problem. If
// you've misconfigured your bundler to force strict mode and applied a
// CSP to forbid Function, and you're not willing to fix either of those
// problems, please detail your unique predicament in a GitHub issue.
if (typeof globalThis === "object") {
globalThis.regeneratorRuntime = runtime;
} else {
Function("r", "regeneratorRuntime = r")(runtime);
}
}
});
var regenerator = runtime_1;
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
var util = {
uuid() {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (i) {
var e = Math.random() * 16 | 0;
return (i === "x" ? e : e & 3 | 8).toString(16);
});
},
getFormattedDate(i) {
var e = i.getMonth() + 1,
t = i.getDate(),
r = i.getHours(),
n = i.getMinutes(),
o = i.getSeconds(),
a = i.getMilliseconds(),
s = (e < 10 ? "0" : "") + e,
l = (t < 10 ? "0" : "") + t,
u = (r < 10 ? "0" : "") + r,
c = (n < 10 ? "0" : "") + n,
h = (o < 10 ? "0" : "") + o;
return i.getFullYear() + "-" + s + "-" + l + " " + u + ":" + c + ":" + h + "." + a;
},
createInstance(i) {
var e = new Axios(i),
t = bind(Axios.prototype.request, e);
return utils.extend(t, Axios.prototype, e), utils.extend(t, e), t.create = function (n) {
return createInstance(mergeConfig(i, n));
}, t;
},
mapLimit(i, e, t) {
return new Promise(function (r, n) {
var o = i.length;
var a = e - 1,
s = 0;
var l = function l(u) {
u.forEach(function (c) {
t(c).then(function () {
if (s++, s === o) {
r();
return;
}
a++;
var h = i[a];
h && l([h]);
}, function (h) {
n(h);
});
});
};
l(i.slice(0, e));
});
},
isWebAssemblySupported() {
try {
if (typeof WebAssembly == "object" && typeof WebAssembly.instantiate == "function") {
var 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 (_unused) {}
return console.log("wasm is not supported"), !1;
},
isSupported() {
return typeof RTCPeerConnection == "function" && this.isWebAssemblySupported();
}
};
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
Object.defineProperty(subClass, "prototype", {
writable: false
});
if (superClass) _setPrototypeOf(subClass, superClass);
}
function _typeof(obj) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
}, _typeof(obj);
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _possibleConstructorReturn(self, call) {
if (call && (_typeof(call) === "object" || typeof call === "function")) {
return call;
} else if (call !== void 0) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return _assertThisInitialized(self);
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _createSuper$g(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$h(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$h() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var Reporter = /*#__PURE__*/function (_EventEmitter) {
_inherits(Reporter, _EventEmitter);
var _super = _createSuper$g(Reporter);
function Reporter() {
var _this;
_classCallCheck(this, Reporter);
_this = _super.call(this);
_this._header = {};
_this._body = {};
_this._queue = [];
_this._disabled = !1;
_this._interval = null;
_this._reportUrl = null;
_this.isDocumentLoaded = function () {
return document.readyState === "complete";
};
_this._header.logModuleId = REPORT_MODULE_TYPE, _this._header.url = location.href, _this._header.enviroment = ENV, _this._header.networkType = window.navigator.connection ? window.navigator.connection.type : "unknown", _this._interval = window.setInterval(function () {
_this._flushReport();
}, 10 * 1e3);
return _this;
}
_createClass(Reporter, [{
key: "disable",
value: function disable() {
this._disabled = !0, this._interval && window.clearInterval(this._interval);
}
}, {
key: "updateHeader",
value: function updateHeader(e) {
Object.assign(this._header, e);
}
}, {
key: "updateBody",
value: function updateBody(e) {
Object.assign(this._body, e);
}
}, {
key: "updateReportUrl",
value: function updateReportUrl(e) {
this._reportUrl = e;
}
}, {
key: "report",
value: function report(e, t, r) {
var _this2 = this;
if (this._disabled) return;
r || (r = {});
var _r = r,
n = _r.immediate,
o = _r.sampleRate;
if (o && o > Math.random()) return;
this.updateBody({
logTime: util.getFormattedDate(new Date()),
logTimestamp: Date.now()
});
var a = function a(s) {
var l = oe(le(oe({}, _this2._body), {
type: e
}), s);
_this2._queue.push(l), e === "measurement" && _this2.emit("report", s);
};
Array.isArray(t) ? t.forEach(function (s) {
return a(s);
}) : a(t), (n || this._queue.length >= REPORT_NUM_PER_REQUEST) && this._flushReport();
}
}, {
key: "_flushReport",
value: function _flushReport() {
if (this._disabled || !this._queue.length || !this.isDocumentLoaded()) return;
var e = {
header: this._header,
body: this._queue.splice(0, REPORT_NUM_PER_REQUEST)
};
this._post(e);
}
}, {
key: "_post",
value: function _post(e) {
var t = this._reportUrl || REPORT_URL.DEV;
return new Promise(function (r, n) {
var o = new XMLHttpRequest();
o.open("POST", t), o.setRequestHeader("Content-Type", "application/json");
try {
o.send(JSON.stringify(e));
} catch (a) {
console.error(a);
}
o.addEventListener("readystatechange", function () {
if (o.readyState == 4) return o.status == 200 ? r(o) : n("Unable to send log");
});
});
}
}]);
return Reporter;
}(EventEmitter);
var reporter$1 = new Reporter();
function _arrayLikeToArray$1(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) {
arr2[i] = arr[i];
}
return arr2;
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray$1(arr);
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
function _unsupportedIterableToArray$1(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray$1(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$1(o, minLen);
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray$1(arr) || _nonIterableSpread();
}
var Codes = {
Success: 0,
Param: 1001,
Internal: 1002,
Timeout: 1003,
Authentication: 1004,
TokenExpired: 1005,
Unsupported: 1006,
InitNetworkTimeout: 1007,
InitDecoderTimeout: 1008,
InitConfigTimeout: 1009,
InitEngineTimeout: 1010,
InitEngine: 1011,
ActionBlocked: 1012,
PreloadCanceled: 1013,
FrequencyLimit: 1014,
UsersUpperLimit: 2e3,
RoomsUpperLimit: 2001,
ServerParam: 2002,
LackOfToken: 2003,
LoginFailed: 2004,
VerifyServiceDown: 2005,
CreateSessionFailed: 2006,
RtcConnection: 2008,
DoActionFailed: 2009,
StateSyncFailed: 2010,
BroadcastFailed: 2011,
DataAbnormal: 2012,
GetOnVehicle: 2015,
RepeatLogin: 2017,
RoomDoseNotExist: 2018,
TicketExpire: 2019,
ServerRateLimit: 2020,
DoActionBlocked: 2333,
ActionMaybeDelay: 2334,
ActionResponseTimeout: 2999
};
var Logger$1 = /*#__PURE__*/function () {
function Logger(e) {
_classCallCheck(this, Logger);
this.level = 3;
this.module = e;
}
_createClass(Logger, [{
key: "setLevel",
value: function setLevel(e) {
this.level = e;
}
}, {
key: "atleast",
value: function atleast(e) {
return e >= this.level && e >= this.level;
}
}, {
key: "print",
value: function print(e, t) {
for (var _len = arguments.length, r = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
r[_key - 2] = arguments[_key];
}
if (this.atleast(t)) {
var _console$n;
var n = e == "debug" ? "info" : e,
o = this.prefix(e);
(_console$n = console[n]).call.apply(_console$n, [null, o].concat(r));
}
if (e !== "debug" && e !== "info") {
var _n = r.map(function (o) {
if (o instanceof Object) try {
return JSON.stringify(o);
} catch (_unused) {
return o;
} else return o;
}).join(",");
reporter$1.report("log", {
message: _n,
level: e,
module: this.module
});
}
}
}, {
key: "debug",
value: function debug() {
for (var _len2 = arguments.length, e = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
e[_key2] = arguments[_key2];
}
return this.print.apply(this, ["debug", 1].concat(e));
}
}, {
key: "info",
value: function info() {
for (var _len3 = arguments.length, e = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
e[_key3] = arguments[_key3];
}
return this.print.apply(this, ["info", 2].concat(e));
}
}, {
key: "infoAndReportLog",
value: function infoAndReportLog(e) {
for (var _len4 = arguments.length, t = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
t[_key4 - 1] = arguments[_key4];
}
var r = e.reportOptions;
delete e.reportOptions, reporter$1.report("log", e, r), t.length || (t = [e.message]), this.debug.apply(this, _toConsumableArray(t));
}
}, {
key: "infoAndReportMeasurement",
value: function infoAndReportMeasurement(e) {
for (var _len5 = arguments.length, t = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
t[_key5 - 1] = arguments[_key5];
}
var n;
var r = e.reportOptions;
if (e.startTime) {
var o = Date.now();
e.value === void 0 && (e.endTime = o), e.value === void 0 && (e.value = o - e.startTime);
}
if (e.error ? e.code = ((n = e.error) == null ? void 0 : n.code) || Codes.Internal : e.code = Codes.Success, reporter$1.report("measurement", e, r), t.length || (t = [e]), e.level === 4 || e.error) {
this.error.apply(this, _toConsumableArray(t));
return;
}
this.warn.apply(this, _toConsumableArray(t));
}
}, {
key: "warn",
value: function warn() {
for (var _len6 = arguments.length, e = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
e[_key6] = arguments[_key6];
}
return this.print.apply(this, ["warn", 3].concat(e));
}
}, {
key: "error",
value: function error() {
for (var _len7 = arguments.length, e = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
e[_key7] = arguments[_key7];
}
return this.print.apply(this, ["error", 4].concat(e));
}
}, {
key: "prefix",
value: function prefix(e) {
return "[".concat(this.module, "][").concat(e, "] ").concat(util.getFormattedDate(new Date()), ":");
}
}], [{
key: "setLevel",
value: function setLevel(e) {
this.level = e;
}
}]);
return Logger;
}();
var logger = new Logger$1();
var AxiosCanceler = /*#__PURE__*/function () {
function AxiosCanceler() {
_classCallCheck(this, AxiosCanceler);
this.pendingMap = new Map();
}
_createClass(AxiosCanceler, [{
key: "addPending",
value: function addPending(e) {
var _this = this;
return new axios.CancelToken(function (t) {
_this.pendingMap.has(e) || _this.pendingMap.set(e, t);
});
}
}, {
key: "removeAllPending",
value: function removeAllPending() {
this.pendingMap.forEach(function (e) {
e && isFunction(e) && e();
}), this.pendingMap.clear();
}
}, {
key: "removePending",
value: function removePending(e) {
if (this.pendingMap.has(e)) {
var t = this.pendingMap.get(e);
t && t(e), this.pendingMap.delete(e);
}
}
}, {
key: "removeCancelToken",
value: function removeCancelToken(e) {
this.pendingMap.has(e) && this.pendingMap.delete(e);
}
}, {
key: "reset",
value: function reset() {
this.pendingMap = new Map();
}
}]);
return AxiosCanceler;
}();
function _createSuper$f(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$g(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$g() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var Http1 = /*#__PURE__*/function (_EventEmitter) {
_inherits(Http1, _EventEmitter);
var _super = _createSuper$f(Http1);
function Http1() {
var _this;
_classCallCheck(this, Http1);
_this = _super.call(this);
_this.instatnce = axios.create(), _this.canceler = new AxiosCanceler();
return _this;
}
_createClass(Http1, [{
key: "requestConstant",
value: function requestConstant() {
return {
x_nounce: this.randomString(),
x_timestamp: new Date().getTime(),
x_os: "web"
};
}
}, {
key: "requestParams",
value: function requestParams(e) {
return oe({}, e.params);
}
}, {
key: "get",
value: function get(e) {
return this.request(le(oe({}, e), {
method: "GET"
}));
}
}, {
key: "post",
value: function post(e) {
return this.request(le(oe({}, e), {
method: "POST"
}));
}
}, {
key: "request",
value: function request(e) {
var _this2 = this;
var t = e.url,
_e$timeout = e.timeout,
r = _e$timeout === void 0 ? 1e4 : _e$timeout,
n = e.method,
o = e.key,
a = e.beforeRequest,
s = e.responseType,
l = e.data;
var _e$retry = e.retry,
u = _e$retry === void 0 ? 0 : _e$retry;
var c = this.patchUrl(t),
h = this.canceler.addPending(t);
a && isFunction(a) && a(e);
var f = this.requestParams(e);
var d = {
url: c,
method: n,
timeout: r,
cancelToken: h,
responseType: s,
params: f
};
n === "POST" && (d = oe({
data: l
}, d));
var _ = Date.now(),
g = function g() {
return _this2.instatnce.request(d).then(function (m) {
return o && logger.infoAndReportMeasurement({
metric: "http",
startTime: _,
extra: t,
group: "http",
tag: o
}), _this2.canceler.removeCancelToken(t), m;
}).catch(function (m) {
var v = axios.isCancel(m);
return u > 0 && !v ? (u--, logger.warn("request ".concat(t, " retry, left retry count"), u), g()) : (logger.infoAndReportMeasurement({
metric: "http",
startTime: _,
error: m,
extra: {
url: t,
isCanceled: v
},
tag: o,
group: "http"
}), _this2.canceler.removeCancelToken(t), Promise.reject(m));
});
};
return g();
}
}, {
key: "patchUrl",
value: function patchUrl(e) {
return e;
}
}, {
key: "randomString",
value: function randomString() {
var e = "";
var t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
r = t.length;
for (var n = 0; n < 8; n++) {
e += t.charAt(Math.floor(Math.random() * r));
}
return e;
}
}]);
return Http1;
}(EventEmitter);
var http1 = new Http1();
var ModelManager = /*#__PURE__*/function () {
function ModelManager(e, t) {
_classCallCheck(this, ModelManager);
this.avatarModelList = [];
this.skinList = [];
this.applicationConfig = null;
this.config = null;
this.appId = e, this.releaseId = t;
}
_createClass(ModelManager, [{
key: "findSkinConfig",
value: function () {
var _findSkinConfig = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) {
var t, n;
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
t = null;
_context.next = 3;
return this.getSkinsList();
case 3:
t = (this.skinList = _context.sent).find(function (n) {
return n.id === e;
});
if (!t) {
_context.next = 6;
break;
}
return _context.abrupt("return", t);
case 6:
n = "skin is invalid: skinId: ".concat(e);
return _context.abrupt("return", Promise.reject(new ParamError(n)));
case 8:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function findSkinConfig(_x) {
return _findSkinConfig.apply(this, arguments);
}
return findSkinConfig;
}()
}, {
key: "findRoute",
value: function () {
var _findRoute = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2(e, t) {
var n, o;
return regenerator.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return this.findSkinConfig(e);
case 2:
n = _context2.sent.routeList.find(function (o) {
return o.pathName === t;
});
if (n) {
_context2.next = 6;
break;
}
o = "find path failed: skinId: ".concat(e, ", pathName: ").concat(t);
return _context2.abrupt("return", Promise.reject(new ParamError(o)));
case 6:
return _context2.abrupt("return", (logger.debug("find route success", n), n));
case 7:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function findRoute(_x2, _x3) {
return _findRoute.apply(this, arguments);
}
return findRoute;
}()
}, {
key: "findAssetList",
value: function () {
var _findAssetList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e) {
var r, n;
return regenerator.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return this.findSkinConfig(e);
case 2:
r = _context3.sent.assetList;
if (r) {
_context3.next = 6;
break;
}
n = "find path failed: skinId: ".concat(e);
return _context3.abrupt("return", Promise.reject(new ParamError(n)));
case 6:
return _context3.abrupt("return", (logger.debug("find route success", r), r));
case 7:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function findAssetList(_x4) {
return _findAssetList.apply(this, arguments);
}
return findAssetList;
}()
}, {
key: "findAsset",
value: function () {
var _findAsset = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(e, t) {
var r,
n,
o,
a,
_args4 = arguments;
return regenerator.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
r = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : "id";
_context4.next = 3;
return this.findSkinConfig(e);
case 3:
n = _context4.sent;
if (!Array.isArray(t)) {
_context4.next = 6;
break;
}
return _context4.abrupt("return", t.map(function (a) {
return n.models.find(function (s) {
return s[r] === a;
});
}).filter(Boolean));
case 6:
o = n.models.find(function (a) {
return a[r] === t;
});
if (o) {
_context4.next = 10;
break;
}
a = "find asset failed: skinId: ".concat(e, ", keyValue: ").concat(t);
return _context4.abrupt("return", Promise.reject(new ParamError(a)));
case 10:
return _context4.abrupt("return", (logger.debug("find asset success", o), o));
case 11:
case "end":
return _context4.stop();
}
}
}, _callee4, this);
}));
function findAsset(_x5, _x6) {
return _findAsset.apply(this, arguments);
}
return findAsset;
}()
}, {
key: "findPoint",
value: function () {
var _findPoint = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5(e, t) {
var n, o;
return regenerator.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
_context5.next = 2;
return this.findSkinConfig(e);
case 2:
n = _context5.sent.pointList.find(function (o) {
return o.id === t;
});
if (n) {
_context5.next = 6;
break;
}
o = "find point failed: skinId: ".concat(e, ", id: ").concat(t);
return _context5.abrupt("return", Promise.reject(new ParamError(o)));
case 6:
return _context5.abrupt("return", (logger.debug("find point success", n), n));
case 7:
case "end":
return _context5.stop();
}
}
}, _callee5, this);
}));
function findPoint(_x7, _x8) {
return _findPoint.apply(this, arguments);
}
return findPoint;
}()
}, {
key: "requestConfig",
value: function () {
var _requestConfig = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6() {
var t, r, _ref, n, o;
return regenerator.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
if (!this.config) {
_context6.next = 2;
break;
}
return _context6.abrupt("return", this.config);
case 2:
// let e = `https://static.xverse.cn/console/config/${this.appId}/config.json`;
// this.releaseId && (e = `https://static.xverse.cn/console/config/${this.appId}/${this.releaseId}/config.json`);
// const t = Xverse.USE_TME_CDN ? "https://static.xverse.cn/tmeland/config/tme_config.json" : e;
t = './assets/config.json';
_context6.prev = 3;
_context6.next = 6;
return http1.get({
url: "".concat(t, "?t=").concat(Date.now()),
key: "config",
timeout: 6e3,
retry: 2
});
case 6:
r = _context6.sent;
_ref = r.data.data || {}, n = _ref.config, o = _ref.preload;
if (n) {
_context6.next = 10;
break;
}
throw new Error("config data parse error" + r.data);
case 10:
return _context6.abrupt("return", (this.config = {
config: n,
preload: o
}, logger.debug("get config success", this.config), this.config));
case 13:
_context6.prev = 13;
_context6.t0 = _context6["catch"](3);
return _context6.abrupt("return", Promise.reject(_context6.t0));
case 16:
case "end":
return _context6.stop();
}
}
}, _callee6, this, [[3, 13]]);
}));
function requestConfig() {
return _requestConfig.apply(this, arguments);
}
return requestConfig;
}()
}, {
key: "getApplicationConfig",
value: function () {
var _getApplicationConfig = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee7() {
var e;
return regenerator.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
if (!this.applicationConfig) {
_context7.next = 2;
break;
}
return _context7.abrupt("return", this.applicationConfig);
case 2:
_context7.prev = 2;
_context7.next = 5;
return this.requestConfig();
case 5:
e = _context7.sent;
return _context7.abrupt("return", (this.applicationConfig = e.config, this.applicationConfig));
case 9:
_context7.prev = 9;
_context7.t0 = _context7["catch"](2);
return _context7.abrupt("return", Promise.reject(_context7.t0));
case 12:
case "end":
return _context7.stop();
}
}
}, _callee7, this, [[2, 9]]);
}));
function getApplicationConfig() {
return _getApplicationConfig.apply(this, arguments);
}
return getApplicationConfig;
}()
}, {
key: "getAvatarModelList",
value: function () {
var _getAvatarModelList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee8() {
var _yield$this$getApplic, e;
return regenerator.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
if (!this.avatarModelList.length) {
_context8.next = 2;
break;
}
return _context8.abrupt("return", this.avatarModelList);
case 2:
_context8.prev = 2;
_context8.next = 5;
return this.getApplicationConfig();
case 5:
_yield$this$getApplic = _context8.sent;
e = _yield$this$getApplic.avatars;
return _context8.abrupt("return", (this.avatarModelList = e.map(function (t) {
return {
name: t.name,
id: t.id,
modelUrl: t.url,
gender: t.gender,
components: t.components
};
}), this.avatarModelList));
case 10:
_context8.prev = 10;
_context8.t0 = _context8["catch"](2);
return _context8.abrupt("return", (logger.error(_context8.t0), []));
case 13:
case "end":
return _context8.stop();
}
}
}, _callee8, this, [[2, 10]]);
}));
function getAvatarModelList() {
return _getAvatarModelList.apply(this, arguments);
}
return getAvatarModelList;
}()
}, {
key: "getSkinsList",
value: function () {
var _getSkinsList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee9() {
var _yield$this$getApplic2, e;
return regenerator.wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
if (!this.skinList.length) {
_context9.next = 2;
break;
}
return _context9.abrupt("return", this.skinList);
case 2:
_context9.prev = 2;
_context9.next = 5;
return this.getApplicationConfig();
case 5:
_yield$this$getApplic2 = _context9.sent;
e = _yield$this$getApplic2.skins;
return _context9.abrupt("return", (this.skinList = e.map(function (t) {
var r;
return {
name: t.name,
dataVersion: t.id + t.versionId,
id: t.id,
fov: parseInt(t.fov || 90),
models: t.assetList.map(function (n) {
var o = n.assetId,
a = n.url,
s = n.thumbnailUrl,
l = n.typeName,
u = n.className;
return {
id: o,
modelUrl: a,
name: n.name,
thumbnailUrl: s,
typeName: l,
className: u === "\u4F4E\u6A21" ? "\u7C97\u6A21" : u
};
}),
routeList: (r = t.routeList) == null ? void 0 : r.map(function (n) {
var o = n.areaName,
a = n.attitude,
s = n.id,
l = n.pathName,
u = n.step,
c = n.birthPointList;
return {
areaName: o,
attitude: a,
id: s,
pathName: l,
step: u,
birthPointList: c.map(function (h) {
return {
camera: h.camera && {
position: objectParseFloat(h.camera.position),
angle: objectParseFloat(h.camera.rotation)
},
player: h.player && {
position: objectParseFloat(h.player.position),
angle: objectParseFloat(h.player.rotation)
}
};
})
};
}),
pointList: t.pointList.map(function (n) {
return le(oe({}, n), {
position: objectParseFloat(n.position),
rotation: objectParseFloat(n.rotation)
});
}),
versionId: t.versionId,
isEnable: t.isEnable,
assetList: t.assetList,
visibleRules: t.visibleRules,
animationList: t.animationList
};
}), this.skinList));
case 10:
_context9.prev = 10;
_context9.t0 = _context9["catch"](2);
return _context9.abrupt("return", (logger.error(_context9.t0), []));
case 13:
case "end":
return _context9.stop();
}
}
}, _callee9, this, [[2, 10]]);
}));
function getSkinsList() {
return _getSkinsList.apply(this, arguments);
}
return getSkinsList;
}()
}, {
key: "getBreathPointTextrueList",
value: function () {
var _getBreathPointTextrueList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee10() {
return regenerator.wrap(function _callee10$(_context10) {
while (1) {
switch (_context10.prev = _context10.next) {
case 0:
return _context10.abrupt("return", [{
url: TEXTURE_URL
}]);
case 1:
case "end":
return _context10.stop();
}
}
}, _callee10);
}));
function getBreathPointTextrueList() {
return _getBreathPointTextrueList.apply(this, arguments);
}
return getBreathPointTextrueList;
}()
}], [{
key: "getInstance",
value: function getInstance(e, t) {
//getInstance(e, t) {
return this.instance || (this.instance = new ModelManager(e, t)), this.instance;
}
}, {
key: "findModels",
value: function findModels(e, t, r) {
//findModels(e, t, r) {
return e.filter(function (o) {
return o.typeName === t && o.className === r;
});
}
}, {
key: "findModel",
value: function findModel(e, t, r) {
//findModel(e, t, r) {
var n = e.filter(function (o) {
return o.typeName === t && o.className === r;
})[0];
return n || null;
}
}]);
return ModelManager;
}();
// export { modelManager };
var JoyStick = /*#__PURE__*/function () {
function JoyStick(e) {
_classCallCheck(this, JoyStick);
this._zone = document.createElement("div");
this._joystick = null;
this._room = e;
}
_createClass(JoyStick, [{
key: "init",
value: function init(e) {
var _this = this;
var _e$interval = e.interval,
t = _e$interval === void 0 ? 33 : _e$interval,
_e$triggerDistance = e.triggerDistance,
r = _e$triggerDistance === void 0 ? 25 : _e$triggerDistance,
_e$style = e.style,
n = _e$style === void 0 ? {
left: 0,
bottom: 0
} : _e$style,
o = function o(u, c) {
_this._room.actionsHandler.joystick({
degree: Math.floor(u),
level: Math.floor(c / 5)
});
},
a = this._zone;
document.body.appendChild(a), a.style.position = "absolute", a.style.width = "200px", a.style.height = "200px", a.style.left = String(n.left), a.style.bottom = String(n.bottom), a.style.zIndex = "999", a.style.userSelect = "none", a.style.webkitUserSelect = "none", this._joystick = nipplejs.create({
zone: a,
mode: "static",
position: {
left: "50%",
top: "50%"
},
color: "white"
});
var s, l;
return this._joystick.on("move", function (u, c) {
s = c;
}), this._joystick.on("start", function () {
l = window.setInterval(function () {
s && s.distance > r && o && o(s.angle.degree, s.distance);
}, t);
}), this._joystick.on("end", function () {
l && window.clearInterval(l), l = void 0;
}), this._joystick;
}
}, {
key: "show",
value: function show() {
if (!this._joystick) throw new Error("joystick is not created");
this._zone.style.display = "block";
}
}, {
key: "hide",
value: function hide() {
if (!this._joystick) throw new Error("joystick is not created");
this._zone.style.display = "none";
}
}]);
return JoyStick;
}();
var CoreBroadcastType = {
PlayAnimation: 'PlayAnimation'
};
var AvatarGroup = {
Npc: 'npc',
User: 'user'
};
var MessageHandleType$1 = {
MHT_Undefined: 0,
MHT_RoomMulticast: 1,
MHT_FollowListMulticast: 2,
MHT_CustomTargetSync: 3
};
var Broadcast$1 = /*#__PURE__*/function () {
function Broadcast(e, t) {
_classCallCheck(this, Broadcast);
this.room = e;
this.handlers = [];
this.init(t);
}
_createClass(Broadcast, [{
key: "init",
value: function init(t) {
this.handlers.push(t);
}
}, {
key: "handleBroadcast",
value: function () {
var _handleBroadcast = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) {
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 1;
JSON.parse(e.broadcastAction.data);
_context.next = 9;
break;
case 5:
_context.prev = 5;
_context.t0 = _context["catch"](1);
logger.error(_context.t0);
return _context.abrupt("return");
case 9:
case "end":
return _context.stop();
}
}
}, _callee, null, [[1, 5]]);
}));
function handleBroadcast(_x) {
return _handleBroadcast.apply(this, arguments);
}
return handleBroadcast;
}()
}, {
key: "broadcast",
value: function broadcast(e) {
var t = e.data,
_e$msgType = e.msgType,
r = _e$msgType === void 0 ? MessageHandleType$1.MHT_FollowListMulticast : _e$msgType,
n = e.targetUserIds;
return this.room.actionsHandler.broadcast({
data: t,
msgType: r,
targetUserIds: n
});
}
}]);
return Broadcast;
}();
function _isNativeFunction(fn) {
return Function.toString.call(fn).indexOf("[native code]") !== -1;
}
function _isNativeReflectConstruct$f() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
return true;
} catch (e) {
return false;
}
}
function _construct(Parent, args, Class) {
if (_isNativeReflectConstruct$f()) {
_construct = Reflect.construct;
} else {
_construct = function _construct(Parent, args, Class) {
var a = [null];
a.push.apply(a, args);
var Constructor = Function.bind.apply(Parent, a);
var instance = new Constructor();
if (Class) _setPrototypeOf(instance, Class.prototype);
return instance;
};
}
return _construct.apply(null, arguments);
}
function _wrapNativeSuper(Class) {
var _cache = typeof Map === "function" ? new Map() : undefined;
_wrapNativeSuper = function _wrapNativeSuper(Class) {
if (Class === null || !_isNativeFunction(Class)) return Class;
if (typeof Class !== "function") {
throw new TypeError("Super expression must either be null or a function");
}
if (typeof _cache !== "undefined") {
if (_cache.has(Class)) return _cache.get(Class);
_cache.set(Class, Wrapper);
}
function Wrapper() {
return _construct(Class, arguments, _getPrototypeOf(this).constructor);
}
Wrapper.prototype = Object.create(Class.prototype, {
constructor: {
value: Wrapper,
enumerable: false,
writable: true,
configurable: true
}
});
return _setPrototypeOf(Wrapper, Class);
};
return _wrapNativeSuper(Class);
}
function _createSuper$e(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$e(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$e() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var XverseError$1 = /*#__PURE__*/function (_Error) {
_inherits(XverseError, _Error);
var _super = _createSuper$e(XverseError);
function XverseError(e, t) {
var _this;
_classCallCheck(this, XverseError);
_this = _super.call(this, t);
_this.code = e;
return _this;
}
_createClass(XverseError, [{
key: "toJSON",
value: function toJSON() {
return {
code: this.code,
message: this.message
};
}
}, {
key: "toString",
value: function toString() {
if (Object(this) !== this) throw new TypeError();
var t = this.name;
t = t === void 0 ? "Error" : String(t);
var r = this.message;
r = r === void 0 ? "" : String(r);
var n = this.code;
return r = n === void 0 ? r : n + "," + r, t === "" ? r : r === "" ? t : t + ": " + r;
}
}]);
return XverseError;
}( /*#__PURE__*/_wrapNativeSuper(Error));
function _createSuper$d(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$d(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$d() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var TimeoutError = /*#__PURE__*/function (_XverseError) {
_inherits(TimeoutError, _XverseError);
var _super = _createSuper$d(TimeoutError);
function TimeoutError(e) {
_classCallCheck(this, TimeoutError);
return _super.call(this, 1003, e || "\u8D85\u65F6");
}
return _createClass(TimeoutError);
}(XverseError$1);
function _createSuper$c(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$c(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$c() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var XverseAvatarManager = /*#__PURE__*/function (_EventEmitter) {
_inherits(XverseAvatarManager, _EventEmitter);
var _super = _createSuper$c(XverseAvatarManager);
function XverseAvatarManager(e) {
var _this;
_classCallCheck(this, XverseAvatarManager);
_this = _super.call(this);
_this.xAvatarManager = null;
_this.avatars = new Map();
_this.syncAvatarsLength = 0;
_this._room = e;
_this._usersStatistics();
_this.broadcast = _this.setupBroadcast();
e.on("skinChanged", function () {
_this.avatars.forEach(function (t) {
t.disconnected && _this.removeAvatar(t.userId, !0);
});
});
return _this;
}
_createClass(XverseAvatarManager, [{
key: "setupBroadcast",
value: function setupBroadcast() {
var _this2 = this;
return new Broadcast$1(this._room, /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) {
var t, r, n, o, a, _r$loop, s, l;
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
t = e.broadcastType, r = e.info;
if (!(t !== CoreBroadcastType.PlayAnimation)) {
_context.next = 3;
break;
}
return _context.abrupt("return");
case 3:
n = r.userId, o = r.animation, a = r.extra, _r$loop = r.loop, s = _r$loop === void 0 ? !1 : _r$loop, l = _this2.avatars.get(n);
_context.t0 = l && !l.isSelf;
if (!_context.t0) {
_context.next = 10;
break;
}
l.emit("animationStart", {
animationName: o,
extra: decodeURIComponent(a)
});
_context.next = 9;
return l == null ? void 0 : l._playAnimation(o, s);
case 9:
l.emit("animationEnd", {
animationName: o,
extra: decodeURIComponent(a)
});
case 10:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function (_x) {
return _ref.apply(this, arguments);
};
}());
}
}, {
key: "hideAll",
value: function hideAll() {
var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !0;
this.xAvatarManager.hideAll(e);
}
}, {
key: "showAll",
value: function showAll() {
var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !0;
this.xAvatarManager.showAll(e);
}
}, {
key: "init",
value: function () {
var _init = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2() {
var e, t;
return regenerator.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
this.xAvatarManager = this._room.sceneManager.avatarComponent;
_context2.prev = 1;
_context2.next = 4;
return this._room.modelManager.getApplicationConfig();
case 4:
e = _context2.sent;
t = e.avatars;
if (!t) {
_context2.next = 10;
break;
}
_context2.next = 9;
return avatarLoader.parse(this._room.sceneManager, t);
case 9:
return _context2.abrupt("return");
case 10:
return _context2.abrupt("return", Promise.reject("cannot find avatar config list"));
case 13:
_context2.prev = 13;
_context2.t0 = _context2["catch"](1);
return _context2.abrupt("return", (logger.error(_context2.t0), Promise.reject("avatar mananger init error!")));
case 16:
case "end":
return _context2.stop();
}
}
}, _callee2, this, [[1, 13]]);
}));
function init() {
return _init.apply(this, arguments);
}
return init;
}()
}, {
key: "handleAvatar",
value: function () {
var _handleAvatar2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e) {
var _this3 = this;
var r, t, n, o, _n, a;
return regenerator.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
if (!(this._room.viewMode === "simple" || !this._room.joined || !e.newUserStates)) {
_context3.next = 2;
break;
}
return _context3.abrupt("return");
case 2:
t = e.newUserStates;
if (((r = this._room._userAvatar) == null ? void 0 : r.isMoving) && this._room._userAvatar.motionType === MotionType.Run) {
n = t.filter(function (a) {
return a.userId === _this3._room.userId;
}), o = t.filter(function (a) {
return a.userId !== _this3._room.userId;
}).slice(0, 2);
t = n.concat(o);
}
if (e.getStateType === GetStateTypes.Event) {
this.syncAvatarsLength = (t || []).length;
_n = this._room.avatars.filter(function (s) {
return s.group == AvatarGroup.User;
});
_n.filter(function (s) {
return !(t != null && t.find(function (l) {
return l.userId == s.userId;
}));
}).forEach(function (s) {
_this3.removeAvatar(s.userId);
});
a = t.filter(function (s) {
return !_n.find(function (l) {
return l.userId == s.userId;
});
});
this._handleAvatar(a);
}
this._handleAvatar(t);
case 6:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function handleAvatar(_x2) {
return _handleAvatar2.apply(this, arguments);
}
return handleAvatar;
}()
}, {
key: "_handleAvatar",
value: function () {
var _handleAvatar3 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(e) {
var _this4 = this;
return regenerator.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
e == null || e.forEach(function (t) {
var n, o, a, s, l, u, c, h, f;
var r = _this4._room.userId === t.userId;
if (((n = t.event) == null ? void 0 : n.type) === SyncEventType.ET_RemoveVisitor) {
var d = (a = (o = t.event) == null ? void 0 : o.removeVisitorEvent) == null ? void 0 : a.removeVisitorEvent,
_ = JSON.parse(safeDecodeURIComponent(((l = (s = t.event) == null ? void 0 : s.removeVisitorEvent) == null ? void 0 : l.extraInfo) || "")),
g = _.code,
m = _.msg;
d === RemoveVisitorType.RVT_ChangeToObserver ? _this4._room.audienceViewModeHook() : d === RemoveVisitorType.RVT_MoveOutOfTheRoom && _this4._room.leave(), _this4._room.emit("visitorStatusChanged", {
code: g,
msg: m
});
}
if (t.event && [SyncEventType.Appear, SyncEventType.Reset].includes(t.event.type) || !t.event) {
var _d = _this4.avatars.get(t.userId);
if (t.playerState.avatarId && (_d == null ? void 0 : _d.avatarId) !== t.playerState.avatarId && (_d = void 0, _this4.removeAvatar(t.userId)), _d) {
if (_d.disconnected && _d.setConnectionStatus(!1), (u = t.event) != null && u.id && _this4._room.actionsHandler.confirmEvent(t.event.id), t.playerState.nickName && (_d == null || _d._setNickname(t.playerState.nickName)), t.playerState.avatarComponents && !_d.isSelf && _d.xAvatar) {
var _2 = safeParseComponents(t.playerState.avatarComponents);
_d._changeComponents({
avatarComponents: _2,
mode: ChangeComponentsMode.Preview
});
}
} else {
var _t$playerState$player = t.playerState.player,
_3 = _t$playerState$player.position,
_g = _t$playerState$player.angle,
_m = t.playerState.avatarId,
v = t.playerState.prioritySync,
y = safelyJsonParse(t.playerState.extra);
if (!_m) return;
var b = safeParseComponents(t.playerState.avatarComponents),
T = safeDecodeURIComponent(t.playerState.nickName),
C = _this4.calculatePriority(t.userId, y);
_this4.addAvatar({
userId: t.userId,
isHost: t.playerState.isHost,
nickname: T,
avatarPosition: _3,
avatarRotation: _g,
avatarScale: t.playerState.avatarSize,
avatarId: _m,
avatarComponents: t.playerState.person === Person.First ? [] : b,
priority: C,
group: AvatarGroup.User,
prioritySync: v,
extraInfo: y
}).then(function () {
var A;
(A = t.event) != null && A.id && _this4._room.actionsHandler.confirmEvent(t.event.id), _this4.updateAvatarPositionAndRotation(t), r && (_this4.xAvatarManager.setMainAvatar(t.userId), _this4._room.emit("userAvatarLoaded"), logger.info("userAvatarLoaded"));
}).catch(function (A) {
r && (_this4.xAvatarManager.setMainAvatar(t.userId), _this4._room.emit("userAvatarFailed", {
error: A
}), logger.error("userAvatarFailed", A));
});
}
}
if (t.event && SyncEventType.Disappear === t.event.type && ((c = t == null ? void 0 : t.event) != null && c.id && _this4._room.actionsHandler.confirmEvent(t.event.id), _this4.removeAvatar(t.userId)), t.event && [SyncEventType.Move, SyncEventType.ChangeRenderInfo].includes(t.event.type) || !t.event) {
(h = t == null ? void 0 : t.event) != null && h.id && _this4._room.actionsHandler.confirmEvent(t.event.id);
var _d2 = _this4.avatars.get(t.userId);
_d2 && _d2.withModel && !_d2.isLoading && _this4.updateAvatarPositionAndRotation(t);
}
if (!r && ((f = t.event) == null ? void 0 : f.type) === SyncEventType.Rotate) {
var _d3 = _this4.avatars.get(t.userId);
_d3.statusSyncQueue.append({
type: QueueType.Rotate,
action: function action() {
return _d3.statusSync(t);
}
});
}
});
case 1:
case "end":
return _context4.stop();
}
}
}, _callee4);
}));
function _handleAvatar(_x3) {
return _handleAvatar3.apply(this, arguments);
}
return _handleAvatar;
}()
}, {
key: "calculatePriority",
value: function calculatePriority(e, t) {
var n;
return e === this._room.userId ? EAvatarRelationRank.Self : (n = this._room.options.firends) != null && n.includes(e) ? EAvatarRelationRank.Friend : EAvatarRelationRank.Stranger;
}
}, {
key: "updateAvatarPositionAndRotation",
value: function updateAvatarPositionAndRotation(e) {
var t, r;
if ((t = e == null ? void 0 : e.playerState) != null && t.player) {
var _e$playerState$player = e.playerState.player,
n = _e$playerState$player.position,
o = _e$playerState$player.angle;
var a = this.avatars.get(e.userId);
if (!a) return;
if (n = positionPrecisionProtect(n), o = rotationPrecisionProtect(o), a.isSelf && !this._room.networkController.rtcp.workers.inPanoMode && (a.setPosition(n), a.setRotation(o)), e.event && (((r = e.event) == null ? void 0 : r.points.length) || 0) > 1 && !a.isSelf && a.statusSyncQueue.append({
type: QueueType.Move,
action: function action() {
return a.statusSync(e);
}
}), e.renderInfo && a.isSelf) {
var _e$renderInfo = e.renderInfo,
s = _e$renderInfo.isMoving,
l = _e$renderInfo.isRotating;
this._updateAvatarMovingStatus({
id: e.userId,
isMoving: !!s,
isRotating: !!l
});
}
}
}
}, {
key: "addAvatar",
value: function () {
var _addAvatar = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5(e) {
var t, r, n, o, a, s, _e$avatarComponents, l, u, _e$group, c, _e$avatarScale, h, f, d, _, g, v, y, b, T, C;
return regenerator.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
t = e.userId, r = e.isHost, n = e.avatarPosition, o = e.avatarId, a = e.avatarRotation, s = e.nickname, _e$avatarComponents = e.avatarComponents, l = _e$avatarComponents === void 0 ? [] : _e$avatarComponents, u = e.priority, _e$group = e.group, c = _e$group === void 0 ? AvatarGroup.Npc : _e$group, _e$avatarScale = e.avatarScale, h = _e$avatarScale === void 0 ? DEFAULT_AVATAR_SCALE : _e$avatarScale, f = e.extraInfo, d = e.prioritySync, _ = t === this._room.userId;
g = this.avatars.get(t);
if (!g) {
_context5.next = 4;
break;
}
return _context5.abrupt("return", Promise.resolve(g));
case 4:
if (!(g = new xe.subAvatar({
userId: t,
isHost: r,
isSelf: _,
room: this._room,
avatarComponents: l,
avatarId: o,
nickname: s,
group: c
}), this.avatars.set(t, g), !g.withModel)) {
_context5.next = 6;
break;
}
return _context5.abrupt("return", (g.isLoading = !1, g.avatarLoadedHook(), this._room.emit("avatarChanged", {
avatars: this._room.avatars
}), g));
case 6:
_context5.next = 8;
return this._room.modelManager.getAvatarModelList();
case 8:
v = _context5.sent.find(function (b) {
return b.id === o;
});
y = Date.now();
if (v) {
_context5.next = 12;
break;
}
return _context5.abrupt("return", (this._room.emit("avatarChanged", {
avatars: this._room.avatars
}), this.avatars.delete(t), Promise.reject("no such avatar model with id: ".concat(o))));
case 12:
_context5.prev = 12;
_context5.next = 15;
return avatarComponentsModify(v, l);
case 15:
b = _context5.sent;
b = b.filter(function (A) {
return A.type != "pendant";
});
_context5.next = 19;
return avatarComponentsParser(v, b);
case 19:
T = _context5.sent;
_context5.next = 22;
return this.xAvatarManager.loadAvatar({
id: t,
avatarType: o,
priority: u,
avatarManager: this.xAvatarManager,
assets: T,
status: {
avatarPosition: n,
avatarRotation: a,
avatarScale: h
}
})._timeout(8e3, new TimeoutError$1("loadAvatar timeout(8s)"));
case 22:
C = _context5.sent;
return _context5.abrupt("return", (C.setPickBoxScale(t === this._room.userId ? 0 : 1), g.xAvatar = C, g.setScale(h), g.extraInfo = f, g.priority = u, g.isLoading = !1, g.prioritySync = !!d, g._playAnimation("Idle", !0, !0), g.avatarLoadedHook(), this._room.emit("avatarChanged", {
avatars: this._room.avatars
}), s && g._setNickname(s), t === this._room.userId && (logger.infoAndReportMeasurement({
metric: "avatarLoadDuration",
startTime: y,
group: "costs"
}), logger.infoAndReportMeasurement({
metric: "avatarLoadAt",
startTime: this._room._startTime,
group: "costs"
})), g));
case 26:
_context5.prev = 26;
_context5.t0 = _context5["catch"](12);
return _context5.abrupt("return", (g.isLoading = !1, this._room.emit("avatarChanged", {
avatars: this._room.avatars
}), logger.error(_context5.t0), Promise.reject(_context5.t0)));
case 29:
case "end":
return _context5.stop();
}
}
}, _callee5, this, [[12, 26]]);
}));
function addAvatar(_x4) {
return _addAvatar.apply(this, arguments);
}
return addAvatar;
}()
}, {
key: "removeAvatar",
value: function removeAvatar(e) {
var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1;
var r = this.avatars.get(e);
if (!!r) {
if (r.removeWhenDisconnected || t) {
r.xAvatar && this.xAvatarManager.deleteAvatar(r.xAvatar), this.avatars.delete(e), this._room.emit("avatarChanged", {
avatars: this._room.avatars
});
return;
}
r.setConnectionStatus(!0);
}
}
}, {
key: "clearOtherUsers",
value: function clearOtherUsers() {
var _this5 = this;
this.avatars.forEach(function (e) {
!e.isSelf && e.group === AvatarGroup.User && _this5.removeAvatar(e.userId);
});
}
}, {
key: "_updateAvatarMovingStatus",
value: function () {
var _updateAvatarMovingStatus2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6(e) {
var t, r, n, o, a, _a;
return regenerator.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
t = e.id, r = e.isMoving, n = e.isRotating, o = this.avatars.get(t);
if (!!o) {
if (o.isRotating !== n) {
o.isRotating = n;
a = "Idle";
n && (a = "Walking", o.motionType === MotionType.Run && (a = "Running")), o._playAnimation(a, !0, !0), logger.infoAndReportMeasurement({
startTime: Date.now(),
value: 0,
metric: n ? "userAvatarStartRotating" : "userAvatarStopRotating",
extra: {
motionType: o.motionType,
moveToExtra: this._room.moveToExtra
}
});
}
if (o.isMoving !== r) {
o.isMoving = r;
_a = "Idle";
r && (_a = "Walking", o.motionType === MotionType.Run && (_a = "Running")), r ? (o.avatarStartMovingHook(), o.emit("startMoving", {
target: o,
extra: this._room.moveToExtra
})) : (o.avatarStopMovingHook(), o.emit("stopMoving", {
target: o,
extra: this._room.moveToExtra
})), o._playAnimation(_a, !0, !0), logger.infoAndReportMeasurement({
startTime: Date.now(),
value: 0,
metric: r ? "userAvatarStartMoving" : "userAvatarStopMoving",
extra: {
motionType: o.motionType,
moveToExtra: this._room.moveToExtra
}
});
}
}
case 2:
case "end":
return _context6.stop();
}
}
}, _callee6, this);
}));
function _updateAvatarMovingStatus(_x5) {
return _updateAvatarMovingStatus2.apply(this, arguments);
}
return _updateAvatarMovingStatus;
}()
}, {
key: "_usersStatistics",
value: function _usersStatistics() {
var _this6 = this;
this.on("userAvatarLoaded", function () {
window.setInterval(function () {
var e = _this6._room.avatars.filter(function (r) {
return r.group === AvatarGroup.User;
}).length || 0,
t = _this6._room.avatars.filter(function (r) {
return r.group === AvatarGroup.User && r.isRender;
}).length || 0;
_this6._room.stats.assign({
userNum: e,
syncUserNum: _this6.syncAvatarsLength,
renderedUserNum: t
});
}, 3e3);
});
}
}]);
return XverseAvatarManager;
}(EventEmitter);
var PathManager = /*#__PURE__*/function () {
function PathManager() {
_classCallCheck(this, PathManager);
this.currentArea = '';
this.currentPathName = '';
this.currentAttitude = '';
this.speed = 0;
}
_createClass(PathManager, [{
key: "getSpeed",
value: function getSpeed(e) {
var t = {
guangchang: {
[MotionType.Walk]: 17,
[MotionType.Run]: 51
},
tower: {
[MotionType.Walk]: 12.5,
[MotionType.Run]: 25
},
zhiboting: {
[MotionType.Walk]: 12.5,
[MotionType.Run]: 25
},
youxiting: {
[MotionType.Walk]: 12.5,
[MotionType.Run]: 25
},
diqing: {
[MotionType.Walk]: 12.5,
[MotionType.Run]: 25
}
},
r = t[this.currentArea] || t.guangchang;
return this.speed = r[e] * 30, this.speed;
}
}]);
return PathManager;
}();
var CameraStates = {
Normal: 0,
ItemView: 1,
CGView: 2,
PathView: 3
};
var Person$1 = {
Third: 0,
First: 1
};
function _createSuper$b(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$b(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$b() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var Camera = /*#__PURE__*/function (_EventEmitter) {
_inherits(Camera, _EventEmitter);
var _super = _createSuper$b(Camera);
function Camera(e) {
var _this;
_classCallCheck(this, Camera);
_this = _super.call(this);
_this.initialFov = 0;
_this._state = CameraStates.Normal;
_this._person = Person$1.Third;
_this._cameraFollowing = !0;
_this._room = e;
return _this;
}
_createClass(Camera, [{
key: "checkPointOnLeftOrRight",
value: function checkPointOnLeftOrRight(e) {
var t = ue4Position2Xverse(e);
if (!t || this.checkPointInView(e)) return;
var o = this._room.scene.activeCamera;
if (!o) return;
var a = [o.target.x, o.target.y, o.target.z],
s = [o.position.x, o.position.y, o.position.z],
l = t.x,
u = t.y,
c = t.z,
h = calNormVector(s, a),
f = calNormVector(s, [l, u, c]);
return vectorCrossMulti(h, f) < 0 ? Direction.Right : Direction.Left;
}
}, {
key: "checkPointInView",
value: function checkPointInView(e, t, r) {
var n = ue4Position2Xverse({
x: e,
y: t,
z: r
});
if (!n) return !1;
for (var o = 0; o < 6; o++) {
if (this._room.scene.frustumPlanes[o].dotCoordinate(n) < 0) return !1;
}
return !0;
}
}, {
key: "person",
get: function get() {
return this._person;
}
}, {
key: "state",
get: function get() {
return this._state;
}
}, {
key: "pose",
get: function get() {
return this._room.currentClickingState.camera;
}
}, {
key: "cameraFollowing",
get: function get() {
return this._cameraFollowing;
},
set: function set(e) {
logger.info("cameraFollowing setter", e), this.setCameraFollowing({
isFollowHost: e
});
}
}, {
key: "setCameraFollowing",
value: function setCameraFollowing(_ref) {
_ref.isFollowHost;
}
}, {
key: "handleRenderInfo",
value: function handleRenderInfo(e) {
var t = e.renderInfo.cameraStateType,
r = this._room.sceneManager;
if (t !== this._state && (this._state = 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()), this.emit("stateChanged", {
state: t
})), this._room.isHost) return;
var n = e.playerState.isFollowHost;
!!n !== this._cameraFollowing && (this._cameraFollowing = !!n, this.emit("cameraFollowingChanged", {
cameraFollowing: !!n
}));
}
}, {
key: "setCameraState",
value: function setCameraState(_ref2) {
var e = _ref2.state;
if (this._state === e) {
logger.warn("You are already in ".concat(CameraStates[e], " camera state"));
return;
}
e === CameraStates.Normal || this._state === CameraStates.ItemView && logger.warn("CloseUp camera state can only be triggerd by room internally");
}
}, {
key: "turnToFace",
value: function turnToFace(_ref3) {
var _ref3$extra = _ref3.extra,
e = _ref3$extra === void 0 ? "" : _ref3$extra,
_ref3$offset = _ref3.offset,
t = _ref3$offset === void 0 ? 0 : _ref3$offset;
var r = {
action_type: Actions.TurnToFace,
turn_to_face_action: {
offset: t
}
};
return this.emit("viewChanged", {
extra: e
}), this._room.actionsHandler.sendData({
data: r
});
}
}, {
key: "isInDefaultView",
value: function isInDefaultView() {
if (!this._room.isHost) {
logger.warn("It is recommended to call the function on the host side");
return;
}
if (!this._room._currentClickingState) return logger.error("CurrentState should not be empty"), !1;
var _this$_room$_currentC = this._room._currentClickingState,
e = _this$_room$_currentC.camera,
t = _this$_room$_currentC.player;
return Math.abs(t.angle.yaw - 180 - e.angle.yaw) % 360 <= 4;
}
}, {
key: "screenShot",
value: function () {
var _screenShot = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(_ref4) {
var e, _ref4$autoSave, t, r, n, o;
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
e = _ref4.name, _ref4$autoSave = _ref4.autoSave, t = _ref4$autoSave === void 0 ? !1 : _ref4$autoSave;
r = this._room.scene.getEngine(), n = this._room.scene.activeCamera;
_context.prev = 2;
this._room.sceneManager.setImageQuality(EImageQuality.high);
_context.next = 6;
return CreateScreenshotAsync(r, n, {
precision: 1
});
case 6:
o = _context.sent;
return _context.abrupt("return", (this._room.sceneManager.setImageQuality(EImageQuality.low), t === !0 && downloadFileByBase64(o, e), Promise.resolve(o)));
case 10:
_context.prev = 10;
_context.t0 = _context["catch"](2);
return _context.abrupt("return", (this._room.sceneManager.setImageQuality(EImageQuality.low), Promise.reject(_context.t0)));
case 13:
case "end":
return _context.stop();
}
}
}, _callee, this, [[2, 10]]);
}));
function screenShot(_x) {
return _screenShot.apply(this, arguments);
}
return screenShot;
}()
}, {
key: "changeToFirstPerson",
value: function changeToFirstPerson(e, t, r) {
var _this2 = this;
var n = e.camera,
o = e.player,
a = e.attitude,
s = e.areaName,
l = e.pathName;
return this._room.actionsHandler.requestPanorama({
camera: n,
player: o,
attitude: a,
areaName: s,
pathName: l
}, t, r).then(function () {
_this2._room.networkController.rtcp.workers.changePanoMode(!0);
var _ref5 = o || {},
u = _ref5.position,
c = _ref5.angle;
_this2._room.sceneManager.cameraComponent.changeToFirstPersonView({
position: u,
rotation: c
});
});
}
}, {
key: "setPerson",
value: function setPerson(e) {
var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
camera: this._room._currentClickingState.camera,
player: this._room._currentClickingState.player
};
var r = Date.now();
return this._setPerson(e, t).then(function (n) {
return logger.infoAndReportMeasurement({
tag: Person$1[e],
startTime: r,
metric: "setPerson"
}), n;
}).catch(function (n) {
return logger.infoAndReportMeasurement({
tag: Person$1[e],
startTime: r,
metric: "setPerson",
error: n
}), Promise.reject(n);
});
}
}, {
key: "_setPerson",
value: function _setPerson(e) {
var _this3 = this;
var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
camera: this._room._currentClickingState.camera,
player: this._room._currentClickingState.player
};
return e !== Person$1.First && e !== Person$1.Third ? Promise.reject("invalid person " + e) : !t.camera || !t.player ? Promise.reject(new ParamError("wrong camera or player")) : e === Person$1.First ? this._room.panorama.access({
camera: t.camera,
player: t.player,
tag: "setPerson"
}).then(function () {
var o, a;
_this3._person = e, (o = _this3._room._userAvatar) == null || o.hide();
var _ref6 = ((a = _this3._room.currentClickingState) == null ? void 0 : a.camera) || {},
r = _ref6.position,
n = _ref6.angle;
!r || !n || _this3._room.sceneManager.cameraComponent.changeToFirstPersonView({
position: r,
rotation: n
});
}) : this._room.panorama.exit({
camera: t.camera,
player: t.player
}).then(function () {
var r, n;
_this3._person = e, (r = _this3._room._userAvatar) != null && r.xAvatar && ((n = _this3._room._userAvatar) == null || n.xAvatar.show());
});
}
}, {
key: "setCameraPose",
value: function setCameraPose(e) {
this._room.sceneManager.cameraComponent.setCameraPose({
position: e.position,
rotation: e.angle
});
}
}, {
key: "setMainCameraRotationLimit",
value: function setMainCameraRotationLimit(e) {
var t = e.limitAxis,
r = e.limitRotation;
this._room.sceneManager.cameraComponent.setMainCameraRotationLimit(t, r);
}
}]);
return Camera;
}(EventEmitter);
function _createSuper$a(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$a(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$a() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var numberFormat = new Intl.NumberFormat(window.navigator.language, {
maximumFractionDigits: 0
});
var Stats = /*#__PURE__*/function (_EventEmitter) {
_inherits(Stats, _EventEmitter);
var _super = _createSuper$a(Stats);
function Stats(e) {
var _this;
_classCallCheck(this, Stats);
_this = _super.call(this);
_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(function () {
var t, r, n;
_this._disabled || _this.onStats((n = (r = (t = e.networkController) == null ? void 0 : t.rtcp) == null ? void 0 : r.workers) == null ? void 0 : n.uploadDataToServer());
}, 1e3), _this._netInterval = window.setInterval(function () {
_this.getIsWeakNet();
}, NET_INTERVAL * 1e3);
return _this;
}
_createClass(Stats, [{
key: "isShow",
get: function get() {
return this._show;
}
}, {
key: "assign",
value: function assign(e) {
Object.assign(this._extraStats, e), ((e == null ? void 0 : e.hb) || (e == null ? void 0 : e.rtt)) && this.startStatsNetSamples();
}
}, {
key: "appendExternalStats",
value: function appendExternalStats(e) {
var _this2 = this;
var t = {};
if (!e || typeof e != "object") {
console.warn("appendExternalStats should be plain object");
return;
}
Object.keys(e).forEach(function (r) {
Object.prototype.hasOwnProperty.call(_this2._aggregatedStats, r) ? console.warn("".concat(r, " is duplicate with internal stats")) : t[r] = e[r];
}), !(Object.keys(t).length > 10) && (this.externalStats = t);
}
}, {
key: "getRtt",
value: function getRtt() {
var e = this._extraStats.rtt;
return typeof e != "number" ? 0 : e > 999 ? 999 : e;
}
}, {
key: "enable",
value: function enable() {
this._disabled = !1;
}
}, {
key: "disable",
value: function disable() {
this._disabled = !0;
}
}, {
key: "disableNet",
value: function disableNet() {
this._netInterval && window.clearInterval(this._netInterval);
}
}, {
key: "show",
value: function show() {
this._show = !0, this._render();
}
}, {
key: "hide",
value: function hide() {
this._show = !1, this._displayElement && document.body.removeChild(this._displayElement), this._displayElement = null;
}
}, {
key: "getIsWeakNet",
value: function getIsWeakNet() {
var _this3 = this;
var e = !1;
var t = this._networkSamples.length - 1;
if (t < 0) return;
var r = this._networkSamples[t].time,
n = this._networkSamples[0].time,
o = r - n,
a = 1e3 * (DURATION - 2);
if (o < a) return;
var s = this._networkSamples.map(function (g) {
return _this3.isNetDelay(g, "rtt");
}),
l = this._networkSamples.map(function (g) {
return _this3.isNetDelay(g, "hb");
}),
u = s.reduce(function (g, m) {
return g + m;
}, 0),
c = l.reduce(function (g, m) {
return g + m;
}, 0),
h = Math.floor(u / this._networkSamples.length) * 100,
f = Math.floor(c / this._networkSamples.length) * 100,
d = 70;
(h >= d || f >= d) && (e = !0);
var _ = this.room.viewMode === "observer" || this.room.viewMode === "serverless";
e && !_ && (logger.infoAndReportMeasurement({
metric: "weakNetwork",
startTime: Date.now(),
extra: {
msg: this._networkSamples.slice(20),
netDelayRTTValues: u,
netDelayHBValues: c
}
}), this.emit("weakNetwork"));
}
}, {
key: "startStatsNetSamples",
value: function startStatsNetSamples() {
var _this$_extraStats = this._extraStats,
e = _this$_extraStats.rtt,
t = _this$_extraStats.hb;
if (e || t) {
var r = {
rtt: e,
hb: t,
time: new Date().getTime()
};
this._networkSamples.push(r);
var n = this._networkSamples.length - 1;
if (n < 0) return;
var o = this._networkSamples[n].time,
a = 1e3 * DURATION;
this._networkSamples = this._networkSamples.filter(function (s) {
return s.time > o - a;
});
}
}
}, {
key: "isNetDelay",
value: function isNetDelay(e, t) {
return t === "rtt" ? e.rtt > RTT_MAX_VALUE ? 1 : 0 : t === "hb" && e.hb > HB_MAX_VALUE ? 1 : 0;
}
}, {
key: "getPreciesTimer",
value: function getPreciesTimer(e, t) {
var r = t * 1e3,
n = new Date().getTime();
var o = 0;
o++;
var a = new Date().getTime() - (n + o * 1e3),
s = r - a,
l = setTimeout(function () {
clearTimeout(l), e();
}, s);
}
}, {
key: "_render",
value: function _render() {
var c, h, f, d, _, g, m, v, y, b, T, C, A, S, P, R, M, x, I, w;
if (!this._aggregatedStats) return;
this._displayElement || (this._displayElement = document.createElement("div"), this._displayElement.style.position = "absolute", this._displayElement.style.top = "10px", this._displayElement.style.left = "200px", this._displayElement.style.width = "200px", this._displayElement.style.backgroundColor = "rgba(0,0,0,.5)", this._displayElement.style.color = "white", this._displayElement.style.textAlign = "left", this._displayElement.style.fontSize = "8px", this._displayElement.style.lineHeight = "10px", document.body.appendChild(this._displayElement));
var e = [],
t = Date.now() - this.constructedTime,
r = Math.floor(t / 1e3 % 60),
n = Math.floor(t / (1e3 * 60) % 60),
o = Math.floor(t / (1e3 * 60 * 60) % 24),
a = o < 10 ? "0" + o.toString() : o.toString(),
s = n < 10 ? "0" + n : n,
l = r < 10 ? "0" + r : r;
e.push({
key: new Date(Math.floor(this._aggregatedStats.timestamp || 0)).toLocaleString("en-GB"),
value: a + ":" + s + ":" + l
}), e.push({
key: "rtt: " + this._extraStats.rtt + " hb: " + this._extraStats.hb,
value: "FPS: " + this._extraStats.fps + " avatar: " + ((c = this.room._userAvatar) == null ? void 0 : c.state)
}), e.push({
key: "SDK: " + Xverse$1.SUB_PACKAGE_VERSION,
value: "ENGINE:" + VERSION$1 + " uid:" + this._extraStats.userId
}), e.push({
key: "\u540C\u6B65/\u6709\u6548/\u663E\u793A\u73A9\u5BB6",
value: "".concat(this._extraStats.syncUserNum || 0, "/").concat(this._extraStats.userNum || 0, "/").concat(this._extraStats.renderedUserNum || 0)
}), e.push({
key: "media/meta bitrate(kbps)",
value: numberFormat.format(this._aggregatedStats.mediaBitrate || 0) + "/" + numberFormat.format(this._aggregatedStats.metaBitrate || 0)
}), e.push({
key: ":----------------Decoding---------------",
value: ""
}), e.push({
key: "-max/avg decodeTime(ms)",
value: numberFormat.format(this._aggregatedStats.decodeTimeMaxFrame || 0) + "/" + numberFormat.format(this._aggregatedStats.decodeTimePerFrame || 0)
}), e.push({
key: "-frmAwait/Lost/Drop",
value: numberFormat.format(this._aggregatedStats.framesAwait || 0) + "/" + numberFormat.format(this._aggregatedStats.packetsLost || 0) + "/" + numberFormat.format(this._aggregatedStats.packetsDrop || 0) + "/" + numberFormat.format(this._aggregatedStats.updateDropFrame) || 0
}), e.push({
key: ":----------------FrameLoop-------------",
value: ""
}), e.push({
key: "interval(max/avg/>40)",
value: (((h = this._extraStats.maxFrameTime) == null ? void 0 : h.toFixed(1)) || 0) + "/" + (((f = this._extraStats.avgFrameTime) == null ? void 0 : f.toFixed(0)) || 0) + "/" + this._extraStats.engineSloppyCnt
}), e.push({
key: "systemStuck",
value: this._extraStats.systemStuckCnt
}), e.push({
key: "--update",
value: (this._aggregatedStats.maxGraphicTime.toFixed(1) || 0) + "/" + (((d = this._aggregatedStats.averageGraphicTime) == null ? void 0 : d.toFixed(0)) || 0)
}), e.push({
key: "--timeout",
value: (((_ = this._extraStats.maxTimeoutTime) == null ? void 0 : _.toFixed(1)) || 0) + "/" + ((g = this._extraStats.avgTimeoutTime) == null ? void 0 : g.toFixed(0)) || 0
}), e.push({
key: "--render",
value: (((m = this._extraStats.maxRenderFrameTime) == null ? void 0 : m.toFixed(1)) || 0) + "/" + (((v = this._extraStats.renderFrameTime) == null ? void 0 : v.toFixed(0)) || 0)
}), e.push({
key: "---anim/regBR/clip(avg ms)",
value: (this._extraStats.animationTime.toFixed(2) || 0) + " / " + (this._extraStats.registerBeforeRenderTime.toFixed(2) || 0) + " / " + (this._extraStats.meshSelectTime.toFixed(2) || 0)
}), e.push({
key: "---anim/regBR/clip(max ms)",
value: (this._extraStats.maxAnimationTime.toFixed(2) || 0) + " / " + (this._extraStats.maxRegisterBeforeRenderTime.toFixed(2) || 0) + " / " + (this._extraStats.maxMeshSelectTime.toFixed(2) || 0)
}), e.push({
key: "---rTR/drC/regAF(avg ms)",
value: (this._extraStats.renderTargetRenderTime.toFixed(2) || 0) + " / " + (this._extraStats.drawcallTime.toFixed(2) || 0) + " / " + (this._extraStats.registerAfterRenderTime.toFixed(2) || 0)
}), e.push({
key: "---rTR/drC/regAF(max ms)",
value: (this._extraStats.maxRenderTargetRenderTime.toFixed(2) || 0) + " / " + (this._extraStats.maxDrawcallTime.toFixed(2) || 0) + " / " + (this._extraStats.maxRegisterAfterRenderTime.toFixed(2) || 0)
}), e.push({
key: "--tri/drC/pati/bones/anim(Num)",
value: (this._extraStats.triangle || 0) + " / " + (this._extraStats.drawcall.toFixed(0) || 0) + " / " + (this._extraStats.activeParticles.toFixed(0) || 0) + " / " + (this._extraStats.activeBones.toFixed(0) || 0) + " / " + (this._extraStats.activeAnimation.toFixed(0) || 0)
}), e.push({
key: "--rootN/mesh/geo/tex/mat(Num)",
value: (this._extraStats.totalRootNodes.toFixed(0) || 0) + " / " + (this._extraStats.totalMeshes.toFixed(0) || 0) + " / " + (this._extraStats.totalGeometries.toFixed(0) || 0) + " / " + (this._extraStats.totalTextures.toFixed(0) || 0) + " / " + (this._extraStats.totalMaterials.toFixed(0) || 0)
}), e.push({
key: "--registerBF/AF(Num)",
value: (this._extraStats.registerBeforeCount.toFixed(0) || 0) + " / " + (this._extraStats.registerAfterCount.toFixed(0) || 0)
}), e.push({
key: ":----------------Rotation-------------------",
value: ""
}), e.push({
key: "Total(ms/miss)",
value: (((y = this._aggregatedStats.avgOverallTime) == null ? void 0 : y.toFixed(2)) || 0) + "/" + (this._aggregatedStats.responseMissPs + this._aggregatedStats.processMissPs + this._aggregatedStats.displayMissPs)
}), e.push({
key: "--rotateRsp",
value: (((b = this._aggregatedStats.avgResponseTime) == null ? void 0 : b.toFixed(1)) || 0) + "/" + this._aggregatedStats.responseMissPs
}), e.push({
key: "--rotateProc",
value: (((T = this._aggregatedStats.avgProcessTime) == null ? void 0 : T.toFixed(1)) || 0) + "/" + this._aggregatedStats.processMissPs
}), e.push({
key: "--rotateShow",
value: (((C = this._aggregatedStats.avgDisplayTime) == null ? void 0 : C.toFixed(1)) || 0) + "/" + this._aggregatedStats.displayMissPs
}), ((A = this.room._userAvatar) == null ? void 0 : A.state) == "moving", e.push({
key: ":----------------Move----------------------",
value: ""
}), e.push({
key: "-startDelay",
value: (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.moveResponseDelay || 0 : this._aggregatedStats.flyResponseDelay || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.moveProcessDelay || 0 : this._aggregatedStats.flyProcessDelay || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.moveDisplayDelay || 0 : this._aggregatedStats.flyDisplayDelay || 0)
}), (((S = this.room._userAvatar) == null ? void 0 : S.state) == "moving" || this._aggregatedStats.moveEvent == "GetOnAirship" || this._aggregatedStats.moveEvent == "GetOnVehicle") && e.push({
key: "-srvInterFrm(max/avg)",
value: (this._aggregatedStats.maxServerDiff || 0) + "/" + (this._aggregatedStats.avgServerDiff.toFixed(1) || 0)
}), e.push({
key: "-interFrameDelay",
value: "(max/avg/jank)"
}), e.push({
key: "--toDisplay",
value: (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.maxDisplayMoveDiff || 0 : this._aggregatedStats.maxDisplayFlyDiff || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.avgDisplayMoveDiff.toFixed(1) || 0 : this._aggregatedStats.avgDisplayFlyDiff.toFixed(1) || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? ((P = this._aggregatedStats.moveDisplayJank) == null ? void 0 : P.toFixed(3)) || 0 : ((R = this._aggregatedStats.flyDisplayJank) == null ? void 0 : R.toFixed(3)) || 0)
}), e.push({
key: "--received",
value: (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.maxResponseMoveDiff || 0 : this._aggregatedStats.maxResponseFlyDiff || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.avgResponseMoveDiff.toFixed(1) || 0 : this._aggregatedStats.avgResponseFlyDiff.toFixed(1) || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? ((M = this._aggregatedStats.moveResponseJank) == null ? void 0 : M.toFixed(3)) || 0 : ((x = this._aggregatedStats.flyResponseJank) == null ? void 0 : x.toFixed(3)) || 0)
}), e.push({
key: "--decoded",
value: (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.maxProcessMoveDiff || 0 : this._aggregatedStats.maxProcessFlyDiff || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.avgProcessMoveDiff.toFixed(1) || 0 : this._aggregatedStats.avgProcessFlyDiff.toFixed(1) || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? ((I = this._aggregatedStats.moveProcessJank) == null ? void 0 : I.toFixed(3)) || 0 : ((w = this._aggregatedStats.flyProcessJank) == null ? void 0 : w.toFixed(3)) || 0)
}), e.push({
key: ":----------------DevInfo-----------------",
value: ""
}), e.push({
key: "sd",
value: (this._aggregatedStats.sdMoveResponseLongTime.toFixed(1) || 0) + "/" + (this._aggregatedStats.sdMoveProcessLongTime.toFixed(1) || 0) + "/" + (this._aggregatedStats.sdMoveDisplayLongTime.toFixed(1) || 0)
}), e.push({
key: "----hardwareInfo",
value: this._extraStats.hardwareInfo
});
var u = "";
for (var _i = 0, _e = e; _i < _e.length; _i++) {
var O = _e[_i];
u += "
".concat(O.key, ": ").concat(O.value, "
");
}
this._displayElement.innerHTML = u;
}
}, {
key: "onStats",
value: function onStats(e) {
var _this4 = this;
var n;
if (!e) return;
var t = {},
r = this;
r._aggregatedStats || (r._aggregatedStats = {}), t.timestamp = e.timestamp, t.mediaBytesReceived = e.mediaBytesReceived, t.metaBytesReceived = e.metaBytesReceived, t.packetsLost = e.packetsLost, t.frameHeight = e.frameHeight, t.frameWidth = e.frameWidth, t.framesReceivedUI = e.framesReceived, t.framesReceived = e.framesReceivedWorker, t.framesDecoded = e.framesDecoded, t.framesEmited = e.framesEmited, t.decodeTimePerFrame = e.decodeTimePerFrame, t.decodeTimeMaxFrame = e.decodeTimeMaxFrame, t.packetsDrop = e.packetsDrop, t.framesAwait = e.framesAwait, t.updateDropFrame = e.updateDropFrame, t.firstMediaArraval = e.firstMediaArraval, t.firstYUVDecoded = e.firstYUVDecoded, t.firstRender = e.firstRender, t.returnFrames = e.returnFrames, t.sendOutBuffer = e.sendOutBuffer, t.averageGraphicTime = e.averageGraphicTime, t.maxGraphicTime = e.maxGraphicTime, t.jankTimes = e.jankTimes, t.bigJankTimes = e.bigJankTimes, t.decodeJankTimes = e.decodeJankTimes, t.bigDecodeJankTimes = e.bigDecodeJankTimes, t.serverFrameFast = e.serverFrameFast, t.serverFrameSlow = e.serverFrameSlow, t.clientFrameFast = e.clientFrameFast, t.clientFrameSlow = e.clientFrameSlow, t.rtcMessageReceived = e.rtcMessageReceived, t.rtcBytesReceived = e.rtcBytesReceived, t.receiveIframes = e.receiveIframes, t.decodeIframes = e.decodeIframes, t.avgResponseTime = e.avgResponseTime, t.avgProcessTime = e.avgProcessTime, t.avgDisplayTime = e.avgDisplayTime, t.avgOverallTime = e.avgOverallTime, t.overallTimeCount = e.overallTimeCount, t.responseMiss = e.responseMiss, t.processMiss = e.processMiss, t.displayMiss = e.displayMiss, t.avgResponseMoveDiff = e.avgResponseMoveDiff, t.avgProcessMoveDiff = e.avgProcessMoveDiff, t.avgDisplayMoveDiff = e.avgDisplayMoveDiff, t.maxResponseMoveDiff = e.maxResponseMoveDiff, t.maxProcessMoveDiff = e.maxProcessMoveDiff, t.maxDisplayMoveDiff = e.maxDisplayMoveDiff, t.moveResponseDelay = e.moveResponseDelay, t.moveProcessDelay = e.moveProcessDelay, t.moveDisplayDelay = e.moveDisplayDelay, t.moveResponseJank = e.moveResponseJank, t.moveProcessJank = e.moveProcessJank, t.moveDisplayJank = e.moveDisplayJank, t.avgMetaParseTime = e.avgMetaParseTime, t.maxMetaParseTime = e.maxMetaParseTime, t.moveResponseCounts = e.moveResponseCounts, t.moveProcessCounts = e.moveProcessCounts, t.moveDisplayCounts = e.moveDisplayCounts, t.MoveDisplayCountGood = e.MoveDisplayCountGood, t.MoveDisplayCountWell = e.MoveDisplayCountWell, t.MoveDisplayCountFair = e.MoveDisplayCountFair, t.MoveDisplayCountBad = e.MoveDisplayCountBad, t.MoveDisplayCountRest = e.MoveDisplayCountRest, t.avgServerDiff = e.avgServerDiff, t.maxServerDiff = e.maxServerDiff, t.avgResponseFlyDiff = e.avgResponseFlyDiff, t.avgProcessFlyDiff = e.avgProcessFlyDiff, t.avgDisplayFlyDiff = e.avgDisplayFlyDiff, t.maxResponseFlyDiff = e.maxResponseFlyDiff, t.maxProcessFlyDiff = e.maxProcessFlyDiff, t.maxDisplayFlyDiff = e.maxDisplayFlyDiff, t.flyResponseCounts = e.flyResponseCounts, t.flyProcessCounts = e.flyProcessCounts, t.flyDisplayCounts = e.flyDisplayCounts, t.flyResponseJank = e.flyResponseJank, t.flyProcessJank = e.flyProcessJank, t.flyDisplayJank = e.flyDisplayJank, t.flyResponseDelay = e.flyResponseDelay, t.flyProcessDelay = e.flyProcessDelay, t.flyDisplayDelay = e.flyDisplayDelay, t.moveEvent = e.moveEvent, t.sdMoveResponseLongTime = e.sdMoveResponseLongTime, t.sdMoveProcessLongTime = e.sdMoveProcessLongTime, t.sdMoveDisplayLongTime = e.sdMoveDisplayLongTime, r._aggregatedStats && r._aggregatedStats.timestamp && (t.mediaBitrate = 8 * (t.mediaBytesReceived - r._aggregatedStats.mediaBytesReceived) / 1e3, t.mediaBitrate = Math.round(t.mediaBitrate || 0), t.metaBitrate = 8 * (t.metaBytesReceived - r._aggregatedStats.metaBytesReceived) / 1e3, t.metaBitrate = Math.round(t.metaBitrate || 0), t.rtcMessagePs = t.rtcMessageReceived - r._aggregatedStats.rtcMessageReceived, t.rtcBitrate = 8 * (t.rtcBytesReceived - r._aggregatedStats.rtcBytesReceived) / 1e3, t.rtcBitrate = Math.round(t.rtcBitrate || 0), t.framesEmitedPs = t.framesEmited - r._aggregatedStats.framesEmited, t.framesEmitedPs = Math.round(t.framesEmitedPs || 0), t.framesReceivedPs = t.framesReceived - r._aggregatedStats.framesReceived, t.framesReceivedPs = Math.round(t.framesReceivedPs || 0), t.framesDecodedPs = t.framesDecoded - r._aggregatedStats.framesDecoded, t.framesDecodedPs = Math.round(t.framesDecodedPs || 0), t.returnFramesPs = t.returnFrames - r._aggregatedStats.returnFrames, t.returnFramesPs = Math.round(t.returnFramesPs || 0), t.responseMissPs = t.responseMiss - r._aggregatedStats.responseMiss, t.processMissPs = t.processMiss - r._aggregatedStats.processMiss, t.displayMissPs = t.displayMiss - r._aggregatedStats.displayMiss, t.returnFrames = e.returnFrames), this._show && this._render(), t.registerBeforeRenderTime = this._extraStats.registerBeforeRenderTime, t.registerAfterRenderTime = this._extraStats.registerAfterRenderTime, t.renderTargetRenderTime = this._extraStats.renderTargetRenderTime, t.renderFrameTime = this._extraStats.renderFrameTime, t.maxRenderFrameTime = this._extraStats.maxRenderFrameTime, t.interFrameTime = this._extraStats.interFrameTime, t.animationTime = this._extraStats.animationTime, t.meshSelectTime = this._extraStats.meshSelectTime, t.drawcall = this._extraStats.drawcall, t.drawcallTime = this._extraStats.drawcallTime, t.triangle = this._extraStats.triangle, t.registerAfterCount = this._extraStats.registerAfterCount, t.registerBeforeCount = this._extraStats.registerBeforeCount, t.fps = this._extraStats.fps, t.rtt = this._extraStats.rtt, t.hb = this._extraStats.hb, t.avgFrameTime = this._extraStats.avgFrameTime, t.avgTimeoutTime = this._extraStats.avgTimeoutTime, t.engineSloppyCnt = this._extraStats.engineSloppyCnt, t.systemStuckCnt = this._extraStats.systemStuckCnt, t.avatarState = (n = this.room._userAvatar) == null ? void 0 : n.state, t.maxFrameTime = this._extraStats.maxFrameTime, t.maxTimeoutTime = this._extraStats.maxTimeoutTime, t.activeParticles = this._extraStats.activeParticles, t.activeBones = this._extraStats.activeBones, t.activeAnimation = this._extraStats.activeAnimation, t.totalRootNodes = this._extraStats.totalRootNodes, t.totalGeometries = this._extraStats.totalGeometries, t.totalMeshes = this._extraStats.totalMeshes, t.totalTextures = this._extraStats.totalTextures, t.totalMaterials = this._extraStats.totalMaterials, t.hardwareInfo = this._extraStats.hardwareInfo, t.maxInterFrameTime = this._extraStats.maxInterFrameTime, t.maxDrawcallTime = this._extraStats.maxDrawcallTime, t.maxMeshSelectTime = this._extraStats.maxMeshSelectTime, t.maxAnimationTime = this._extraStats.maxAnimationTime, t.maxRegisterBeforeRenderTime = this._extraStats.maxRegisterBeforeRenderTime, t.maxRegisterAfterRenderTime = this._extraStats.maxRegisterAfterRenderTime, t.maxRenderTargetRenderTime = this._extraStats.maxRenderTargetRenderTime, this.externalStats && Object.keys(this.externalStats || {}).forEach(function (o) {
t[o] = _this4.externalStats[o];
}), r._aggregatedStats = t, this.emit("stats", {
stats: t
});
}
}]);
return Stats;
}(EventEmitter);
var Actions$1 = {
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
};
var ActionsHandler = /*#__PURE__*/function () {
function ActionsHandler(e) {
_classCallCheck(this, ActionsHandler);
this.currentActiveAction = null;
this.room = e;
}
_createClass(ActionsHandler, [{
key: "avatarComponentsSync",
value: function () {
var _avatarComponentsSync = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) {
var t;
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
t = {
action_type: Actions$1.SetPlayerState,
set_player_state_action: {
player_state: {
avatar_components: JSON.stringify(e)
}
}
};
this.sendData({
data: t
});
case 2:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function avatarComponentsSync(_x) {
return _avatarComponentsSync.apply(this, arguments);
}
return avatarComponentsSync;
}()
}, {
key: "sendData",
value: function () {
var _sendData = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2(e) {
var _this = this;
var t, _e$sampleRate, r, _e$timeout, n, o, a, s;
return regenerator.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return this.beforeSend(e);
case 2:
t = uuid$1();
if (!(this.room.networkController.sendRtcData(le(oe({}, e.data), {
trace_id: t,
user_id: this.room.options.userId
})), e.track === !1)) {
_context2.next = 5;
break;
}
return _context2.abrupt("return", Promise.resolve(null));
case 5:
_e$sampleRate = e.sampleRate, r = _e$sampleRate === void 0 ? 1 : _e$sampleRate, _e$timeout = e.timeout, n = _e$timeout === void 0 ? 2e3 : _e$timeout, o = e.tag, a = e.data, s = e.special;
return _context2.abrupt("return", eventsManager.track({
timeout: n,
traceId: t,
event: a.action_type,
tag: o,
extra: a
}, {
special: s,
sampleRate: r,
noReport: this.room.viewMode === "serverless" || this.room.options.viewMode === "serverless"
}).finally(function () {
QueueActions.includes(e.data.action_type) && (_this.currentActiveAction = void 0);
}));
case 7:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function sendData(_x2) {
return _sendData.apply(this, arguments);
}
return sendData;
}()
}, {
key: "beforeSend",
value: function () {
var _beforeSend = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e) {
var o, t, r;
return regenerator.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
t = (o = this.room._userAvatar) == null ? void 0 : o.isMoving, r = e.data.action_type;
if (!QueueActions.includes(r)) {
_context3.next = 5;
break;
}
if (!this.currentActiveAction) {
_context3.next = 4;
break;
}
return _context3.abrupt("return", (log$p.error("".concat(Actions$1[this.currentActiveAction], " still pending, reject ").concat(Actions$1[r])), Promise.reject(new FrequencyLimitError("".concat(Actions$1[r], " action request frequency limit")))));
case 4:
this.currentActiveAction = r;
case 5:
if (!(t && QueueActions.includes(e.data.action_type))) {
_context3.next = 14;
break;
}
_context3.prev = 6;
_context3.next = 9;
return this.stopMoving();
case 9:
_context3.next = 14;
break;
case 11:
_context3.prev = 11;
_context3.t0 = _context3["catch"](6);
this.currentActiveAction = void 0, log$p.error("before action stopMoving failed", _context3.t0);
case 14:
case "end":
return _context3.stop();
}
}
}, _callee3, this, [[6, 11]]);
}));
function beforeSend(_x3) {
return _beforeSend.apply(this, arguments);
}
return beforeSend;
}()
}, {
key: "moveTo",
value: function () {
var _moveTo = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(e) {
var t, _e$extra, r, n, o;
return regenerator.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
t = e.point, _e$extra = e.extra, r = _e$extra === void 0 ? "" : _e$extra, n = e.motionType, o = {
action_type: Actions$1.Clicking,
clicking_action: {
clicking_point: t,
clicking_type: ClickType.IgnoreView,
extra: encodeURIComponent(r),
attitude: n
},
clicking_state: this.room._currentClickingState
};
return _context4.abrupt("return", this.sendData({
data: o
}));
case 2:
case "end":
return _context4.stop();
}
}
}, _callee4, this);
}));
function moveTo(_x4) {
return _moveTo.apply(this, arguments);
}
return moveTo;
}()
}, {
key: "transfer",
value: function transfer(e) {
var _this2 = this;
var t = e.renderType,
r = e.player,
n = e.camera,
o = e.areaName,
a = e.attitude,
s = e.pathName,
l = e.person,
u = e.noMedia,
c = e.timeout,
h = e.tag,
f = e.special,
d = {
data: {
action_type: Actions$1.Transfer,
transfer_action: {
render_type: t,
player: r,
camera: n,
areaName: o,
attitude: a,
pathName: s,
person: {
type: l
},
noMedia: u,
tiles: [0, 1, 2, 4]
}
},
special: f,
timeout: c || 4e3,
tag: h
};
return this.sendData(d).then(function (_) {
return typeof l != "undefined" && _this2.room.updateCurrentNetworkOptions({
person: l,
rotationRenderType: t
}), _;
});
}
}, {
key: "changeRotationRenderType",
value: function changeRotationRenderType(e) {
var t = e.renderType,
r = e.player,
n = e.camera,
o = e.areaName,
a = e.attitude,
s = e.pathName;
return this.transfer({
renderType: t,
player: r,
camera: n,
areaName: o,
attitude: a,
pathName: s,
tag: "changeToRotationVideo"
});
}
}, {
key: "requestPanorama",
value: function requestPanorama(e, t, r) {
var n = e.camera,
o = e.player,
a = e.areaName,
s = e.attitude,
l = e.pathName,
u = e.tag;
return this.transfer({
renderType: RenderType.ClientRotationPano,
player: o,
camera: n,
person: Person.First,
areaName: a,
attitude: s,
pathName: l,
noMedia: t,
timeout: r,
tag: u || "requestPanorama",
special: !t
});
}
}, {
key: "setMotionType",
value: function setMotionType(e) {
return this.transfer({
attitude: e,
tag: "setMotionType"
});
}
}, {
key: "setNickName",
value: function setNickName(e) {
var t = {
action_type: Actions$1.ChangeNickname,
change_nickname_action: {
nickname: e
}
};
return this.sendData({
data: t
});
}
}, {
key: "getReserveSeat",
value: function getReserveSeat(_ref) {
var e = _ref.routeId,
t = _ref.name;
var r = {
action_type: Actions$1.ReserveSeat,
reserve_seat_action: {
route_id: e,
name: t
}
};
return this.sendData({
data: r
});
}
}, {
key: "getReserveStatus",
value: function getReserveStatus(_ref2) {
var e = _ref2.routeId,
t = _ref2.name,
r = _ref2.need_detail;
var n = {
action_type: Actions$1.GetReserveStatus,
get_reserve_status_action: {
route_id: e,
name: t,
need_detail: r
}
};
return this.sendData({
data: n,
timeout: 2e3
}).then(function (o) {
return o.reserveDetail;
});
}
}, {
key: "stopMoving",
value: function stopMoving() {
var e = {
action_type: Actions$1.StopMoving,
stop_move_action: {}
};
return this.sendData({
data: e
});
}
}, {
key: "getOnVehicle",
value: function getOnVehicle(_ref3) {
var e = _ref3.routeId,
t = _ref3.name,
r = _ref3.camera;
var n = {
action_type: Actions$1.GetOnVehicle,
get_on_vehicle_action: {
route_id: e,
name: t,
camera: r
}
};
return this.sendData({
data: n
});
}
}, {
key: "getOffVehicle",
value: function getOffVehicle(_ref4) {
var e = _ref4.renderType,
t = _ref4.player,
r = _ref4.camera;
var n = {
action_type: Actions$1.GetOffVehicle,
get_off_vehicle_action: {
render_type: e,
player: t,
camera: r
}
};
return this.sendData({
data: n
});
}
}, {
key: "confirmEvent",
value: function confirmEvent(e) {
var t = {
action_type: Actions$1.ConfirmEvent,
confirm_event_action: {
id: e
}
};
return this.sendData({
data: t,
track: !1
});
}
}, {
key: "echo",
value: function echo(e) {
var t = {
action_type: Actions$1.Echo,
echo_msg: {
echoMsg: e
}
};
return this.sendData({
data: t,
track: !1
});
}
}, {
key: "changeSkin",
value: function () {
var _changeSkin = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6(e) {
var _this3 = this;
var t, r, n, _e$landingType, o, a, s, l, u, c, h, f, d, _, _e$roomTypeId, g, m, y, v;
return regenerator.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
t = e.special === void 0 ? e.renderType === RenderType.ClientRotationPano : e.special, r = e.skinId, n = e.mode, _e$landingType = e.landingType, o = _e$landingType === void 0 ? LandingType.Stay : _e$landingType, a = e.landingPoint, s = e.landingCamera, l = e.renderType, u = e.areaName, c = e.attitude, h = e.pathName, f = e.person, d = e.noMedia, _ = e.timeout, _e$roomTypeId = e.roomTypeId, g = _e$roomTypeId === void 0 ? "" : _e$roomTypeId, m = this.room.skinList.filter(function (y) {
return y.id === r;
})[0];
if (m) {
_context6.next = 4;
break;
}
y = "skin ".concat(r, " is invalid");
return _context6.abrupt("return", (log$p.error(y), Promise.reject(new ParamError(y))));
case 4:
v = {
action_type: Actions$1.ChangeSkin,
change_skin_action: {
skinID: r,
mode: n === ChangeMode.Preview ? ChangeMode.Preview : ChangeMode.Confirm,
skin_data_version: r + m.versionId,
landing_type: o,
landing_point: a,
landing_camera: s,
render_wrapper: {
render_type: l
},
areaName: u,
attitude: c,
noMedia: d,
person: f,
pathName: h,
roomTypeId: g
}
};
return _context6.abrupt("return", this.sendData({
data: v,
timeout: _ || 6e3,
special: t
}).then( /*#__PURE__*/function () {
var _ref5 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5(y) {
var b, _ref6, T;
return regenerator.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
if (!(l === RenderType.ClientRotationPano && y)) {
_context5.next = 8;
break;
}
_context5.next = 3;
return _this3.room.modelManager.findRoute(r, h);
case 3:
b = _context5.sent;
_ref6 = getRandomItem(b.birthPointList) || {};
T = _ref6.camera;
_context5.next = 8;
return _this3.room.panorama.handleReceivePanorama(y, T);
case 8:
return _context5.abrupt("return", _this3.handleChangeSkin(e));
case 9:
case "end":
return _context5.stop();
}
}
}, _callee5);
}));
return function (_x6) {
return _ref5.apply(this, arguments);
};
}()).catch(function (y) {
return d ? _this3.handleChangeSkin(e) : Promise.reject(y);
}));
case 6:
case "end":
return _context6.stop();
}
}
}, _callee6, this);
}));
function changeSkin(_x5) {
return _changeSkin.apply(this, arguments);
}
return changeSkin;
}()
}, {
key: "handleChangeSkin",
value: function handleChangeSkin(e) {
var _this4 = this;
var t = e.skinId,
r = e.mode,
n = e.renderType,
o = e.areaName,
a = e.attitude,
s = e.pathName;
return this.room.sceneManager.staticmeshComponent.getCgMesh().show(), this.room.sceneManager.cameraComponent.switchToCgCamera(), this.room.engineProxy._updateSkinAssets(t).then(function () {
_this4.room.sceneManager.staticmeshComponent.getCgMesh().hide(), _this4.room.sceneManager.cameraComponent.switchToMainCamera(), _this4.room.pathManager.currentArea = o, log$p.info("changeSkin _updateSkinAssets susccss"), _this4.room.updateCurrentNetworkOptions({
pathName: s,
attitude: a,
areaName: o
}), _this4.room.skinChangedHook(), _this4.room.emit("skinChanged", {
skin: {
id: t
},
mode: r
}), n === RenderType.ClientRotationPano && _this4.room.sceneManager.cameraComponent.allowMainCameraController();
});
}
}, {
key: "rotate",
value: function rotate(_ref7) {
var e = _ref7.pitch,
t = _ref7.yaw;
var n;
if (this.room.disableRotate || this.room.isPano || ((n = this.room._userAvatar) == null ? void 0 : n._isChangingComponentsMode)) return;
var r = {
action_type: Actions$1.Rotation,
rotation_action: {
vertical_move: e,
horizontal_move: -t
}
};
this.sendData({
data: r,
sampleRate: .02
});
}
}, {
key: "turnTo",
value: function turnTo(e) {
var _ref8 = e || {},
t = _ref8.point,
_ref8$timeout = _ref8.timeout,
r = _ref8$timeout === void 0 ? 2e3 : _ref8$timeout,
_ref8$offset = _ref8.offset,
n = _ref8$offset === void 0 ? 8 : _ref8$offset,
o = {
action_type: Actions$1.TurnTo,
turn_to_action: {
turn_to_point: t,
offset: n
}
};
return this.sendData({
data: o,
timeout: r
});
}
}, {
key: "rotateTo",
value: function rotateTo(e) {
var _ref9 = e || {},
t = _ref9.point,
_ref9$offset = _ref9.offset,
r = _ref9$offset === void 0 ? 0 : _ref9$offset,
_ref9$speed = _ref9.speed,
n = _ref9$speed === void 0 ? 3 : _ref9$speed,
o = {
action_type: Actions$1.RotateTo,
rotate_to_action: {
rotate_to_point: t,
offset: r,
speed: n
}
};
return this.sendData({
data: o
});
}
}, {
key: "broadcast",
value: function broadcast(e) {
var t = e.data,
_e$msgType = e.msgType,
r = _e$msgType === void 0 ? MessageHandleType.MHT_FollowListMulticast : _e$msgType,
n = e.targetUserIds;
if (r === MessageHandleType.MHT_CustomTargetSync && !Array.isArray(n)) return Promise.reject(new ParamError("param targetUserIds is required when msgType is ".concat(MessageHandleType[r])));
var o = {
action_type: Actions$1.Broadcast,
broadcast_action: {
data: JSON.stringify(t),
user_id: this.room.options.userId,
msgType: r
}
};
return Array.isArray(n) && r === MessageHandleType.MHT_CustomTargetSync && (o.broadcast_action.target_user_ids = n), this.room.actionsHandler.sendData({
data: o,
tag: t.broadcastType
});
}
}, {
key: "getNeighborPoints",
value: function getNeighborPoints(e) {
var t = e.point,
_e$containSelf = e.containSelf,
r = _e$containSelf === void 0 ? !1 : _e$containSelf,
_e$searchRange = e.searchRange,
n = _e$searchRange === void 0 ? 500 : _e$searchRange,
o = {
action_type: Actions$1.GetNeighborPoints,
get_neighbor_points_action: {
point: t,
level: 1,
containSelf: r,
searchRange: n
}
};
return this.sendData({
data: o
}).then(function (a) {
return a.nps;
});
}
}, {
key: "playCG",
value: function playCG(e) {
var t = {
action_type: Actions$1.PlayCG,
play_cg_action: {
cg_name: e
}
};
return this.sendData({
data: t
});
}
}, {
key: "audienceToVisitor",
value: function audienceToVisitor(e) {
var t = e.avatarId,
r = e.avatarComponents,
n = e.player,
o = e.camera,
a = {
action_type: Actions$1.AudienceChangeToVisitor,
audienceChangeToVisitorAction: {
avatarID: t,
avatarComponents: r,
player: n,
camera: o
}
};
return log$p.debug("send data: audience to visitor"), this.sendData({
data: a
});
}
}, {
key: "visitorToAudience",
value: function visitorToAudience(e) {
var t = e.renderType,
r = e.player,
n = e.camera,
o = e.areaName,
a = e.attitude,
s = e.pathName,
l = e.person,
u = e.noMedia,
c = {
action_type: Actions$1.VisitorChangeToAudience,
visitorChangeToAudienceAction: {
transferAction: {
render_type: t,
player: r,
camera: n,
areaName: o,
attitude: a,
pathName: s,
person: {
type: l
},
noMedia: u,
tiles: [0, 1, 2, 4]
}
}
};
return log$p.debug("send data: visitor to audience"), this.sendData({
data: c
});
}
}, {
key: "removeVisitor",
value: function removeVisitor(e) {
var t = e.removeType,
r = e.userIDList,
_e$extraInfo = e.extraInfo,
n = _e$extraInfo === void 0 ? "" : _e$extraInfo,
o = {
action_type: Actions$1.RemoveVisitor,
removeVisitorAction: {
removeVisitorEvent: t,
userIDList: r,
extraInfo: encodeURIComponent(n)
}
};
return log$p.debug("send data: remove visitor"), this.sendData({
data: o
});
}
}, {
key: "getUserWithAvatar",
value: function getUserWithAvatar(e, t) {
var r = {
action_type: Actions$1.GetUserWithAvatar,
getUserWithAvatarAction: {
userType: e,
roomID: t
}
};
return log$p.debug("send data: get user with avatar"), this.sendData({
data: r
}).then(function (n) {
return n.userWithAvatarList;
});
}
}, {
key: "joystick",
value: function joystick(e) {
var t = e.degree,
_e$level = e.level,
r = _e$level === void 0 ? 1 : _e$level,
n = uuid$1();
var o = -t + 90 + 360;
o >= 360 && (o -= 360);
var a = {
action_type: Actions$1.Joystick,
dir_action: {
move_angle: o,
speed_level: r
},
trace_id: n,
user_id: this.room.options.userId,
packet_id: n
};
return this.sendData({
data: a,
track: !1
});
}
}]);
return ActionsHandler;
}();
var Signal = /*#__PURE__*/function () {
function Signal(e) {
_classCallCheck(this, Signal);
this.signalHandleActived = !0;
this.isUpdatedYUV = !0;
this._room = e;
}
_createClass(Signal, [{
key: "handleSignal",
value: function handleSignal(e) {
var _this = this;
var a, s, l;
if (!this.signalHandleActived) return;
var t = e.signal,
r = e.alreadyUpdateYUV;
if (this.handleActionResponses(t), this._room.handleSignalHook(t), !r) {
var u = (a = t.newUserStates) == null ? void 0 : a.find(function (c) {
return c.userId === _this._room.userId;
});
if ((u == null ? void 0 : u.renderInfo) && ((s = this._room._userAvatar) == null ? void 0 : s.isMoving)) {
logger.debug("stream stoped, make avatar to stop");
var _u$renderInfo = u.renderInfo,
c = _u$renderInfo.isMoving,
h = _u$renderInfo.isRotating;
this._room.avatarManager._updateAvatarMovingStatus({
id: u.userId,
isMoving: !!c,
isRotating: !!h
});
}
return;
}
this.isUpdatedYUV = r;
var n = t;
if (!t) {
logger.warn("metadata signal is empty");
return;
}
if (n.code === Codes.RepeatLogin) {
this._room.handleRepetLogin();
return;
}
n.code !== void 0 && n.code !== Codes.Success && n.code !== Codes.ActionMaybeDelay && n.code !== Codes.DoActionBlocked && n.code !== Codes.GetOnVehicle && (logger.error("signal errcode: ", n), this._room.emit("error", n));
var o = (l = n.newUserStates) == null ? void 0 : l.find(function (u) {
return u.userId === _this._room.userId;
});
if (n.broadcastAction) try {
var _u = JSON.parse(n.broadcastAction.data);
Broadcast.handlers.forEach(function (c) {
return c(_u);
});
} catch (u) {
logger.error(u);
}
if (n.newUserStates && n.newUserStates.length > 0 && this._room.avatarManager.handleAvatar(n), o != null && o.playerState) {
this._room._currentClickingState = o.playerState;
var _o$playerState = o.playerState,
_u2 = _o$playerState.pathName,
_c = _o$playerState.attitude,
_h = _o$playerState.areaName,
f = _o$playerState.skinId;
if (_u2 && (this._room.pathManager.currentPathName = _u2, this._room.updateCurrentState({
pathName: _u2
})), f && this.udpateSkinInfo(f), _h && this._room.updateCurrentState({
areaName: _h
}), _c) {
var d = this._room.skin.routeList.find(function (g) {
return g.areaName === _this._room.currentState.areaName;
}),
_ = ((d == null ? void 0 : d.step) || 7.5) * 30;
this._room.updateCurrentState({
speed: _,
attitude: _c
}), this._room.pathManager.currentAttitude = _c, this._room._userAvatar && (this._room._userAvatar.motionType = _c);
}
this._room.sceneManager.getCurrentShaderMode() !== ECurrentShaderMode.pano && !this._room.isPano && o.playerState.camera && this._room.camera.setCameraPose(o.playerState.camera);
}
if (o != null && o.renderInfo && this._room.camera.handleRenderInfo(o), n.actionType !== void 0) {
var _u3 = n.actionType,
_c2 = n.code,
_h2 = n.echoMsg,
_f = n.traceId;
_u3 === Actions.Echo && _c2 === Codes.Success && this._room.networkController.rtcp.heartbeat.pong(_h2, _f), _c2 !== Codes.Success ? eventsManager.remove(_f, _c2) : [Actions.GetReserveStatus, Actions.Broadcast, Actions.ChangeNickname, Actions.ConfirmEvent, Actions.ReserveSeat, Actions.Rotation, Actions.TurnTo, Actions.RotateTo, Actions.SetPlayerState, Actions.GetNeighborPoints, Actions.TurnToFace, Actions.AudienceChangeToVisitor, Actions.RemoveVisitor, Actions.GetUserWithAvatar].includes(_u3) && eventsManager.remove(_f, _c2, n);
}
}
}, {
key: "handleActionResponses",
value: function handleActionResponses(e) {
var _this2 = this;
!(e != null && e.actionResponses) || e.actionResponses.length === 0 || e.actionResponses.forEach(function (t) {
if (t.actionType == null) return;
var r = t.pointType,
n = t.extra,
o = t.actionType,
a = t.traceId,
s = t.code,
l = t.msg;
o === Actions.GetNeighborPoints ? eventsManager.remove(a, s, t.nps) : o === Actions.GetUserWithAvatar ? eventsManager.remove(a, s, t.userWithAvatarList) : eventsManager.remove(a, s, l), r === PointType.Path && o === Actions.Clicking && (_this2._room.moveToExtra = decodeURIComponent(n));
});
}
}, {
key: "udpateSkinInfo",
value: function () {
var _udpateSkinInfo = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) {
var t;
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
this._room.updateCurrentState({
skinId: e
});
_context.next = 3;
return this._room.skinList.find(function (r) {
return r.id === e;
});
case 3:
t = _context.sent;
t && this._room.updateCurrentState({
skin: t
});
case 5:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function udpateSkinInfo(_x) {
return _udpateSkinInfo.apply(this, arguments);
}
return udpateSkinInfo;
}()
}]);
return Signal;
}();
function _createSuper$9(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$9(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$9() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var ParamError$1 = /*#__PURE__*/function (_XverseError) {
_inherits(ParamError, _XverseError);
var _super = _createSuper$9(ParamError);
function ParamError(e) {
_classCallCheck(this, ParamError);
return _super.call(this, 1001, e || "\u53C2\u6570\u9519\u8BEF");
}
return _createClass(ParamError);
}(XverseError$1);
var MotionType$1 = {
Walk: 'walk',
Run: 'run',
Fly: 'fly'
};
var Heartbeat = /*#__PURE__*/function () {
function Heartbeat(e) {
_classCallCheck(this, Heartbeat);
this._interval = null;
this.handler = e;
}
_createClass(Heartbeat, [{
key: "ping",
value: function ping() {
var e = Date.now().toString();
this.handler.ping(e);
}
}, {
key: "start",
value: function start() {
this.stop(), logger.debug("Setting ping interval to ".concat(PING_INTERVAL_MS, "ms")), this._interval = window.setInterval(this.ping, PING_INTERVAL_MS);
}
}, {
key: "stop",
value: function stop() {
logger.debug("stop heartbeat"), this._interval && window.clearInterval(this._interval);
}
}, {
key: "pong",
value: function pong(e, t) {
!e || typeof e == "string" && this.handler.pong(Date.now() - Number(e), t);
}
}]);
return Heartbeat;
}();
var Timeout$1 = /*#__PURE__*/function () {
function Timeout(e, t) {
var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !0;
_classCallCheck(this, Timeout);
this._timeout = null;
this._fn = e, this._delay = t, r && this.start();
}
_createClass(Timeout, [{
key: "delay",
get: function get() {
return this._delay;
}
}, {
key: "isSet",
get: function get() {
return !!this._timeout;
}
}, {
key: "setDelay",
value: function setDelay(e) {
this._delay = e;
}
}, {
key: "start",
value: function start() {
var _this = this;
this.isSet || (this._timeout = window.setTimeout(function () {
var e = _this._fn;
_this.clear(), e();
}, this._delay));
}
}, {
key: "clear",
value: function clear() {
window.clearTimeout(this._timeout), this._timeout = void 0;
}
}, {
key: "reset",
value: function reset() {
this.clear(), this.start();
}
}]);
return Timeout;
}();
function _createSuper$8(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$8(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$8() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var XverseError = /*#__PURE__*/function (_Error) {
_inherits(XverseError, _Error);
var _super = _createSuper$8(XverseError);
function XverseError(e, t) {
var _this;
_classCallCheck(this, XverseError);
_this = _super.call(this, t);
_this.code = e;
return _this;
}
_createClass(XverseError, [{
key: "toJSON",
value: function toJSON() {
return {
code: this.code,
message: this.message
};
}
}, {
key: "toString",
value: function toString() {
if (Object(this) !== this) throw new TypeError();
var t = this.name;
t = t === void 0 ? "Error" : String(t);
var r = this.message;
r = r === void 0 ? "" : String(r);
var n = this.code;
return r = n === void 0 ? r : n + "," + r, t === "" ? r : r === "" ? t : t + ": " + r;
}
}]);
return XverseError;
}( /*#__PURE__*/_wrapNativeSuper(Error));
function _createSuper$7(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$7(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$7() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var InitNetworkTimeoutError = /*#__PURE__*/function (_XverseError) {
_inherits(InitNetworkTimeoutError, _XverseError);
var _super = _createSuper$7(InitNetworkTimeoutError);
function InitNetworkTimeoutError(e) {
_classCallCheck(this, InitNetworkTimeoutError);
return _super.call(this, 1007, e || "\u7F51\u7EDC\u521D\u59CB\u5316\u8D85\u65F6");
}
return _createClass(InitNetworkTimeoutError);
}(XverseError);
function _createSuper$6(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$6(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$6() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var Socket = /*#__PURE__*/function (_EventEmitter) {
_inherits(Socket, _EventEmitter);
var _super = _createSuper$6(Socket);
function Socket(e) {
var _this;
_classCallCheck(this, Socket);
_this = _super.call(this);
_this._ws = null;
_this._openTimer = null;
_this.connected = !1;
_this._hasTimeout = !1;
_this.heartbeat = null;
_this.network = e, _this.heartbeat = new Heartbeat({
ping: function 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
});
}
});
return _this;
}
_createClass(Socket, [{
key: "latency",
value: function latency(e, t) {
this.send({
id: "checkLatency",
data: JSON.stringify(e),
packet_id: t
});
}
}, {
key: "send",
value: function send(e) {
if (this.wsNoReady()) return;
var t = JSON.stringify(e);
e.id !== "heartbeat" && logger.info("send ws frame", t), this._ws.send(t);
}
}, {
key: "startGame",
value: function startGame() {
var _this$network$room$cu = this.network.room.currentNetworkOptions,
e = _this$network$room$cu.roomId,
t = _this$network$room$cu.userId,
r = _this$network$room$cu.avatarId,
n = _this$network$room$cu.skinId,
o = _this$network$room$cu.role,
a = _this$network$room$cu.avatarComponents,
s = _this$network$room$cu.versionId,
l = _this$network$room$cu.rotationRenderType,
u = _this$network$room$cu.isAllSync,
c = _this$network$room$cu.nickname,
h = _this$network$room$cu.avatarScale,
f = _this$network$room$cu.appId,
d = _this$network$room$cu.camera,
_ = _this$network$room$cu.player,
g = _this$network$room$cu.firends,
m = _this$network$room$cu.syncByEvent,
v = _this$network$room$cu.areaName,
y = _this$network$room$cu.attitude,
b = _this$network$room$cu.pathName,
T = _this$network$room$cu.person,
_this$network$room$cu2 = _this$network$room$cu.roomTypeId,
C = _this$network$room$cu2 === void 0 ? "" : _this$network$room$cu2,
A = _this$network$room$cu.syncToOthers,
S = _this$network$room$cu.hasAvatar,
P = _this$network$room$cu.prioritySync,
_this$network$room$cu3 = _this$network$room$cu.extra,
R = _this$network$room$cu3 === void 0 ? {} : _this$network$room$cu3,
M = _this$network$room$cu.removeWhenDisconnected;
R.removeWhenDisconnected = M;
var 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)
}));
}
}, {
key: "connection",
get: function get() {
return this._ws;
}
}, {
key: "start",
value: function start() {
var _this2 = this;
this._hasTimeout = !1;
var e = this.getAddress();
logger.info("connecting to ".concat(e));
var t = Date.now();
this._ws = new WebSocket(e), this._openTimer = new Timeout$1(function () {
var r = "Failed to open websocket in ".concat(DEFAULT_OPEN_TIMEOUT_MS, " ms");
_this2._hasTimeout = !0, _this2.emit("socketClosed", new InitNetworkTimeoutError(r));
}, DEFAULT_OPEN_TIMEOUT_MS), this._ws.onopen = function () {
var r;
(r = _this2._openTimer) == null || r.clear(), _this2.connected = !0, _this2.heartbeat.start(), _this2.network.room.currentNetworkOptions.reconnect || (logger.infoAndReportMeasurement({
metric: "wsOpenedAt",
group: "joinRoom",
startTime: _this2.network.room._startTime
}), logger.infoAndReportMeasurement({
metric: "wsOpenedCost",
group: "joinRoom",
startTime: t
}));
}, this.handleWSEvent();
}
}, {
key: "getAddress",
value: function getAddress() {
var _this$network$room$cu4 = this.network.room.currentNetworkOptions,
e = _this$network$room$cu4.wsServerUrl,
t = _this$network$room$cu4.reconnect,
r = _this$network$room$cu4.sessionId,
n = _this$network$room$cu4.token,
o = _this$network$room$cu4.roomId,
a = _this$network$room$cu4.userId,
s = _this$network$room$cu4.pageSession,
l = this.network.room.skinId;
var u = e;
t && (u = u + "?reconnect=true&lastSessionID=".concat(r));
var c = "userId=".concat(a, "&roomId=").concat(o, "&pageSession=").concat(s) + (this.network.room.isHost ? "&skinId=".concat(l) : "") + (n ? "&token=".concat(n) : "");
return u = u.indexOf("?") > -1 ? u + "&" + c : u + "?" + c, u;
}
}, {
key: "handleWSEvent",
value: function handleWSEvent() {
var _this3 = this;
var e = this._ws;
e.addEventListener("error", function (t) {
_this3.connected = !1, logger.error("webscoket error", t), _this3.emit("socketClosed", new InternalError("connect to address error: " + _this3.network.room.currentNetworkOptions.wsServerUrl));
}), e.addEventListener("close", function (t) {
_this3.connected = !1, _this3._onClose(t);
}), e.addEventListener("message", function (t) {
if (!t || _this3._hasTimeout || !_this3.connected) return;
var r = null;
try {
r = JSON.parse(t.data);
} catch (o) {
logger.error(o);
return;
}
if (!r) return;
var n = r.id;
if (!!n) switch (n !== "heartbeat" && logger.info("receive ws frame: ".concat(t.data)), n) {
case "fail":
break;
case "init":
try {
var o = r.data.slice(-37, -1);
reporter$1.updateBody({
serverSession: o
});
} catch (o) {
console.error(o);
}
_this3.network.rtcp.start();
break;
case "heartbeat":
_this3.heartbeat.pong(r.data);
break;
case "offer":
_this3.network.rtcp.setRemoteDescription(r.data, _this3.network.stream.el);
break;
case "ice_candidate":
_this3.network.rtcp.addCandidate(r.data);
break;
case "start":
_this3.emit("gameRoomAvailable", r);
break;
case "error":
try {
var _JSON$parse = JSON.parse(r.data),
_o = _JSON$parse.Code,
a = _JSON$parse.Msg;
if (_o) {
if (_o == 3003) return _this3.emit("socketClosed", new TokenExpiredError());
if (authenticationErrorCodes.indexOf(_o) > -1) return _this3.emit("socketClosed", new AuthenticationError("\u9274\u6743\u9519\u8BEF:" + a));
{
var s = getErrorByCode(_o);
_this3.emit("socketClosed", new s(a));
}
}
} catch (o) {
logger.error(o), _this3.emit("socketClosed", new InternalError(r.data));
}
break;
case "checkLatency":
{
var _o2 = r.packet_id,
_a = r.data.split(",");
_this3.onLatencyCheck({
packetId: _o2,
addresses: _a
});
break;
}
default:
logger.warn("unkown ws message type", n, r);
}
});
}
}, {
key: "onLatencyCheck",
value: function onLatencyCheck(e) {
var _this4 = this;
var t = _toConsumableArray(new Set(e.addresses || []));
Promise.all(t.map(function (r) {
return {
[r]: 9999
};
})).then(function (r) {
var n = Object.assign.apply(Object, [{}].concat(_toConsumableArray(r)));
_this4.latency(n, e.packetId);
});
}
}, {
key: "wsNoReady",
value: function wsNoReady() {
return this._ws.readyState == WebSocket.CLOSED || this._ws.readyState == WebSocket.CLOSING || this._ws.readyState == WebSocket.CONNECTING;
}
}, {
key: "prepareReconnect",
value: function prepareReconnect() {
this._close({
code: WS_CLOSE_RECONNECT,
reason: "reconnect"
});
}
}, {
key: "_onClose",
value: function _onClose(_ref) {
var e = _ref.code,
t = _ref.reason;
this._openTimer && this._openTimer.clear(), logger.warn("ws closed: ".concat(e, " ") + t), [WS_CLOSE_RECONNECT, WS_CLOSE_NORMAL].includes(e) || this.emit("socketClosed", new InternalError("Websocket error"));
}
}, {
key: "_close",
value: function _close(_ref2) {
var e = _ref2.code,
t = _ref2.reason;
var r;
(r = this._ws) == null || r.close(e, t);
}
}, {
key: "quit",
value: function quit() {
this._close({
code: WS_CLOSE_NORMAL,
reason: "quit"
});
}
}]);
return Socket;
}(EventEmitter);
function add(i, e) {
return e == -1 && (e = 0), i + e;
}
function max(i, e) {
return Math.max(i, e);
}
function count_sd(i, e) {
function t(r, n) {
var o = 0;
return n == -1 ? o = 0 : o = (n - e) * (n - e), r + o;
}
return Math.sqrt(i.reduce(t, 0) / i.reduce(count_valid, 0)) || 0;
}
function count_valid(i, e) {
var t = 0;
return e != -1 && (t = 1), i + t;
}
function count_less(i, e) {
function t(r, n) {
var o = 0;
return n != -1 && n < e && (o = 1), r + o;
}
return i.reduce(t, 0);
}
var CircularArray = /*#__PURE__*/function () {
function CircularArray(e, t, r) {
_classCallCheck(this, CircularArray);
this.sum = 0, this.incomingSum = 0, this.count = 0, this.incomingCount = 0, this.max = 0, this.incomingMax = 0, this.goodLess = 0, this.wellLess = 0, this.fairLess = 0, this.badLess = 0, this.countLess = !1, this.lessThreshes = [], this.incomingData = [], this.circularData = Array(e).fill(-1), this.circularPtr = 0, this.circularLength = e, t && (this.countLess = !0, this.lessThreshes = r);
}
_createClass(CircularArray, [{
key: "add",
value: function add(e) {
this.circularData[this.circularPtr] != -1 ? (this.sum -= this.circularData[this.circularPtr], Math.abs(this.circularData[this.circularPtr] - this.max) < .01 && (this.circularData[this.circularPtr] = -1, this.max = this.getMax(!1))) : this.count += 1, this.sum += e, this.incomingSum += e, this.incomingCount += 1, this.max < e && (this.max = e), this.incomingMax < e && (this.incomingMax = e), this.circularData[this.circularPtr] = e, this.circularPtr = (this.circularPtr + 1) % this.circularLength, this.incomingData.push(e), this.incomingData.length > this.circularLength && (this.clearIncoming(), this.incomingCount = 0, this.incomingSum = 0);
}
}, {
key: "computeAvg",
value: function computeAvg(e) {
return e.reduce(add, 0) / e.reduce(count_valid, 0) || 0;
}
}, {
key: "computeMax",
value: function computeMax(e) {
return e.reduce(max, 0) || 0;
}
}, {
key: "computeThreshPercent",
value: function computeThreshPercent(e) {
if (this.countLess) {
var t = count_less(e, this.lessThreshes[0]) || 0,
r = count_less(e, this.lessThreshes[1]) || 0,
n = count_less(e, this.lessThreshes[2]) || 0,
o = count_less(e, this.lessThreshes[3]) || 0,
a = e.reduce(count_valid, 0);
return [t, r, n, o, a];
} else return [0, 0, 0, 0, 0];
}
}, {
key: "getAvg",
value: function getAvg() {
var e = this.sum / this.count || 0,
t = this.computeAvg(this.circularData) || 0;
return Math.abs(e - t) > .01 && console.error("avg value mismatch: ", e, t), this.computeAvg(this.circularData) || 0;
}
}, {
key: "getMax",
value: function getMax() {
var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !0;
var t = this.computeMax(this.circularData) || 0;
return e && Math.abs(t - this.max) > .01 && console.error("max value mismatch: ", this.max, t), this.computeMax(this.circularData) || 0;
}
}, {
key: "getStandardDeviation",
value: function getStandardDeviation() {
return count_sd(this.circularData, this.getAvg());
}
}, {
key: "getThreshPercent",
value: function getThreshPercent() {
return this.computeThreshPercent(this.circularData);
}
}, {
key: "getIncomingMax",
value: function getIncomingMax() {
return this.computeMax(this.incomingData) || 0;
}
}, {
key: "getIncomingAvg",
value: function getIncomingAvg() {
return this.computeAvg(this.incomingData) || 0;
}
}, {
key: "getIncomingStandardDeviation",
value: function getIncomingStandardDeviation() {
return count_sd(this.incomingData, this.getIncomingAvg());
}
}, {
key: "getIncomingThreshPercent",
value: function getIncomingThreshPercent() {
return this.computeThreshPercent(this.incomingData);
}
}, {
key: "clearFastComputeItem",
value: function clearFastComputeItem() {
this.sum = 0, this.incomingSum = 0, this.count = 0, this.incomingCount = 0, this.max = 0, this.incomingMax = 0, this.goodLess = 0, this.wellLess = 0, this.fairLess = 0, this.badLess = 0;
}
}, {
key: "clearIncoming",
value: function clearIncoming() {
for (; this.incomingData.length > 0;) {
this.incomingData.pop();
}
}
}, {
key: "clear",
value: function clear() {
this.circularData.fill(-1), this.circularPtr = 0, this.clearFastComputeItem(), this.clearIncoming();
}
}]);
return CircularArray;
}();
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
var defaultLogger = {
info: console.log,
debug: console.log,
error: console.error,
infoAndReportMeasurement: function infoAndReportMeasurement() {}
};
var USER_ID = "987412365",
PAGE_SESSION = "aaabbbccc",
SERVER_SESSION = "cccbbbaaa",
COS_PREFIX = "error-bitstreams-auto-uploaded-from-application/",
FRAME_COMPOSE_LENGTH = 5;
var Workers = /*#__PURE__*/function () {
function Workers(e, t) {
var _this = this;
_classCallCheck(this, Workers);
this.rtcp = e, this.cacheSize = 0, this.cacheBuffer = new Uint8Array(262144), this.cacheFrameCnt = 0, this.startReceiveTime = 0, this.cacheFrameComposes = new Array(0), this.cacheSizes = new Array(5).fill(0), this.cacheFrameCnts = new Array(5).fill(-1), this.cacheStartReceiveTimes = new Array(5).fill(0), this.cacheBuffers = [new Uint8Array(262144), new Uint8Array(262144), new Uint8Array(262144), new Uint8Array(262144), new Uint8Array(262144)], this.panoCacheSize = 0, this.panoCacheBuffer = new Uint8Array(2097152), this.cachePanoTileID = 0, this.receivedMedia = 0, this.receivedMedia_worker = 0, this.receivedYUV = 0, this.receivedEmit = 0, this.returnFrames = 0, this.lastReturnFrames = 0, this.lastReceivedEmit = 0, this.mediaBytesReceived = 0, this.metaBytesReceived = 0, this.noWasmBytesReceived = 0, this.rtcBytesReceived = 0, this.rtcMessageReceived = 0, this.packetsDrop = 0, this.framesAwait = 0, this.sendOutBuffer = 0, this.decodeTimePerFrame = 0, this.decodeTimeMaxFrame = 0, this.lastRenderTs = 0, this.JankTimes = 0, this.bigJankTimes = 0, this.DecodeJankTimes = 0, this.bigDecodeJankTimes = 0, this.saveframe = !1, this.SaveMediaStream = !1, this.packetsLost = 0, this.showAllReceivedMetadata = !1, this.firstMediaArraval = 0, this.firstMediaReceived = !1, this.firstYUVDecoded = 0, this.firstRender = 0, this.firstYUVReceived = !1, this.reconnectSignal = !1, this.serverFrameSlow = 0, this.serverFrameFast = 0, this.clientFrameSlow = 0, this.clientFrameFast = 0, this.lastServerTS = 0, this.lastClientTS = 0, this.lastSeq = 0, this.lastIsPureMeta = !1, this.lastHBPacketTs = 0, this.HBPacketInterval = 0, this.lastHBPacketSrvSentTs = 0, this.HBPacketIntervalSrvSent = 0, this.cachedLength = 2, this.cachedStreams = new Array(this.cachedLength), this.cachedMetas = new Array(this.cachedLength), this.cachedPtss = new Array(this.cachedLength), this.cachedRender = Array(this.cachedLength).fill(!1), this.cachedResolution = new Array(this.cachedLength), this.getPtr = 0, this.setPtr = 0, this.receiveIframes = 0, this.decodeIframes = 0, this.prevSenderTs = -1, this.serverSendTimeArray = new CircularArray(120, !1, []), this.inPanoMode = !1, this.PanoStatus = {
x: 0,
y: 0,
z: 0,
tiles: []
}, this.DynamicPanoTest = !1, this.PanoMask = new ArrayBuffer(8), this.PanoView = new DataView(this.PanoMask), this.userId_test = "", this.PendingMasks = [], this.traceIdMap = new Map(), this.responseTimeArray = [], this.processTimeArray = [], this.displayTimeArray = [], this.overallTimeArray = [], this.responseMiss = 0, this.processMiss = 0, this.displayMiss = 0, this.updateYUVCircular = new CircularArray(120, !1, []), this.updateDropFrame = 0, this.metaParseAraay = [], this.responseMoveMiss = 0, this.processMoveMiss = 0, this.displayMoveMiss = 0, this.MovingTraceId = "", this.PendingMovingTraceId = "", this.inMovingMode = !1, this.StartMovingTs = 0, this.PendingStartMovingTs = 0, this.moveEvent = "", this.MoveToFrameCnt = 0, this.lastIsMoving = 0, this.MoveResponseDelay = 0, this.MoveProcessDelay = 0, this.MoveDisplayDelay = 0, this.lastMoveResponseTime = 0, this.lastMoveProcessTime = 0, this.lastMoveDisplayTime = 0, this.moveResponseCircular = new CircularArray(120, !0, [STUCK_STAGE_GOOD, STUCK_STAGE_WELL, STUCK_STAGE_FAIR, STUCK_STAGE_BAD]), this.moveProcessCircular = new CircularArray(120, !0, [STUCK_STAGE_GOOD, STUCK_STAGE_WELL, STUCK_STAGE_FAIR, STUCK_STAGE_BAD]), this.moveDisplayCircular = new CircularArray(120, !0, [STUCK_STAGE_GOOD, STUCK_STAGE_WELL, STUCK_STAGE_FAIR, STUCK_STAGE_BAD]), this.moveStartPts = -1, this.frameServerCircular = new CircularArray(120, !1, []), this.srvMetaIntervalCircular = new CircularArray(120, !1, []), this.srvMediaIntervalCircular = new CircularArray(120, !1, []), this.srvHBMetaIntervalCircular = new CircularArray(120, !1, []), this.srvHBMetaIntervalSrvSentCircular = new CircularArray(120, !1, []), this.frameClientCircular = new CircularArray(120, !1, []), this.firstUpdateYUV = !0, this.functionMap = new Map(), this.WASM_VERSION = "WASM-1.1", this.frameHistory = [], this.getVersion = function () {
return DECODER_VERSION;
}, this.downloadBlob = function (r, n, o) {
var a = new Blob([r], {
type: o
}),
s = window.URL.createObjectURL(a);
_this.downloadURL(s, n), setTimeout(function () {
return window.URL.revokeObjectURL(s);
}, 1e3);
}, this.downloadURL = function (r, n) {
var o = document.createElement("a");
o.href = r, o.download = n, document.body.appendChild(o), o.style.display = "none", o.click(), o.remove();
}, this.Stringify = function (r) {
var n = "";
for (var a = 0; a < r.length / 8192; a++) {
n += String.fromCharCode.apply(null, r.slice(a * 8192, (a + 1) * 8192));
}
return n;
}, this._rtcp = e;
}
_createClass(Workers, [{
key: "registerLogger",
value: function registerLogger(e) {//defaultLogger = e
}
}, {
key: "registerFunction",
value: function registerFunction(e, t) {
this.functionMap.set(e, t);
}
}, {
key: "hasFrmCntInCache",
value: function hasFrmCntInCache(e) {
var t = -1;
for (var r = 0; r < this.cacheFrameComposes.length; r++) {
this.cacheFrameComposes[r].frameCnt == e && (t = r);
}
return t;
}
}, {
key: "requestPanoramaTest",
value: function requestPanoramaTest(e, t, r, n, o) {
var a = o,
s = {
action_type: 16,
change_rotation_render_type_action: {
render_type: 5,
player: {
position: {
x: 0,
y: 0,
z: 0
},
angle: {
yaw: 0,
pitch: 0,
roll: 0
}
},
camera: {
position: {
x: e,
y: t,
z: r
},
angle: {
yaw: 0,
pitch: 0,
roll: 0
}
},
client_pano_titles_bitmap: n
},
trace_id: a,
user_id: this.userId_test,
packet_id: a
};
defaultLogger.debug("send data: ", s), this._rtcp.sendData(s);
}
}, {
key: "onRotateInPanoMode",
value: function onRotateInPanoMode(e) {
var t = e.traceId,
r = {};
r.width = 1280, r.height = 720, r.horz_fov = 92, r.angle = {
yaw: 100,
pitch: 30
};
var n = new ArrayBuffer(8),
o = new DataView(n);
getTilesInView(r, n);
var a = n.slice(0);
this.PendingMasks.unshift({
buffer: a,
angle: r.angle
}), MaskSetToOne(18, this.PanoView), operateForDataView(o, this.PanoView, o, function (s, l) {
return s ^ s & l;
}), this.requestPanoramaTest(0, 0, 0, [o.getUint8(0), o.getUint8(1), o.getUint8(2), o.getUint8(3), o.getUint8(4), o.getUint8(5), o.getUint8(6), o.getUint8(7)], t);
}
}, {
key: "processMetaWithTraceId",
value: function processMetaWithTraceId(e) {
var _iterator = _createForOfIteratorHelper(e.traceIds),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var t = _step.value;
if (this.traceIdMap.has(t)) {
var r = this.traceIdMap.get(t);
r != null && (r.receiveTime = Date.now(), r.status = 1);
}
if (t == this.PendingMovingTraceId) {
this.inMovingMode = !0, this.MovingTraceId = this.PendingMovingTraceId, this.StartMovingTs = this.PendingStartMovingTs, this.PendingMovingTraceId = "", this.PendingStartMovingTs = 0, defaultLogger.info("MoveTo TraceId match", this.StartMovingTs, Date.now());
var _r = Date.now();
this.lastMoveResponseTime = _r, this.lastMoveProcessTime = _r, this.lastMoveDisplayTime = _r, this.frameServerCircular.clear(), this.frameClientCircular.clear();
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
}
}, {
key: "onTraceId",
value: function onTraceId(e) {
var _this2 = this;
var r = e.traceId,
n = e.timestamp,
o = e.event;
if (o === "Rotation") {
var a = {
traceId: r,
pts: 0,
startTime: n,
receiveTime: 0,
readyTime: 0,
displayTime: 0,
status: 0
};
this.traceIdMap.set(r, a);
var s = setTimeout(function () {
if (s && clearTimeout(s), _this2.traceIdMap.has(r)) {
var l = _this2.traceIdMap.get(r);
switch (l == null ? void 0 : l.status) {
case 0:
{
_this2.responseMiss += 1;
break;
}
case 1:
{
_this2.processMiss += 1;
var u = l.receiveTime - l.startTime;
_this2.responseTimeArray.push(u);
break;
}
case 2:
{
_this2.displayMiss += 1;
var _u = l.receiveTime - l.startTime,
c = l.readyTime - l.receiveTime;
_this2.responseTimeArray.push(_u), _this2.processTimeArray.push(c);
break;
}
case 3:
defaultLogger.debug("status is 3");
}
}
}, 1e3);
} else 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" ? (defaultLogger.info("receive airship traceId ", r, " at timestamp ", n), this.PendingMovingTraceId = r, this.PendingStartMovingTs = n, this.moveEvent = o, this.frameServerCircular.clear()) : (o === "GetOffAirship" || o === "GetOffVehicle") && this.clearMoveArray();
}
}, {
key: "executeFunction",
value: function executeFunction(e, t) {
if (this.functionMap.has(e)) {
var r = this.functionMap.get(e);
r != null && r(t);
}
}
}, {
key: "UpdateStats",
value: function UpdateStats(e) {
var _this3 = this;
var t;
(t = this._rtcp.connection) == null || t.getStats(null).then(function (r) {
r.forEach(function (n) {
n.type == "data-channel" && (_this3.rtcMessageReceived = n.messagesReceived - n.messagesSent, _this3.rtcBytesReceived = n.bytesReceived);
});
}), this.receivedMedia_worker = e.data.framesReceived, this.receivedYUV = e.data.framesDecoded, this.receivedEmit = e.data.framesRendered, this.mediaBytesReceived = e.data.mediaBytesReceived, this.metaBytesReceived = e.data.metaBytesReceived, this.packetsLost = e.data.packetsLost, this.packetsDrop = e.data.packetsDrop, this.framesAwait = e.data.framesAwait, this.decodeTimePerFrame = e.data.decodeTimePerFrame, this.decodeTimeMaxFrame = e.data.decodeTimeMaxFrame, this.returnFrames = e.data.framesReturned, this.sendOutBuffer = e.data.sendOutBuffer, this.DecodeJankTimes = e.data.JankTimes, this.bigDecodeJankTimes = e.data.bigJankTimes, this.receiveIframes = e.data.receivedIframe, this.decodeIframes = e.data.decodedIframe;
}
}, {
key: "ReceiveDecodeMessage",
value: function ReceiveDecodeMessage(e) {
var n;
if (!this.firstYUVReceived) {
this.firstYUVDecoded = e.data.yuv_ts;
var o = this.firstYUVDecoded - this.rtcp.network.room._startTime;
defaultLogger.infoAndReportMeasurement({
metric: "firstYUVDecodedAt",
value: o,
group: "joinRoom"
}), this.firstRender = Date.now();
var a = this.firstYUVDecoded - this.rtcp.network.room._startTime;
defaultLogger.infoAndReportMeasurement({
metric: "firstRenderAt",
value: a,
group: "joinRoom"
}), this.firstYUVReceived = !0, this.lastRenderTs = Date.now();
}
!this.cachedRender[this.setPtr] && this.cachedMetas[this.setPtr] != null && (this.cachedStreams[this.setPtr] != null && this.cachedStreams[this.setPtr].byteLength != 0 && (e.data.data == null ? (this.executeFunction("stream", {
stream: this.cachedStreams[this.setPtr],
width: this.cachedResolution[this.setPtr].width,
height: this.cachedResolution[this.setPtr].height,
pts: this.cachedPtss[this.setPtr]
}), this.executeFunction("signal", {
signal: this.cachedMetas[this.setPtr],
pts: this.cachedPtss[this.setPtr],
alreadyUpdateYUV: !0
})) : this.updateDropFrame += 1, this.decoderWorker.postMessage({
t: 2,
frameCnt: this.cachedPtss[this.setPtr],
buffer: this.cachedStreams[this.setPtr]
}, [this.cachedStreams[this.setPtr].buffer])), this.getPtr = (this.getPtr + 1) % this.cachedLength);
var t = e.data.metadata;
if ((n = t == null ? void 0 : t.traceIds) != null && n.length) {
var _iterator2 = _createForOfIteratorHelper(t.traceIds),
_step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var _o = _step2.value;
if (this.traceIdMap.has(_o)) {
var _a = this.traceIdMap.get(_o);
_a != null && (_a.readyTime = Date.now(), _a.status = 2);
}
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
}
if (e.data.pts == this.moveStartPts && (this.MoveProcessDelay = Date.now() - this.StartMovingTs), this.userId_test = this.rtcp.network.room.userId, this.inMovingMode) {
var _o2 = Date.now(),
_a2 = _o2 - this.lastMoveProcessTime;
this.moveProcessCircular.add(_a2), this.lastMoveProcessTime = _o2;
}
var r = this.setPtr;
this.cachedStreams[r] = e.data.data, this.cachedMetas[r] = e.data.metadata, this.cachedPtss[r] = e.data.pts, this.cachedRender[r] = !1, this.cachedResolution[r] = {
width: e.data.width,
height: e.data.height
}, this.setPtr = (this.setPtr + 1) % this.cachedLength;
}
}, {
key: "SendCacheFrameInfo",
value: function SendCacheFrameInfo(e) {
var _this4 = this;
var h, f, d, _, g, m, v;
var t = e.data.cachedKey,
r = e.data.metadata,
n = t,
o = r,
a = (d = (f = (h = o.newUserStates) == null ? void 0 : h.find(function (y) {
return y.userId === _this4.rtcp.network.room.userId;
})) == null ? void 0 : f.playerState) == null ? void 0 : d.roomTypeId,
s = this.rtcp.network.room.skinId,
l = (v = (m = (g = (_ = o.newUserStates) == null ? void 0 : _.find(function (y) {
return y.userId === _this4._rtcp.network.room.userId;
})) == null ? void 0 : g.playerState) == null ? void 0 : m.player) == null ? void 0 : v.position,
u = {
MsgType: 1,
FrameCacheMsg: {
FrameIndex: n,
RoomTypeId: a,
SkinID: s,
Position: l
}
};
var c = "";
try {
c = JSON.stringify(u);
} catch (y) {
defaultLogger.error(y);
return;
}
}
}, {
key: "ReceivePanoramaDecodeMessage",
value: function ReceivePanoramaDecodeMessage(e) {
defaultLogger.info("Receive Panorama Image in Workers.ts"), MaskSetToOne(e.data.tileId, this.PanoView);
var t = 0,
r;
var n = this.PendingMasks.length;
for (t = 0; t < n; t++) {
var o = this.PendingMasks[t].buffer,
a = new DataView(o),
s = new ArrayBuffer(8),
l = new DataView(s);
if (operateForDataView(this.PanoView, a, l, function (u, c) {
return c ^ u & c;
}), IsAll0(l)) {
r = this.PendingMasks[t].angle;
break;
}
}
for (var _o3 = t; _o3 < n; _o3++) {
this.PendingMasks.pop();
}
this.executeFunction("panorama", {
data: e.data.data,
tileId: e.data.tileId,
pos: {
x: e.data.x,
y: e.data.y,
z: e.data.z
},
uuid: e.data.uuid,
finished: !0,
matchAngle: r
});
}
}, {
key: "enable_decoder_queue_logging",
value: function enable_decoder_queue_logging() {
this.decoderWorker.postMessage({
t: 100,
status: !0
});
}
}, {
key: "disable_decoder_queue_logging",
value: function disable_decoder_queue_logging() {
this.decoderWorker.postMessage({
t: 100,
status: !1
});
}
}, {
key: "init",
value: function () {
var _init = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() {
var _this5 = this;
var e,
r,
n,
t,
_args = arguments;
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
e = _args.length > 0 && _args[0] !== undefined ? _args[0] : {
width: 1280,
height: 720
};
for (r = 0; r < FRAME_COMPOSE_LENGTH; r++) {
n = {
buffer: new Uint8Array(2621440),
size: 0,
startReceiveTime: 0,
serverTime: 0,
frameCnt: -1
};
this.cacheFrameComposes.push(n);
}
t = new Blob([decoder], {
type: "application/javascript"
});
return _context.abrupt("return", (this.decoderWorker = new Worker(URL.createObjectURL(t)), this.decoderWorker.postMessage({
t: 9,
url: WASM_URLS[WASM_Version],
jitterLength: DECODER_PASSIVE_JITTER
}), this.decoderWorker.postMessage({
t: 1,
config: e
}), new Promise(function (r) {
_this5.decoderWorker.onmessage = function (n) {
switch (n.data.t) {
case 0:
_this5.ReceiveDecodeMessage(n);
break;
case 1:
_this5.UpdateStats(n);
break;
case 2:
r();
break;
case 3:
_this5.SendCacheFrameInfo(n);
break;
case 4:
{
var o = new Date().toISOString(),
a = USER_ID + "-" + PAGE_SESSION + "-" + SERVER_SESSION + "-" + o + ".264";
uploadStream(COS_PREFIX + a, n.data.fileObj);
break;
}
case 5:
_this5.executeFunction("signal", {
signal: n.data.metadata,
pts: -1,
alreadyUpdateYUV: !1
});
break;
case 6:
defaultLogger.infoAndReportMeasurement(n.data), defaultLogger.debug("WASM Ready Cost");
break;
case 7:
_this5.ReceivePanoramaDecodeMessage(n);
break;
case 8:
{
var _o4 = {
MstType: 0
};
var _a3 = "";
try {
_a3 = JSON.stringify(_o4);
} catch (l) {
defaultLogger.error(l);
return;
}
var s = "wasm:" + _a3;
_this5._rtcp.sendStringData(s);
break;
}
case 9:
{
defaultLogger.info(n.data.printMsg);
break;
}
case 10:
{
defaultLogger.error(n.data.printMsg), _this5.executeFunction("error", {
code: n.data.code,
message: n.data.printMsg
});
break;
}
default:
defaultLogger.error("Receive unknown message event from decoder"), defaultLogger.debug(n.data);
break;
}
};
})));
case 4:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function init() {
return _init.apply(this, arguments);
}
return init;
}()
}, {
key: "UpdateYUV",
value: function UpdateYUV() {
var t, r;
var e = this.getPtr;
if (this.cachedMetas[e] != null && !this.cachedRender[e]) {
var n = Date.now();
if (this.firstUpdateYUV) {
var h = ((t = this.cachedStreams[e]) == null ? void 0 : t.byteLength) || 0;
defaultLogger.infoAndReportMeasurement({
metric: "firstUpdateStreamLength",
value: h,
group: "joinRoom"
}), this.firstUpdateYUV = !1;
}
this.cachedStreams[e] != null && this.executeFunction("stream", {
stream: this.cachedStreams[e],
width: this.cachedResolution[e].width,
height: this.cachedResolution[e].height,
pts: this.cachedPtss[e]
});
var o = Date.now();
this.cachedStreams[e] != null && this.decoderWorker.postMessage({
t: 2,
frameCnt: this.cachedPtss[e],
buffer: this.cachedStreams[e]
}, [this.cachedStreams[e].buffer]);
var a = Date.now(),
s = o - n,
l = a - o;
(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;
var u = o - n;
this.updateYUVCircular.add(u);
var c = this.cachedMetas[e];
if ((r = c == null ? void 0 : c.traceIds) != null && r.length) {
var _iterator3 = _createForOfIteratorHelper(c.traceIds),
_step3;
try {
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
var _h = _step3.value;
if (this.traceIdMap.has(_h)) {
var f = this.traceIdMap.get(_h);
if (f != null) {
f.displayTime = Date.now(), f.status = 3;
var d = f.receiveTime - f.startTime,
_ = f.readyTime - f.receiveTime,
g = f.displayTime - f.readyTime,
m = f.displayTime - f.startTime;
this.responseTimeArray.push(d), this.processTimeArray.push(_), this.displayTimeArray.push(g), this.overallTimeArray.push(m), this.traceIdMap.delete(_h);
}
}
}
} catch (err) {
_iterator3.e(err);
} finally {
_iterator3.f();
}
}
if (this.cachedPtss[e] == this.moveStartPts && (this.MoveDisplayDelay = Date.now() - this.StartMovingTs), this.inMovingMode) {
var _h2 = Date.now(),
_f = _h2 - this.lastMoveDisplayTime;
this.moveDisplayCircular.add(_f), this.lastMoveDisplayTime = _h2;
}
this.executeFunction("signal", {
signal: this.cachedMetas[e],
pts: this.cachedPtss[e],
alreadyUpdateYUV: !0
}), this.cachedRender[e] = !0, this.getPtr = (this.getPtr + 1) % this.cachedLength;
}
}
}, {
key: "unmarshalPano",
value: function unmarshalPano(e) {
var t = new DataView(e);
if (t.getUint32(0) != 1723558763) return !1;
console.log("Receive Pano Message"), t.getUint16(4);
var n = t.getUint16(6),
o = t.getUint32(8),
a = t.getUint32(12) - (1 << 30) * 2,
s = t.getUint32(16) - (1 << 30) * 2,
l = t.getUint32(20) - (1 << 30) * 2,
u = t.getUint32(24),
c = new Uint8Array(e).subarray(28, 64),
h = String.fromCharCode.apply(null, c),
f = t.getUint32(64),
d = e.byteLength - n;
if (d == u) {
var g = {
data: new Uint8Array(e).subarray(n),
mediaLen: u,
tileId: o,
uuid: h,
x: a,
y: s,
z: l
};
this.decoderWorker.postMessage({
t: 8,
data: g
});
} else {
var _ = new Uint8Array(e, n, d);
if (this.cachePanoTileID == o) {
if (this.panoCacheBuffer.set(_, f), this.panoCacheSize += d, this.panoCacheSize === u) {
var m = {
data: new Uint8Array(this.panoCacheBuffer).slice(0, u),
mediaLen: u,
tileId: o,
uuid: h,
x: a,
y: s,
z: l
};
this.decoderWorker.postMessage({
t: 8,
data: m
}), this.panoCacheSize = 0;
}
} else this.panoCacheBuffer.set(_, f), this.panoCacheSize = d, this.cachePanoTileID = o;
}
return !0;
}
}, {
key: "clearMoveArray",
value: function clearMoveArray() {
this.MovingTraceId = "", this.inMovingMode = !1, this.StartMovingTs = 0, this.MoveToFrameCnt = 0, this.MoveResponseDelay = 0, this.MoveProcessDelay = 0, this.MoveDisplayDelay = 0, this.moveStartPts = -1, this.moveResponseCircular.clear(), this.moveProcessCircular.clear(), this.moveDisplayCircular.clear(), this.moveEvent = "";
}
}, {
key: "getIsMoving",
value: function getIsMoving(e) {
var t;
if (typeof e.newUserStates != "undefined") for (var r = 0; r < e.newUserStates.length; r++) {
var n = e.newUserStates[r];
if (n.userId == this.rtcp.network.room.userId) {
t = n.renderInfo.isMoving;
break;
}
}
return t;
}
}, {
key: "isHeartBeatPacket",
value: function isHeartBeatPacket(e, t) {
return new DataView(e).getUint32(0) == 2009889916;
}
}, {
key: "resetSendTimeDiff",
value: function resetSendTimeDiff() {
this.prevSenderTs = 0, this.serverSendTimeArray.clear();
}
}, {
key: "calcSendTimeDiff",
value: function calcSendTimeDiff(e) {
if (this.prevSenderTs == -1) {
this.prevSenderTs = e;
return;
}
var t = e - this.prevSenderTs;
this.serverSendTimeArray.add(t), this.prevSenderTs = e;
}
}, {
key: "unmarshalStream",
value: function unmarshalStream(e) {
var _this6 = this;
var T, C, A, S, P, R, M, x, I, w;
var t = new DataView(e);
if (t.getUint32(0) != 1437227610) return !1;
t.getUint16(4);
var n = t.getUint16(6),
o = t.getUint16(8),
a = o,
s = t.getUint16(10);
var l = !1;
s == 1 && (l = !0);
var u = t.getUint32(12),
c = t.getUint32(16),
h = t.getUint32(20),
f = t.getUint16(24),
d = t.getUint16(26),
_ = t.getUint32(28),
g = t.getUint32(n - 4),
m = u + c,
v = e.byteLength - n,
y = new Uint8Array(e, n, v);
this.calcSendTimeDiff(h);
var b;
if (this.inPanoMode && (c > 0 || f)) return defaultLogger.error("Stream Protocal Violation: receive illegal stream in Pano mode"), !0;
if (v === m) {
this.receivedMedia++;
var O = new Uint8Array(e).subarray(n);
h - this.lastServerTS > 60 ? this.serverFrameSlow++ : h - this.lastServerTS < 16 && this.serverFrameFast++;
var D = Date.now();
D - this.lastClientTS > 60 ? this.clientFrameSlow++ : D - this.lastClientTS < 16 && this.clientFrameFast++;
var F = c === 0,
V = h - this.lastServerTS;
this.lastServerTS != 0 && ((o + 65536 - this.lastSeq) % 65536 === 1 && this.lastIsPureMeta == F && (F ? this.srvMetaIntervalCircular.add(V) : this.srvMediaIntervalCircular.add(V)), this.frameServerCircular.add(V), this.frameClientCircular.add(D - this.lastClientTS)), this.lastSeq = o, this.lastIsPureMeta = F, this.lastServerTS = h, this.lastClientTS = D;
var N = O.subarray(0, u),
L = Date.now(),
k = JSON.parse(this.Stringify(N)),
U = Date.now();
this.showAllReceivedMetadata && console.log(h, D, k), this.metaParseAraay.push(U - L), (T = k.traceIds) != null && T.length && this.processMetaWithTraceId(k), c != 0 && this.moveStartPts == -1 && this.inMovingMode && (this.moveStartPts = o), this.moveStartPts == o && (this.MoveResponseDelay = Date.now() - this.StartMovingTs, console.log("move response delay: ", o, this.moveStartPts, this.MoveResponseDelay));
var z = this.getIsMoving(k);
if (this.inMovingMode && z == 0 && this.lastIsMoving == 1 && this.clearMoveArray(), typeof z != "undefined" && (this.lastIsMoving = z), this.inMovingMode) {
var G = Date.now(),
W = G - this.lastMoveResponseTime;
this.moveResponseCircular.add(W), this.lastMoveResponseTime = G;
}
(f || d) && (b = (P = (S = (A = (C = k.newUserStates) == null ? void 0 : C.find(function (G) {
return G.userId === _this6._rtcp.network.room.userId;
})) == null ? void 0 : A.playerState) == null ? void 0 : S.player) == null ? void 0 : P.position);
var H = {
t: 0,
data: O,
mediaLen: c,
metaLen: u,
metadata: k,
frameCnt: a,
server_ts: h,
isIDR: l,
cacheRequest: d,
cached: f,
cachedKey: _,
position: b
};
if (this.inPanoMode) return this.executeFunction("signal", {
signal: k,
pts: -1,
alreadyUpdateYUV: !0
}), !0;
if (this.decoderWorker.postMessage(H, [O.buffer]), !this.firstMediaReceived) {
this.firstMediaArraval = Date.now();
var _G = this.firstMediaArraval - this.rtcp.network.room._startTime;
defaultLogger.infoAndReportMeasurement({
metric: "firstMediaArravalAt",
value: _G,
group: "joinRoom"
}), this.firstMediaReceived = !0;
}
} else {
var _O = this.hasFrmCntInCache(a);
if (_O != -1) {
if (this.cacheFrameComposes[_O].buffer.set(y, g), this.cacheFrameComposes[_O].size += v, this.cacheFrameComposes[_O].size === m) {
var _D = new Uint8Array(this.cacheFrameComposes[_O].buffer).slice(0, m);
this.cacheFrameComposes[_O].frameCnt = -1, this.cacheFrameComposes[_O].size = 0, this.cacheFrameComposes[_O].startReceiveTime = 0, this.cacheFrameComposes[_O].serverTime = 0, this.receivedMedia++, h - this.lastServerTS > 60 ? this.serverFrameSlow++ : h - this.lastServerTS < 16 && this.serverFrameFast++;
var _F = Date.now();
_F - this.lastClientTS > 60 ? this.clientFrameSlow++ : _F - this.lastClientTS < 16 && this.clientFrameFast++, this.lastServerTS != 0 && (this.frameServerCircular.add(h - this.lastServerTS), this.frameClientCircular.add(_F - this.lastClientTS)), this.lastServerTS = h, this.lastClientTS = _F;
var _V = _D.subarray(0, u),
_N = Date.now(),
_L = JSON.parse(this.Stringify(_V)),
_k = Date.now();
this.showAllReceivedMetadata && console.log(h, _F, _L), this.metaParseAraay.push(_k - _N), (R = _L.traceIds) != null && R.length && this.processMetaWithTraceId(_L), c != 0 && this.moveStartPts == -1 && this.inMovingMode && (this.moveStartPts = o), this.moveStartPts == o && (this.MoveResponseDelay = Date.now() - this.StartMovingTs);
var _U = this.getIsMoving(_L);
if (this.inMovingMode && _U == 0 && this.lastIsMoving == 1 && this.clearMoveArray(), typeof _U != "undefined" && (this.lastIsMoving = _U), this.inMovingMode) {
var _H = Date.now(),
_G2 = _H - this.lastMoveResponseTime;
this.moveResponseCircular.add(_G2), this.lastMoveResponseTime = _H;
}
(f || d) && (b = (w = (I = (x = (M = _L.newUserStates) == null ? void 0 : M.find(function (H) {
return H.userId === _this6._rtcp.network.room.userId;
})) == null ? void 0 : x.playerState) == null ? void 0 : I.player) == null ? void 0 : w.position);
var _z = {
t: 0,
data: _D,
mediaLen: c,
metaLen: u,
metadata: _L,
frameCnt: a,
server_ts: h,
isIDR: l,
cacheRequest: d,
cached: f,
cachedKey: _,
position: b
};
if (this.inPanoMode) return this.executeFunction("signal", {
signal: _L,
pts: -1,
alreadyUpdateYUV: !0
}), !0;
if (this.decoderWorker.postMessage(_z, [_D.buffer]), !this.firstMediaReceived) {
this.firstMediaArraval = Date.now();
var _H2 = this.firstMediaArraval - this.rtcp.network.room._startTime;
defaultLogger.infoAndReportMeasurement({
metric: "firstMediaArravalAt",
value: _H2,
group: "joinRoom"
}), this.firstMediaReceived = !0;
}
} else this.cacheFrameComposes[_O].size > m && defaultLogger.debug("I frame exceed, cache size is ", this.cacheSize, ", total size is ", m);
} else if (_O == -1) {
var _D2 = this.hasFrmCntInCache(-1);
if (_D2 == -1) {
var _F2 = Date.now() + 1e18,
_V2 = -1;
for (var _N2 = 0; _N2 < this.cacheFrameComposes.length; _N2++) {
this.cacheFrameComposes[_N2].serverTime < _F2 && (_F2 = this.cacheFrameComposes[_N2].serverTime, _V2 = _N2);
}
_D2 = _V2;
}
this.cacheFrameComposes[_D2].buffer.set(y, g), this.cacheFrameComposes[_D2].size = v, this.cacheFrameComposes[_D2].frameCnt = a, this.cacheFrameComposes[_D2].startReceiveTime = Date.now(), this.cacheFrameComposes[_D2].serverTime = h;
}
}
return !0;
}
}, {
key: "reset",
value: function reset() {
defaultLogger.debug("Worker reset is called"), this.cacheFrameCnt = 0, this.receivedMedia = 0, this.reconnectSignal = !0, this.decoderWorker.postMessage({
t: 4
});
}
}, {
key: "dataHandleOff",
value: function dataHandleOff(e) {
defaultLogger.debug("hhh");
}
}, {
key: "dataHandle",
value: function dataHandle(e) {
this.saveframe && (this.decoderWorker.postMessage({
t: 6
}), this.saveframe = !1), this.SaveMediaStream && (this.decoderWorker.postMessage({
t: 7
}), this.SaveMediaStream = !1);
var t = new Uint8Array(e);
if (t.length >= 4 && this.isHeartBeatPacket(t.buffer, t.length) == !0) return;
if (t.length > 36 && this.unmarshalStream(t.buffer) == !0) {
this.reconnectSignal && (this.executeFunction("reconnectedFrame", {}), this.reconnectSignal = !1);
return;
}
if (t.length > 20 && this.unmarshalPano(t.buffer) == !0) return;
this.noWasmBytesReceived += e.byteLength;
var r = JSON.parse(this.Stringify(t));
this.executeFunction("signal", {
signal: r,
pts: -1,
alreadyUpdateYUV: !0
});
}
}, {
key: "changePanoMode",
value: function changePanoMode(e) {
this.inPanoMode = e;
}
}, {
key: "uploadDataToServer",
value: function uploadDataToServer() {
this.DynamicPanoTest == !0 && (this.onRotateInPanoMode({
traceId: "b2e1a296-6438-4371-8a31-687beb724ebe"
}), this.DynamicPanoTest = !1);
function e(ie, ee) {
return ee == -1 && (ee = 0), ie + ee;
}
function t(ie, ee) {
return Math.max(ie, ee);
}
var r = this.responseTimeArray.reduce(e, 0) / this.responseTimeArray.length || 0,
n = this.processTimeArray.reduce(e, 0) / this.processTimeArray.length || 0,
o = this.displayTimeArray.reduce(e, 0) / this.displayTimeArray.length || 0,
a = this.overallTimeArray.reduce(e, 0) / this.overallTimeArray.length || 0,
s = this.overallTimeArray.length;
this.responseTimeArray = [], this.processTimeArray = [], this.displayTimeArray = [], this.overallTimeArray = [];
var l = this.moveResponseCircular.getThreshPercent(),
u = l[0],
c = l[1],
h = l[2],
f = l[3],
d = l[4],
_ = d - f,
g = 1 - c / d || 0,
m = [u, c - u, h - c, f - h, _],
v = this.moveProcessCircular.getThreshPercent(),
y = v[0],
b = v[1],
T = v[2],
C = v[3],
A = v[4],
S = A - C,
P = 1 - b / A || 0,
R = [y, b - y, T - b, C - T, S],
M = this.moveDisplayCircular.getThreshPercent(),
x = M[0],
I = M[1],
w = M[2],
O = M[3],
D = M[4],
F = D - O,
V = 1 - I / D || 0,
N = [x, I - x, w - I, O - w, F],
L = x,
k = I - x,
U = w - I,
z = O - w,
H = F,
G = this.moveResponseCircular.getAvg(),
W = this.moveProcessCircular.getAvg(),
j = this.moveDisplayCircular.getAvg(),
B = this.moveResponseCircular.getMax(),
X = this.moveProcessCircular.getMax(),
$ = this.moveDisplayCircular.getMax(),
Y = this.moveResponseCircular.getStandardDeviation(),
K = this.moveProcessCircular.getStandardDeviation(),
Z = this.moveDisplayCircular.getStandardDeviation();
this.moveResponseCircular.getIncomingAvg(), this.moveProcessCircular.getIncomingAvg(), this.moveDisplayCircular.getIncomingAvg(), this.moveResponseCircular.getIncomingMax(), this.moveProcessCircular.getIncomingMax(), this.moveDisplayCircular.getIncomingMax(), this.moveResponseCircular.clearIncoming(), this.moveProcessCircular.clearIncoming(), this.moveDisplayCircular.clearIncoming();
var q = this.frameServerCircular.getAvg(),
J = this.frameServerCircular.getMax();
this.frameClientCircular.getAvg(), this.frameClientCircular.getMax();
var Q = this.metaParseAraay.reduce(e, 0) / this.metaParseAraay.length || 0,
te = this.metaParseAraay.reduce(t, 0);
this.metaParseAraay = [];
var re = {
mediaBytesReceived: this.mediaBytesReceived,
metaBytesReceived: this.metaBytesReceived,
packetsLost: this.packetsLost,
timestamp: Date.now(),
frameHeight: 1280,
frameWidth: 720,
framesReceived: this.receivedMedia,
framesReceivedWorker: this.receivedMedia_worker,
framesDecoded: this.receivedYUV,
framesEmited: this.receivedEmit,
decodeTimePerFrame: this.decodeTimePerFrame,
decodeTimeMaxFrame: this.decodeTimeMaxFrame,
packetsDrop: this.packetsDrop,
framesAwait: this.framesAwait,
firstMediaArraval: this.firstMediaArraval,
firstYUVDecoded: this.firstYUVDecoded,
firstRender: this.firstRender,
returnFrames: this.returnFrames,
sendOutBuffer: this.sendOutBuffer,
maxGraphicTime: this.updateYUVCircular.getMax(),
averageGraphicTime: this.updateYUVCircular.getAvg(),
jankTimes: this.JankTimes,
bigJankTimes: this.bigJankTimes,
decodeJankTimes: this.DecodeJankTimes,
bigDecodeJankTimes: this.bigDecodeJankTimes,
serverFrameSlow: this.serverFrameSlow,
serverFrameFast: this.serverFrameFast,
clientFrameSlow: this.clientFrameSlow,
clientFrameFast: this.clientFrameFast,
rtcMessageReceived: this.rtcMessageReceived,
rtcBytesReceived: this.rtcBytesReceived - this.noWasmBytesReceived,
receiveIframes: this.receiveIframes,
decodeIframes: this.decodeIframes,
avgResponseTime: r,
avgProcessTime: n,
avgDisplayTime: o,
avgOverallTime: a,
overallTimeCount: s,
responseMiss: this.responseMiss,
processMiss: this.processMiss,
displayMiss: this.displayMiss,
updateDropFrame: this.updateDropFrame,
moveEvent: this.moveEvent,
avgResponseMoveDiff: this.moveEvent == "MoveTo" ? G : 0,
avgProcessMoveDiff: this.moveEvent == "MoveTo" ? W : 0,
avgDisplayMoveDiff: this.moveEvent == "MoveTo" ? j : 0,
maxResponseMoveDiff: this.moveEvent == "MoveTo" ? B : 0,
maxProcessMoveDiff: this.moveEvent == "MoveTo" ? X : 0,
maxDisplayMoveDiff: this.moveEvent == "MoveTo" ? $ : 0,
moveResponseJank: this.moveEvent == "MoveTo" ? g : 0,
moveProcessJank: this.moveEvent == "MoveTo" ? P : 0,
moveDisplayJank: this.moveEvent == "MoveTo" ? V : 0,
moveResponseCounts: this.moveEvent == "MoveTo" ? m.toString() : "0,0,0,0,0",
moveProcessCounts: this.moveEvent == "MoveTo" ? R.toString() : "0,0,0,0,0",
moveDisplayCounts: this.moveEvent == "MoveTo" ? N.toString() : "0,0,0,0,0",
MoveDisplayCountGood: this.moveEvent == "MoveTo" ? L.toString() : "0",
MoveDisplayCountWell: this.moveEvent == "MoveTo" ? k.toString() : "0",
MoveDisplayCountFair: this.moveEvent == "MoveTo" ? U.toString() : "0",
MoveDisplayCountBad: this.moveEvent == "MoveTo" ? z.toString() : "0",
MoveDisplayCountRest: this.moveEvent == "MoveTo" ? H.toString() : "0",
moveResponseDelay: this.moveEvent == "MoveTo" ? this.MoveResponseDelay : 0,
moveProcessDelay: this.moveEvent == "MoveTo" ? this.MoveProcessDelay : 0,
moveDisplayDelay: this.moveEvent == "MoveTo" ? this.MoveDisplayDelay : 0,
sdMoveResponseLongTime: Y,
sdMoveProcessLongTime: K,
sdMoveDisplayLongTime: Z,
avgResponseFlyDiff: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? G : 0,
avgProcessFlyDiff: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? W : 0,
avgDisplayFlyDiff: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? j : 0,
maxResponseFlyDiff: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? B : 0,
maxProcessFlyDiff: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? X : 0,
maxDisplayFlyDiff: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? $ : 0,
flyResponseJank: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? g : 0,
flyProcessJank: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? P : 0,
flyDisplayJank: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? V : 0,
flyResponseCounts: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? m.toString() : "0,0,0,0,0",
flyProcessCounts: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? R.toString() : "0,0,0,0,0",
flyDisplayCounts: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? N.toString() : "0,0,0,0,0",
flyResponseDelay: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? this.MoveResponseDelay : 0,
flyProcessDelay: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? this.MoveProcessDelay : 0,
flyDisplayDelay: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? this.MoveDisplayDelay : 0,
avgMetaParseTime: Q,
maxMetaParseTime: te,
avgServerDiff: q,
maxServerDiff: J,
streamType: WASM_Version
};
return this.lastReturnFrames = this.returnFrames, this.lastReceivedEmit = this.receivedEmit, re;
}
}]);
return Workers;
}();
function _createSuper$5(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$5(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$5() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var Rtcp = /*#__PURE__*/function (_EventEmitter) {
_inherits(Rtcp, _EventEmitter);
var _super = _createSuper$5(Rtcp);
function Rtcp(e) {
var _this;
_classCallCheck(this, Rtcp);
_this = _super.call(this);
_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(_assertThisInitialized(_this));
_this.workers.registerLogger();
_this.workers.registerFunction("data", function (t) {
_this.emit("data", t);
}), _this.heartbeat = new Heartbeat({
ping: function ping(t) {
e.room.actionsHandler.echo(t);
},
pong(t, r) {
var n;
r && t > 500 && logger.warn("high hb value ".concat(t, ", traceId:") + r), (n = e.room.stats) == null || n.assign({
hb: t
});
}
});
return _this;
}
_createClass(Rtcp, [{
key: "onIcecandidate",
value: function onIcecandidate(e) {
if (e.candidate != null) {
var t = JSON.stringify(e.candidate);
logger.debug("Got ice candidate: ".concat(t)), this.network.socket.send({
id: "ice_candidate",
data: btoa(t)
});
}
}
}, {
key: "onIcecandidateerror",
value: function onIcecandidateerror(e) {
logger.error("onicecandidateerror", e.errorCode, e.errorText, e);
}
}, {
key: "onIceStateChange",
value: function onIceStateChange(e) {
switch (e.target.iceGatheringState) {
case "gathering":
logger.info("ice gathering");
break;
case "complete":
logger.info("Ice gathering completed");
}
}
}, {
key: "onIceConnectionStateChange",
value: function onIceConnectionStateChange() {
if (!!this.connection) switch (logger.info("iceConnectionState: ".concat(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;
}
}
}
}, {
key: "setRemoteDescription",
value: function () {
var _setRemoteDescription = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e, t) {
var a, s, l, r, n, o, u;
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (this.connection) {
_context.next = 2;
break;
}
return _context.abrupt("return");
case 2:
r = JSON.parse(atob(e)), n = new RTCSessionDescription(r);
_context.next = 5;
return this.connection.setRemoteDescription(n);
case 5:
_context.next = 7;
return this.connection.createAnswer();
case 7:
o = _context.sent;
if (o.sdp = (a = o.sdp) == null ? void 0 : a.replace(/(a=fmtp:111 .*)/g, "$1;stereo=1;sprop-stereo=1"), ((l = (s = o.sdp) == null ? void 0 : s.match(/a=mid:1/g)) == null ? void 0 : l.length) == 2) {
u = o.sdp.lastIndexOf("a=mid:1");
o.sdp = o.sdp.slice(0, u) + "a=mid:2" + o.sdp.slice(u + 7);
}
_context.prev = 9;
_context.next = 12;
return this.connection.setLocalDescription(o);
case 12:
_context.next = 17;
break;
case 14:
_context.prev = 14;
_context.t0 = _context["catch"](9);
logger.error("error", _context.t0);
case 17:
this.isAnswered = !0, this.network.rtcp.flushCandidate(), this.network.socket.send({
id: "answer",
data: btoa(JSON.stringify(o))
}), t.srcObject = this.mediaStream;
case 18:
case "end":
return _context.stop();
}
}
}, _callee, this, [[9, 14]]);
}));
function setRemoteDescription(_x, _x2) {
return _setRemoteDescription.apply(this, arguments);
}
return setRemoteDescription;
}()
}, {
key: "flushCandidate",
value: function flushCandidate() {
var _this2 = this;
this.isFlushing || !this.isAnswered || (this.isFlushing = !0, this.candidates.forEach(function (e) {
var t = atob(e),
r = JSON.parse(t);
if (/172\./.test(r.candidate)) return;
var n = new RTCIceCandidate(r);
_this2.connection && _this2.connection.addIceCandidate(n).then(function () {}, function (o) {
logger.info("add candidate failed", o);
});
}), this.isFlushing = !1);
}
}, {
key: "input",
value: function input(e) {
var t;
!this.actived || !this.inputChannel || this.inputChannel.readyState === "open" && ((t = this.inputChannel) == null || t.send(e));
}
}, {
key: "start",
value: function start() {
var _this3 = this;
this.connection = new RTCPeerConnection();
var e = Date.now();
this.connection.ondatachannel = function (t) {
logger.info("ondatachannel: ".concat(t.channel.label)), _this3.inputChannel = t.channel, _this3.inputChannel.onopen = function () {
var r;
logger.info("The input channel has opened, id:", (r = _this3.inputChannel) == null ? void 0 : r.id), _this3.inputReady = !0, _this3.emit("rtcConnected"), _this3.network.room.currentNetworkOptions.reconnect || (logger.infoAndReportMeasurement({
metric: "datachannelOpenedAt",
startTime: _this3.network.room._startTime,
group: "joinRoom"
}), logger.infoAndReportMeasurement({
metric: "datachannelOpenedCost",
startTime: e,
group: "joinRoom"
}));
}, _this3.inputChannel.onclose = function () {
var r;
return logger.info("The input channel has closed, id:", (r = _this3.inputChannel) == null ? void 0 : r.id);
}, _this3.inputChannel.onmessage = function (r) {
_this3.workers.dataHandle(r.data);
};
}, this.connection.oniceconnectionstatechange = this.onIceConnectionStateChange, this.connection.onicegatheringstatechange = this.onIceStateChange, this.connection.onicecandidate = this.onIcecandidate, this.connection.onicecandidateerror = this.onIcecandidateerror, this.network.socket.send({
id: "init_webrtc",
data: JSON.stringify({
is_mobile: !0
})
});
}
}, {
key: "addCandidate",
value: function addCandidate(e) {
e === "" ? this.network.rtcp.flushCandidate() : this.candidates.push(e);
}
}, {
key: "disconnect",
value: function disconnect() {
var e, t, r;
this.heartbeat.stop(), 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, this.inputChannel = null;
}
}, {
key: "sendStringData",
value: function sendStringData(e) {
this.input(e);
}
}, {
key: "sendData",
value: function sendData(e) {
var t = "";
try {
t = JSON.stringify(e);
} catch (r) {
logger.error(r);
return;
}
this.input(t);
}
}]);
return Rtcp;
}(EventEmitter);
var NetworkMonitor = /*#__PURE__*/function () {
function NetworkMonitor(e) {
_classCallCheck(this, NetworkMonitor);
this._listener = e;
}
_createClass(NetworkMonitor, [{
key: "isOnline",
get: function get() {
var e = window.navigator;
return typeof e.onLine == "boolean" ? e.onLine : !0;
}
}, {
key: "start",
value: function start() {
window.addEventListener("online", this._listener), window.addEventListener("offline", this._listener);
}
}, {
key: "stop",
value: function stop() {
window.removeEventListener("online", this._listener), window.removeEventListener("offline", this._listener);
}
}]);
return NetworkMonitor;
}();
var Stream = /*#__PURE__*/function () {
function Stream(e) {
_classCallCheck(this, Stream);
this.el = null;
this._streamPlayTimer = null;
if (!e) {
this.el = this.createVideoElement();
return;
}
this.el = e;
}
_createClass(Stream, [{
key: "play",
value: function play() {
var _this = this;
return new Promise(function (e, t) {
_this._streamPlayTimer = new Timeout(function () {
t(new InternalError("Stream play timeout"));
}, 5e3), _this.el && _this.el.play().then(function () {
var r;
e(), logger.info("Media can autoplay"), (r = _this._streamPlayTimer) == null || r.clear();
}).catch(function (r) {
var n;
logger.error("Media Failed to autoplay"), logger.error(r), t(new InternalError("Media Failed to autoplay")), (n = _this._streamPlayTimer) == null || n.clear();
});
});
}
}, {
key: "createVideoElement",
value: function createVideoElement() {
var e = document.createElement("video");
return e.muted = !0, e.autoplay = !1, e.playsInline = !0, e.setAttribute("autostart", "false"), e.setAttribute("controls", "controls"), e.setAttribute("muted", "true"), e.setAttribute("preload", "auto"), e.setAttribute("hidden", "hidden"), document.body.appendChild(e), e;
}
}]);
return Stream;
}();
function _createSuper$4(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$4(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$4() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var workerSourceCode = "onmessage = function (event) {\n const data = event.data\n if (!data) return\n \n if (data.type === 'start') {\n const startTime = Date.now()\n const request = new XMLHttpRequest()\n request.open('GET', data.url)\n try {\n request.send()\n } catch (error) {\n console.error(error)\n }\n request.addEventListener('readystatechange', () => {\n if (request.readyState == 4) {\n if (request.status == 200) {\n postMessage(Date.now() - startTime)\n }\n }\n })\n }\n }\n ";
var NetworkController = /*#__PURE__*/function (_EventEmitter) {
_inherits(NetworkController, _EventEmitter);
var _super = _createSuper$4(NetworkController);
function NetworkController(e) {
var _this;
_classCallCheck(this, NetworkController);
_this = _super.call(this);
_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(_assertThisInitialized(_this));
_this.rtcp = new Rtcp(_assertThisInitialized(_this));
_this.stream = new Stream();
_this._networkMonitor = new NetworkMonitor(function () {
logger.info("network changed, online:", _this._networkMonitor.isOnline), _this._state === "disconnected" && _this._networkMonitor.isOnline && (logger.info("network back to online, try to reconnect"), _this.reconnect());
});
_this.checkNetworkQuality(_this.room.currentNetworkOptions.wsServerUrl);
_this._networkMonitor.start();
new VisibilityChangeHandler().subscribe(function (r) {
var n, o;
r ? ((o = _this.room.stats) == null || o.disable(), logger.infoAndReportMeasurement({
metric: "pageHide",
startTime: Date.now()
})) : ((n = _this.room.stats) == null || n.enable(), logger.infoAndReportMeasurement({
metric: "pageShow",
startTime: Date.now(),
extra: {
state: _this._state
}
}), _this._state === "disconnected" && _this.reconnect());
});
return _this;
}
_createClass(NetworkController, [{
key: "startGame",
value: function startGame() {
var _this2 = this;
return new Promise(function (e, t) {
if (!_this2.rtcp.connected) return t(new InternalError("Game cannot load. Please refresh"));
if (!_this2.rtcp.inputReady) return t(new InternalError("Game is not ready yet. Please wait"));
_this2.socket.on("gameRoomAvailable", function (r) {
_this2.setState("connected"), e(r), _this2.rtcp.heartbeat.start();
}), _this2.socket.on("socketClosed", function (r) {
t(r);
}), _this2.socket.startGame();
});
}
}, {
key: "addBlockedActions",
value: function addBlockedActions(e) {
var _this$blockedActions;
(_this$blockedActions = this.blockedActions).push.apply(_this$blockedActions, _toConsumableArray(e));
}
}, {
key: "removeBlockedActions",
value: function removeBlockedActions(e) {
if (!e) {
this.blockedActions = [];
return;
}
var t = this.blockedActions.indexOf(e);
this.blockedActions.splice(t, 1);
}
}, {
key: "setState",
value: function setState(e) {
this._state !== e && (logger.info("Set network state to ", e), this._state = e);
}
}, {
key: "connectAndStart",
value: function () {
var _connectAndStart = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) {
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
return _context.abrupt("return", this.connect(e).then(this.startGame));
case 1:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function connectAndStart(_x) {
return _connectAndStart.apply(this, arguments);
}
return connectAndStart;
}()
}, {
key: "connect",
value: function () {
var _connect = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2() {
var _this3 = this;
var e,
_args2 = arguments;
return regenerator.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
e = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : !1;
this.room.updateCurrentNetworkOptions({
reconnect: e
});
return _context2.abrupt("return", new Promise(function (t, r) {
_this3.rtcp.on("rtcConnected", function () {
_this3.setState("connected"), t();
}), _this3.rtcp.on("rtcDisconnected", function () {
logger.info("rtc disconnected"), _this3._state === "connecting" ? (_this3.setState("disconnected"), r(new InternalError("rtc connect failed"))) : (_this3.setState("disconnected"), logger.info("rtc disconnected, start to reconnect"), _this3.reconnect());
}), _this3.socket.on("socketQuit", function () {
logger.info("socket quit success"), _this3.setState("closed");
}), _this3.socket.on("socketClosed", function (n) {
_this3._state === "connecting" && (_this3.setState("disconnected"), r(n)), r(n);
}), _this3.socket.start();
}));
case 3:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function connect() {
return _connect.apply(this, arguments);
}
return connect;
}()
}, {
key: "reconnect",
value: function reconnect() {
var _this4 = this;
if (this.room.viewMode === "observer") return;
var e = Date.now();
if (this.reconnectCount++, this.reconnectCount > MAX_RECONNECT_COUNT) {
logger.error("reconnect failed, reached max reconnect count", MAX_RECONNECT_COUNT), this.reconnectCount = 0, this.emit("stateChanged", {
state: "disconnected"
});
return;
}
return logger.info("start reconnect, count:", this.reconnectCount), this._reconnect().then(function () {
logger.infoAndReportMeasurement({
startTime: e,
metric: "reconnect"
});
}).catch(function (t) {
if (logger.infoAndReportMeasurement({
startTime: e,
metric: "reconnect",
error: t
}), t.code === Codes.RepeatLogin) {
_this4.room.handleRepetLogin();
return;
}
var r = 1e3;
logger.info("reconnect failed, wait " + r + " ms for next reconnect"), setTimeout(function () {
_this4.reconnect();
}, r);
});
}
}, {
key: "_reconnect",
value: function _reconnect() {
var _this5 = this;
return this._state === "closed" ? (logger.warn("connection closed already"), Promise.reject()) : this._state === "connecting" ? (logger.warn("connection is already in connecting state"), Promise.reject()) : this._state !== "disconnected" ? Promise.reject() : (this.prepareReconnect(), this._state = "connecting", this.emit("stateChanged", {
state: "reconnecting",
count: this.reconnectCount
}), this.socket.off("gameRoomAvailable"), this.socket.off("socketClosed"), this.rtcp.off("rtcDisconnected"), this.rtcp.off("rtcConnected"), this.connectAndStart(!0).then(function (_ref) {
var e = _ref.session_id;
_this5.room.updateCurrentNetworkOptions({
sessionId: e
}), reporter.updateBody({
serverSession: e
}), logger.info("reconnect success"), _this5.setState("connected"), _this5.reconnectCount = 0, _this5.emit("stateChanged", {
state: "reconnected"
});
}));
}
}, {
key: "prepareReconnect",
value: function prepareReconnect() {
this.rtcp.disconnect(), this.socket.prepareReconnect(), this.prepareReconnectOptions();
}
}, {
key: "prepareReconnectOptions",
value: function prepareReconnectOptions() {
var _ref2 = this.room.currentClickingState || {},
e = _ref2.camera,
t = _ref2.player;
e && t && this.room.updateCurrentNetworkOptions({
camera: e,
player: t
});
}
}, {
key: "sendRtcData",
value: function sendRtcData(e) {
if (this.blockedActions.includes(e.action_type)) {
logger.info("action: ".concat(Actions[e.action_type], " was blocked"));
return;
}
this.rtcp.sendData(e);
}
}, {
key: "sendSocketData",
value: function sendSocketData(e) {
logger.debug("ws send ->", e), this.socket.send(e);
}
}, {
key: "quit",
value: function quit() {
var e = uuid$1(),
t = {
action_type: Actions.Exit,
trace_id: e,
exit_action: {},
user_id: this.room.options.userId,
packet_id: e
};
this.setState("closed"), this.socket.quit(), this.sendRtcData(t);
}
}, {
key: "checkNetworkQuality",
value: function checkNetworkQuality(i) {
var worker = null;
if (!i) return;
var e = Date.now();
if (this.pingOthers("https://www.baidu.com", function (t, r) {
logger.infoAndReportMeasurement({
metric: "baiduRtt",
group: "http",
value: r,
startTime: e
});
}), !worker) {
var t = new Blob([workerSourceCode], {
type: "application/javascript"
});
worker = new Worker(URL.createObjectURL(t)), worker.onmessage = function (r) {
logger.infoAndReportMeasurement({
metric: "workerRtt",
group: "http",
startTime: e,
value: r.data
});
};
}
}
}, {
key: "pingOthers",
value: function pingOthers(i, e) {
var t = !1;
var r = new Image();
r.onload = o, r.onerror = a;
var n = Date.now();
function o(l) {
t = !0, s();
}
function a(l) {}
function s() {
var l = Date.now() - n;
if (typeof e == "function") return t ? e(null, l) : (console.error("error loading resource"), e("error", l));
}
r.src = i + "/favicon.ico?" + +new Date();
}
}]);
return NetworkController;
}(EventEmitter);
function _createSuper$3(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$3(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$3() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var InitConfigTimeoutError = /*#__PURE__*/function (_XverseError) {
_inherits(InitConfigTimeoutError, _XverseError);
var _super = _createSuper$3(InitConfigTimeoutError);
function InitConfigTimeoutError(e) {
_classCallCheck(this, InitConfigTimeoutError);
return _super.call(this, 1009, e || "\u914D\u7F6E\u521D\u59CB\u5316\u8D85\u65F6");
}
return _createClass(InitConfigTimeoutError);
}(XverseError);
function _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$2(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$2() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var Xverse_Room = /*#__PURE__*/function (_EventEmitter) {
_inherits(Xverse_Room, _EventEmitter);
var _super = _createSuper$2(Xverse_Room);
function Xverse_Room(e) {
var _this;
_classCallCheck(this, Xverse_Room);
_this = _super.call(this);
_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(_assertThisInitialized(_this));
_this.effectManager = new XverseAvatarManager(_assertThisInitialized(_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(_assertThisInitialized(_this));
_this.stats = new Stats(_assertThisInitialized(_this));
_this.isUpdatedRawYUVData = !1;
_this.actionsHandler = new ActionsHandler(_assertThisInitialized(_this));
_this._currentClickingState = null;
_this.signal = new Signal(_assertThisInitialized(_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();
var n = e;
n.canvas;
var r = Oe(n, ["canvas"]);
logger.infoAndReportMeasurement({
metric: "startJoinRoomAt",
startTime: Date.now(),
group: "joinRoom",
extra: r,
value: 0
});
return _this;
}
_createClass(Xverse_Room, [{
key: "receiveRtcData",
value: function () {
var _receiveRtcData = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() {
var _this2 = this;
var e, t, r, n;
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
logger.info("Invoke receiveRtcData");
e = !1, t = !1, r = !1, n = !1;
return _context.abrupt("return", this.viewMode === "serverless" ? (logger.warn("set view mode to serverless"), this.setViewMode("observer").then(function () {
return _this2;
}, function () {
return _this2;
})) : new Promise(function (o) {
var a = _this2.networkController.rtcp.workers;
a.registerFunction("signal", function (s) {
_this2.signal.handleSignal(s);
}), a.registerFunction("stream", function (s) {
var l;
if (_this2.emit("streamTimestamp", {
timestamp: Date.now()
}), t || (t = !0, logger.info("Invoke stream event")), s.stream) {
r || (r = !0, logger.info("Invoke updateRawYUVData")), _this2.isUpdatedRawYUVData = !1;
var u = (l = _this2._currentState.skin) == null ? void 0 : l.fov;
_this2.sceneManager.materialComponent.updateRawYUVData(s.stream, s.width, s.height, u), _this2.isUpdatedRawYUVData = !0;
}
e || (logger.info("Invoke isAfterRenderRegistered"), e = !0, _this2.scene.registerAfterRender(function () {
_this2.engineProxy.frameRenderNumber >= 2 && (n || (n = !0, logger.info("Invoke registerAfterRender")), _this2.isFirstDataUsed || (logger.info("Invoke isStreamAvailable"), _this2.isFirstDataUsed = !0, _this2.firstFrameTimestamp = Date.now(), o(_this2), _this2.afterJoinRoom()));
}));
}), _this2.panorama.bindListener(function () {
o(_this2), _this2.afterJoinRoom();
}), a.registerFunction("reconnectedFrame", function () {}), logger.info("Invoke decoderWorker.postMessage"), a.decoderWorker.postMessage({
t: 5
});
}));
case 3:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function receiveRtcData() {
return _receiveRtcData.apply(this, arguments);
}
return receiveRtcData;
}()
}, {
key: "currentNetworkOptions",
get: function get() {
return this._currentNetworkOptions;
}
}, {
key: "viewMode",
get: function get() {
var e;
return ((e = this._currentState) == null ? void 0 : e.viewMode) || "full";
}
}, {
key: "id",
get: function get() {
return this._id;
}
}, {
key: "skinId",
get: function get() {
return this._currentState.skinId;
}
}, {
key: "skin",
get: function get() {
return this._currentState.skin;
}
}, {
key: "sessionId",
get: function get() {
return this.currentNetworkOptions.sessionId;
}
}, {
key: "pictureQualityLevel",
get: function get() {
return this.currentState.pictureQualityLevel;
}
}, {
key: "avatars",
get: function get() {
return Array.from(this.avatarManager.avatars.values());
}
}, {
key: "currentState",
get: function get() {
var e;
return le(oe({}, this._currentState), {
state: (e = this.networkController) == null ? void 0 : e._state
});
}
}, {
key: "_userAvatar",
get: function get() {
var _this3 = this;
return this.avatars.find(function (e) {
return e.userId === _this3.userId;
});
}
}, {
key: "tvs",
get: function get() {
return this.engineProxy._tvs;
}
}, {
key: "tv",
get: function get() {
return this.tvs[0];
}
}, {
key: "currentClickingState",
get: function get() {
return this._currentClickingState;
}
}, {
key: "afterJoinRoomHook",
value: function afterJoinRoomHook() {}
}, {
key: "beforeJoinRoomResolveHook",
value: function beforeJoinRoomResolveHook() {}
}, {
key: "afterReconnectedHook",
value: function afterReconnectedHook() {}
}, {
key: "handleSignalHook",
value: function handleSignalHook(e) {}
}, {
key: "skinChangedHook",
value: function skinChangedHook() {}
}, {
key: "beforeStartGameHook",
value: function () {
var _beforeStartGameHook = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2(e) {
return regenerator.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
function beforeStartGameHook(_x) {
return _beforeStartGameHook.apply(this, arguments);
}
return beforeStartGameHook;
}()
}, {
key: "loadAssetsHook",
value: function loadAssetsHook() {}
}, {
key: "afterUserAvatarLoadedHook",
value: function afterUserAvatarLoadedHook() {}
}, {
key: "audienceViewModeHook",
value: function audienceViewModeHook() {}
}, {
key: "setViewModeToObserver",
value: function setViewModeToObserver() {}
}, {
key: "handleVehicleHook",
value: function handleVehicleHook(e) {}
}, {
key: "updateReporter",
value: function updateReporter() {
var _this$options = this.options,
e = _this$options.avatarId,
t = _this$options.skinId,
r = _this$options.userId,
n = _this$options.roomId,
o = _this$options.role,
a = _this$options.appId,
s = _this$options.wsServerUrl;
reporter$1.updateHeader({
userId: r
}), reporter$1.updateBody({
roomId: n,
role: o,
skinId: t,
avatarId: e,
appId: a,
wsServerUrl: s
});
}
}, {
key: "initRoom",
value: function () {
var _initRoom2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3() {
var _this$options$timeout, e;
return regenerator.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_this$options$timeout = this.options.timeout, e = _this$options$timeout === void 0 ? DEFAULT_JOINROOM_TIMEOUT : _this$options$timeout;
if (!util.isSupported()) {
_context3.next = 5;
break;
}
return _context3.abrupt("return", this._initRoom()._timeout(e, new TimeoutError("initRoom timeout")));
case 5:
return _context3.abrupt("return", Promise.reject(new UnsupportedError()));
case 6:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function initRoom() {
return _initRoom2.apply(this, arguments);
}
return initRoom;
}()
}, {
key: "_initRoom",
value: function () {
var _initRoom3 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4() {
var e, _this$options2, t, r, n, o, a, s, l, u, c, _this$options2$isAllS, h, f, d, _, g, m, v, _this$options2$firend, y, _this$options2$syncBy, b, T, _this$options2$attitu, C, A, _this$options2$viewMo, S, P, R, M, _this$options2$hasAva, x, _this$options2$syncTo, I, _this$options2$priori, w, _this$options2$remove, O, D, F, V, N;
return regenerator.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
e = this.validateOptions(this.options);
if (!e) {
_context4.next = 3;
break;
}
return _context4.abrupt("return", (logger.error("initRoom param error", e), Promise.reject(e)));
case 3:
_this$options2 = this.options, t = _this$options2.canvas, r = _this$options2.avatarId, n = _this$options2.skinId, o = _this$options2.userId, a = _this$options2.wsServerUrl, s = _this$options2.role, l = _this$options2.token, u = _this$options2.pageSession, c = _this$options2.rotationRenderType, _this$options2$isAllS = _this$options2.isAllSync, h = _this$options2$isAllS === void 0 ? !1 : _this$options2$isAllS, f = _this$options2.appId, d = _this$options2.camera, _ = _this$options2.player, g = _this$options2.avatarComponents, m = _this$options2.nickname, v = _this$options2.avatarScale, _this$options2$firend = _this$options2.firends, y = _this$options2$firend === void 0 ? [] : _this$options2$firend, _this$options2$syncBy = _this$options2.syncByEvent, b = _this$options2$syncBy === void 0 ? !1 : _this$options2$syncBy, T = _this$options2.areaName, _this$options2$attitu = _this$options2.attitude, C = _this$options2$attitu === void 0 ? MotionType$1.Walk : _this$options2$attitu, A = _this$options2.pathName, _this$options2$viewMo = _this$options2.viewMode, S = _this$options2$viewMo === void 0 ? "full" : _this$options2$viewMo, P = _this$options2.person, R = _this$options2.roomId, M = _this$options2.roomTypeId, _this$options2$hasAva = _this$options2.hasAvatar, x = _this$options2$hasAva === void 0 ? !1 : _this$options2$hasAva, _this$options2$syncTo = _this$options2.syncToOthers, I = _this$options2$syncTo === void 0 ? !1 : _this$options2$syncTo, _this$options2$priori = _this$options2.prioritySync, w = _this$options2$priori === void 0 ? !1 : _this$options2$priori, _this$options2$remove = _this$options2.removeWhenDisconnected, O = _this$options2$remove === void 0 ? !0 : _this$options2$remove, D = _this$options2.extra;
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
});
_context4.prev = 10;
_context4.next = 13;
return Promise.all([this.initNetwork(), this.initConfig(), this.initWasm()]);
case 13:
logger.info("network config wasm all ready, start to create game");
_context4.next = 16;
return this.requestCreateRoom({
skinId: n
});
case 16:
F = _context4.sent;
V = F.routeList.find(function (L) {
return 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
});
_context4.next = 22;
return this.initEngine(F);
case 22:
_context4.next = 27;
break;
case 24:
_context4.prev = 24;
_context4.t0 = _context4["catch"](10);
return _context4.abrupt("return", Promise.reject(_context4.t0));
case 27:
return _context4.abrupt("return", (this.beforeJoinRoomResolve(), this.receiveRtcData()));
case 28:
case "end":
return _context4.stop();
}
}
}, _callee4, this, [[10, 24]]);
}));
function _initRoom() {
return _initRoom3.apply(this, arguments);
}
return _initRoom;
}()
}, {
key: "beforeJoinRoomResolve",
value: function beforeJoinRoomResolve() {
this.setupStats(), this.eventsController = new EventsController(this), this.eventsController.bindEvents(), this.panorama = new Panorama(this), this.beforeJoinRoomResolveHook();
}
}, {
key: "afterJoinRoom",
value: function 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", function (_ref) {
var e = _ref.stats;
reporter$1.report("stats", oe({}, e));
}), this.debug = new Debug(this), this.afterJoinRoomHook();
}
}, {
key: "afterReconnected",
value: function afterReconnected() {
this.avatarManager.clearOtherUsers(), this.afterReconnectedHook();
}
}, {
key: "leave",
value: function leave() {
var e, t;
return logger.info("Invoke room.leave"), (e = this.eventsController) == null || e.clearEvents(), (t = this.networkController) == null || t.quit(), this;
}
}, {
key: "validateOptions",
value: function validateOptions(e) {
var _ref2 = e || {},
t = _ref2.canvas,
r = _ref2.avatarId,
n = _ref2.skinId,
o = _ref2.userId,
a = _ref2.role;
_ref2.roomId;
var l = _ref2.token,
u = _ref2.appId;
_ref2.avatarComponents;
var h = [];
t instanceof HTMLCanvasElement || h.push(new ParamError$1("`canvas` must be instanceof of HTMLCanvasElement"));
(!o || typeof o != "string") && h.push(new ParamError$1("`userId` must be string"));
(!l || typeof l != "string") && h.push(new ParamError$1("`token` must be string"));
(!u || typeof u != "string") && h.push(new ParamError$1("`appId` must be string"));
a == "audience" || (!r || !n) && h.push(new ParamError$1("`avatarId` and `skinId` is required when create room"));
return h[0];
}
}, {
key: "initNetwork",
value: function () {
var _initNetwork = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5() {
var e;
return regenerator.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
if (!(this.viewMode === "serverless")) {
_context5.next = 2;
break;
}
return _context5.abrupt("return", Promise.resolve());
case 2:
e = Date.now();
_context5.prev = 3;
_context5.next = 6;
return this.networkController.connect()._timeout(8e3, new InitNetworkTimeoutError());
case 6:
logger.infoAndReportMeasurement({
metric: "networkInitAt",
startTime: this._startTime,
group: "joinRoom"
});
logger.infoAndReportMeasurement({
metric: "networkInitCost",
startTime: e,
group: "joinRoom"
});
_context5.next = 13;
break;
case 10:
_context5.prev = 10;
_context5.t0 = _context5["catch"](3);
throw logger.infoAndReportMeasurement({
metric: "networkInitAt",
startTime: e,
group: "joinRoom",
error: _context5.t0
}), _context5.t0;
case 13:
case "end":
return _context5.stop();
}
}
}, _callee5, this, [[3, 10]]);
}));
function initNetwork() {
return _initNetwork.apply(this, arguments);
}
return initNetwork;
}()
}, {
key: "initConfig",
value: function () {
var _initConfig = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6() {
var e;
return regenerator.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
e = Date.now();
_context6.prev = 1;
_context6.next = 4;
return this.modelManager.getApplicationConfig()._timeout(8e3, new InitConfigTimeoutError());
case 4:
logger.infoAndReportMeasurement({
metric: "configInitAt",
startTime: this._startTime,
group: "joinRoom"
});
logger.infoAndReportMeasurement({
metric: "configInitCost",
startTime: e,
group: "joinRoom"
});
_context6.next = 11;
break;
case 8:
_context6.prev = 8;
_context6.t0 = _context6["catch"](1);
throw logger.infoAndReportMeasurement({
metric: "configInitAt",
startTime: e,
group: "joinRoom",
error: _context6.t0
}), _context6.t0;
case 11:
case "end":
return _context6.stop();
}
}
}, _callee6, this, [[1, 8]]);
}));
function initConfig() {
return _initConfig.apply(this, arguments);
}
return initConfig;
}()
}, {
key: "initEngine",
value: function () {
var _initEngine = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee7(e) {
var t, n;
return regenerator.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
t = Date.now();
_context7.prev = 1;
this.engineProxy = new EngineProxy(this);
_context7.next = 5;
return this.engineProxy.initEngine(e);
case 5:
logger.infoAndReportMeasurement({
metric: "webglInitAt",
startTime: this._startTime,
group: "joinRoom"
});
logger.infoAndReportMeasurement({
metric: "webglInitCost",
startTime: t,
group: "joinRoom"
});
return _context7.abrupt("return");
case 10:
_context7.prev = 10;
_context7.t0 = _context7["catch"](1);
n = _context7.t0;
return _context7.abrupt("return", (_context7.t0.code !== Codes.InitEngineTimeout && (n = new InitEngineError()), logger.error(_context7.t0), logger.infoAndReportMeasurement({
metric: "webglInitAt",
startTime: t,
group: "joinRoom",
error: n
}), Promise.reject(n)));
case 14:
case "end":
return _context7.stop();
}
}
}, _callee7, this, [[1, 10]]);
}));
function initEngine(_x2) {
return _initEngine.apply(this, arguments);
}
return initEngine;
}()
}, {
key: "initWasm",
value: function () {
var _initWasm = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee8() {
var _this4 = this;
var e;
return regenerator.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
if (!(this.viewMode === "serverless")) {
_context8.next = 2;
break;
}
return _context8.abrupt("return", Promise.resolve());
case 2:
e = Date.now();
_context8.prev = 3;
_context8.next = 6;
return this.networkController.rtcp.workers.init(this.options.resolution)._timeout(8e3, new InitDecoderTimeoutError());
case 6:
this.networkController.rtcp.workers.registerFunction("error", function (t) {
logger.error("decode error", t);
var r = t.code,
n = t.message;
_this4.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", function (t) {
_this4.networkController.rtcp.workers.onTraceId(t);
});
_context8.next = 15;
break;
case 12:
_context8.prev = 12;
_context8.t0 = _context8["catch"](3);
throw logger.infoAndReportMeasurement({
metric: "wasmInitAt",
group: "joinRoom",
startTime: e,
error: _context8.t0
}), _context8.t0;
case 15:
case "end":
return _context8.stop();
}
}
}, _callee8, this, [[3, 12]]);
}));
function initWasm() {
return _initWasm.apply(this, arguments);
}
return initWasm;
}()
}, {
key: "requestCreateRoom",
value: function () {
var _requestCreateRoom = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee9(_ref3) {
var e, t, r, _ref4, n, o, _yield$this$networkCo, _r, _n, _o, a, s;
return regenerator.wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
e = _ref3.skinId;
if (!e) {
_context9.next = 11;
break;
}
_context9.next = 4;
return this.getSkin(e);
case 4:
t = _context9.sent;
_context9.next = 7;
return this.modelManager.findRoute(e, this.options.pathName);
case 7:
r = _context9.sent;
this.updateCurrentNetworkOptions({
areaName: r.areaName,
attitude: r.attitude,
versionId: t.versionId
});
_ref4 = getRandomItem(r.birthPointList) || this.options, n = _ref4.camera, o = _ref4.player;
this.options.camera || this.updateCurrentNetworkOptions({
camera: n
}), this.options.player || this.updateCurrentNetworkOptions({
player: o
});
case 11:
if (!(this.viewMode === "serverless")) {
_context9.next = 13;
break;
}
return _context9.abrupt("return", t);
case 13:
_context9.prev = 13;
_context9.next = 16;
return this.beforeStartGameHook(this.options);
case 16:
_context9.next = 18;
return this.networkController.startGame();
case 18:
_yield$this$networkCo = _context9.sent;
_r = _yield$this$networkCo.room_id;
_n = _yield$this$networkCo.data;
_o = _yield$this$networkCo.session_id;
this._id = _r;
a = JSON.parse(_n);
this.isHost = a.IsHost, e = a.SkinID || e;
_context9.next = 27;
return this.getSkin(e);
case 27:
s = _context9.sent;
return _context9.abrupt("return", (this.updateCurrentNetworkOptions({
roomId: _r,
sessionId: _o
}), reporter$1.updateBody({
roomId: _r,
skinId: e,
serverSession: _o
}), s));
case 31:
_context9.prev = 31;
_context9.t0 = _context9["catch"](13);
throw logger.error("Request create room error", _context9.t0), _context9.t0;
case 34:
case "end":
return _context9.stop();
}
}
}, _callee9, this, [[13, 31]]);
}));
function requestCreateRoom(_x3) {
return _requestCreateRoom.apply(this, arguments);
}
return requestCreateRoom;
}()
}, {
key: "pause",
value: function pause() {
return this.engineProxy.pause();
}
}, {
key: "resume",
value: function resume() {
return this.engineProxy.resume();
}
}, {
key: "reconnect",
value: function reconnect() {
this.networkController.reconnect();
}
}, {
key: "setViewMode",
value: function () {
var _setViewMode = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee10(e) {
return regenerator.wrap(function _callee10$(_context10) {
while (1) {
switch (_context10.prev = _context10.next) {
case 0:
case "end":
return _context10.stop();
}
}
}, _callee10);
}));
function setViewMode(_x4) {
return _setViewMode.apply(this, arguments);
}
return setViewMode;
}()
}, {
key: "handleRepetLogin",
value: function handleRepetLogin() {
logger.warn("receive " + Codes.RepeatLogin + " for repeat login"), this.emit("repeatLogin"), reporter$1.disable(), this.networkController.quit();
}
}, {
key: "setPictureQualityLevel",
value: function setPictureQualityLevel(e) {
var t = {
high: EImageQuality.high,
low: EImageQuality.low,
average: EImageQuality.mid
};
return this.updateCurrentState({
pictureQualityLevel: e
}), this.sceneManager.setImageQuality(t[e]);
}
}, {
key: "getSkin",
value: function () {
var _getSkin = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee11(e) {
var t, n;
return regenerator.wrap(function _callee11$(_context11) {
while (1) {
switch (_context11.prev = _context11.next) {
case 0:
t = null;
_context11.next = 3;
return this.modelManager.getSkinsList();
case 3:
t = (this.skinList = _context11.sent).find(function (n) {
return n.id === e || n.id === e;
});
if (!t) {
_context11.next = 6;
break;
}
return _context11.abrupt("return", t);
case 6:
n = "skin is invalid: skinId: ".concat(e);
return _context11.abrupt("return", Promise.reject(new ParamError$1(n)));
case 8:
case "end":
return _context11.stop();
}
}
}, _callee11, this);
}));
function getSkin(_x5) {
return _getSkin.apply(this, arguments);
}
return getSkin;
}()
}, {
key: "setupStats",
value: function setupStats() {
this.stats.assign({
roomId: this.id,
userId: this.userId
}), setInterval(this.engineProxy.updateStats, 1e3);
}
}, {
key: "proxyEvents",
value: function proxyEvents(e, t) {
this.emit(e, t);
}
}, {
key: "setCurrentNetworkOptions",
value: function setCurrentNetworkOptions(e) {
this._currentNetworkOptions = e;
}
}, {
key: "updateCurrentNetworkOptions",
value: function updateCurrentNetworkOptions(e) {
Object.assign(this._currentNetworkOptions, e), Object.assign(this.options, e);
}
}, {
key: "setCurrentState",
value: function setCurrentState(e) {
this._currentState = e;
}
}, {
key: "updateCurrentState",
value: function 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);
}
}]);
return Xverse_Room;
}(EventEmitter);
function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var XverseRoom = /*#__PURE__*/function (_Xverse_Room) {
_inherits(XverseRoom, _Xverse_Room);
var _super = _createSuper$1(XverseRoom);
function XverseRoom(e) {
var _this;
_classCallCheck(this, XverseRoom);
_this = _super.call(this, e);
_this.joyStick = new JoyStick(_assertThisInitialized(_this));
return _this;
}
_createClass(XverseRoom, [{
key: "afterJoinRoomHook",
value: function afterJoinRoomHook() {
this.joyStick.init({});
}
}]);
return XverseRoom;
}(Xverse_Room);
var BaseTable = /*#__PURE__*/function () {
function BaseTable(e, t) {
_classCallCheck(this, BaseTable);
this.db = null;
this.isCreatingTable = !1;
this.hasCleared = !1;
this.dbName = e, this.dbVersion = t;
}
_createClass(BaseTable, [{
key: "clearDataBase",
value: function () {
var _clearDataBase = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) {
var _this = this;
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
return _context.abrupt("return", this.hasCleared || (e && (this.hasCleared = !0), !window.indexedDB.databases) ? Promise.resolve() : new Promise(function (t, r) {
var n = window.indexedDB.deleteDatabase(_this.dbName);
n.onsuccess = function () {
t();
}, n.onerror = r;
}));
case 1:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function clearDataBase(_x) {
return _clearDataBase.apply(this, arguments);
}
return clearDataBase;
}()
}, {
key: "tableName",
value: function tableName() {
throw new Error("Derived class have to override 'tableName', and set a proper table name!");
}
}, {
key: "keyPath",
value: function keyPath() {
throw new Error("Derived class have to override 'keyPath', and set a proper index name!");
}
}, {
key: "index",
value: function index() {
throw new Error("Derived class have to override 'index', and set a proper index name!");
}
}, {
key: "checkAndOpenDatabase",
value: function () {
var _checkAndOpenDatabase = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2() {
var _this2 = this;
return regenerator.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
return _context2.abrupt("return", this.db ? Promise.resolve(this.db) : new Promise(function (e, t) {
var n = setTimeout(function () {
logger.info("wait db to open for", 200), _this2.db ? e(_this2.db) : e(_this2.checkAndOpenDatabase()), clearTimeout(n);
}, 200);
_this2.openDatabase(_this2.dbName, _this2.dbVersion || 1, function () {
_this2.db && !_this2.isCreatingTable && e(_this2.db), logger.info("successCallback called, this.db: ".concat(!!_this2.db, ", this.isCreatingStore: ").concat(_this2.isCreatingTable)), clearTimeout(n);
}, function () {
t(new Error("Failed to open database!")), clearTimeout(n);
}, function () {
_this2.db && e(_this2.db), clearTimeout(n), logger.info("successCallback called, this.db: ".concat(!!_this2.db, ", this.isCreatingStore: ").concat(_this2.isCreatingTable));
});
}));
case 1:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function checkAndOpenDatabase() {
return _checkAndOpenDatabase.apply(this, arguments);
}
return checkAndOpenDatabase;
}()
}, {
key: "openDatabase",
value: function openDatabase(e, t, r, n, o) {
var _this3 = this;
if (this.isCreatingTable) return;
this.isCreatingTable = !0, logger.info(e, t);
var a = window.indexedDB.open(e, t),
s = this.tableName();
a.onsuccess = function (l) {
_this3.db = a.result, logger.info("IndexedDb ".concat(e, " is opened.")), _this3.db.objectStoreNames.contains(s) && (_this3.isCreatingTable = !1), r && r(l);
}, a.onerror = function (l) {
var u;
logger.error("Failed to open database", (u = l == null ? void 0 : l.srcElement) == null ? void 0 : u.error), _this3.isCreatingTable = !1, n && n(l), _this3.clearDataBase(!0);
}, a.onupgradeneeded = function (l) {
var u = l.target.result,
c = _this3.index();
logger.info("Creating table ".concat(s, "."));
var h = u.objectStoreNames.contains(s);
if (h) h = u.transaction([s], "readwrite").objectStore(s);else {
var f = _this3.keyPath();
h = u.createObjectStore(s, {
keyPath: f
});
}
c.map(function (f) {
h.createIndex(f, f, {
unique: !1
});
}), _this3.isCreatingTable = !1, logger.info("Table ".concat(s, " opened")), o && o(l);
};
}
}, {
key: "add",
value: function () {
var _add = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e) {
var t, o;
return regenerator.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
t = this.tableName();
_context3.next = 3;
return this.checkAndOpenDatabase();
case 3:
o = _context3.sent.transaction([t], "readwrite").objectStore(t).add(e);
return _context3.abrupt("return", new Promise(function (a, s) {
o.onsuccess = function (l) {
a(l);
}, o.onerror = function (l) {
var u;
logger.error((u = l.srcElement) == null ? void 0 : u.error), s(l);
};
}));
case 5:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function add(_x2) {
return _add.apply(this, arguments);
}
return add;
}()
}, {
key: "put",
value: function () {
var _put = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(e) {
var t, o;
return regenerator.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
t = this.tableName();
_context4.next = 3;
return this.checkAndOpenDatabase();
case 3:
o = _context4.sent.transaction([t], "readwrite").objectStore(t).put(e);
return _context4.abrupt("return", new Promise(function (a, s) {
o.onsuccess = function (l) {
a(l);
}, o.onerror = function (l) {
var u;
logger.error("db put error", (u = l.srcElement) == null ? void 0 : u.error), s(l);
};
}));
case 5:
case "end":
return _context4.stop();
}
}
}, _callee4, this);
}));
function put(_x3) {
return _put.apply(this, arguments);
}
return put;
}()
}, {
key: "delete",
value: function _delete(e, t, r) {
var n = this.tableName();
this.checkAndOpenDatabase().then(function (o) {
var s = o.transaction([n], "readwrite").objectStore(n).delete(e);
s.onsuccess = t, s.onerror = r;
});
}
}, {
key: "update",
value: function update() {
this.checkAndOpenDatabase().then(function (e) {});
}
}, {
key: "getAllKeys",
value: function () {
var _getAllKeys = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5() {
var e, t;
return regenerator.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
e = this.tableName();
_context5.next = 3;
return this.checkAndOpenDatabase();
case 3:
t = _context5.sent;
return _context5.abrupt("return", new Promise(function (r, n) {
var a = t.transaction([e], "readonly").objectStore(e).getAllKeys();
a.onsuccess = function (s) {
r(s.target.result);
}, a.onerror = function (s) {
logger.error("db getAllKeys error", s), n(s);
};
}));
case 5:
case "end":
return _context5.stop();
}
}
}, _callee5, this);
}));
function getAllKeys() {
return _getAllKeys.apply(this, arguments);
}
return getAllKeys;
}()
}, {
key: "query",
value: function () {
var _query = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6(e, t) {
var r, n;
return regenerator.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
r = this.tableName();
_context6.next = 3;
return this.checkAndOpenDatabase();
case 3:
n = _context6.sent;
return _context6.abrupt("return", new Promise(function (o, a) {
var u = n.transaction([r], "readonly").objectStore(r).index(e).get(t);
u.onsuccess = function (c) {
var f;
var h = (f = c == null ? void 0 : c.target) == null ? void 0 : f.result;
o && o(h);
}, u.onerror = function (c) {
logger.error("db query error", c), a(c);
};
}));
case 5:
case "end":
return _context6.stop();
}
}
}, _callee6, this);
}));
function query(_x4, _x5) {
return _query.apply(this, arguments);
}
return query;
}()
}, {
key: "sleep",
value: function () {
var _sleep = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee7(e) {
return regenerator.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
return _context7.abrupt("return", new Promise(function (t) {
setTimeout(function () {
t("");
}, e);
}));
case 1:
case "end":
return _context7.stop();
}
}
}, _callee7);
}));
function sleep(_x6) {
return _sleep.apply(this, arguments);
}
return sleep;
}()
}]);
return BaseTable;
}();
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var ModelTable = /*#__PURE__*/function (_BaseTable) {
_inherits(ModelTable, _BaseTable);
var _super = _createSuper(ModelTable);
function ModelTable() {
_classCallCheck(this, ModelTable);
return _super.call(this, "XverseDatabase", 1);
}
_createClass(ModelTable, [{
key: "tableName",
value: function tableName() {
return "models";
}
}, {
key: "index",
value: function index() {
return ["url"];
}
}, {
key: "keyPath",
value: function keyPath() {
return "url";
}
}]);
return ModelTable;
}(BaseTable);
var modelTable = new ModelTable();
var Preload = /*#__PURE__*/function () {
function Preload(e) {
_classCallCheck(this, Preload);
this.config = null;
this.allKeys = [];
this.oldResourcesDeleted = !1;
this.requests = {
simple: {
stopped: !0,
requests: {}
},
observer: {
stopped: !0,
requests: {}
},
full: {
stopped: !0,
requests: {}
}
};
this.modelManager = e, this.init(e.appId);
}
_createClass(Preload, [{
key: "init",
value: function init(e) {
reporter$1.updateBody({
appId: e
});
}
}, {
key: "getConfig",
value: function () {
var _getConfig = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) {
var _yield$this$modelMana, t;
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!this.config) {
_context.next = 2;
break;
}
return _context.abrupt("return", this.config);
case 2:
_context.next = 4;
return this.modelManager.requestConfig();
case 4:
_yield$this$modelMana = _context.sent;
t = _yield$this$modelMana.preload;
return _context.abrupt("return", t ? (this.config = t, Promise.resolve(t)) : Promise.reject("no preload config"));
case 7:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function getConfig(_x) {
return _getConfig.apply(this, arguments);
}
return getConfig;
}()
}, {
key: "getAllKeys",
value: function () {
var _getAllKeys = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2() {
var e, t;
return regenerator.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!this.allKeys.length) {
_context2.next = 2;
break;
}
return _context2.abrupt("return", this.allKeys);
case 2:
_context2.prev = 2;
_context2.next = 5;
return modelTable.getAllKeys();
case 5:
e = _context2.sent;
this.allKeys = e;
return _context2.abrupt("return", e);
case 10:
_context2.prev = 10;
_context2.t0 = _context2["catch"](2);
t = "preload getAllKeys error";
return _context2.abrupt("return", (logger.error(t), Promise.reject(t)));
case 14:
case "end":
return _context2.stop();
}
}
}, _callee2, this, [[2, 10]]);
}));
function getAllKeys() {
return _getAllKeys.apply(this, arguments);
}
return getAllKeys;
}()
}, {
key: "stop",
value: function stop(e) {
e === "serverless" && (e = "observer"), this.requests[e].stopped = !0;
var t = this.requests[e].requests;
Object.keys(t).forEach(function (r) {
http1.canceler.removePending(r), delete t[r];
});
}
}, {
key: "clearPreload",
value: function clearPreload(e) {
this.requests[e].stopped = !1, this.allKeys = [];
}
}, {
key: "start",
value: function () {
var _start = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e, t, r) {
var n, o, a, s, l, u, h, f, _s;
return regenerator.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
n = Date.now(), o = 0;
_context3.prev = 1;
if (!(e === "serverless" && (e = "observer"), !this.requests[e])) {
_context3.next = 4;
break;
}
return _context3.abrupt("return", Promise.reject(new ParamError("invalid stage name: " + e)));
case 4:
this.clearPreload(e);
_context3.next = 7;
return this.getConfig(e);
case 7:
a = _context3.sent;
_context3.next = 10;
return this.getAllKeys();
case 10:
s = _context3.sent;
_context3.prev = 11;
_context3.next = 14;
return this.deleteOldResources(a.assetUrls.map(function (d) {
return d.url;
}), s);
case 14:
_context3.next = 19;
break;
case 16:
_context3.prev = 16;
_context3.t0 = _context3["catch"](11);
logger.error(_context3.t0);
case 19:
l = a.baseUrls, u = a.assetUrls;
_context3.t1 = e;
_context3.next = _context3.t1 === "simple" ? 23 : _context3.t1 === "observer" ? 25 : _context3.t1 === "full" ? 27 : 29;
break;
case 23:
h = l;
return _context3.abrupt("break", 30);
case 25:
h = u;
return _context3.abrupt("break", 30);
case 27:
h = u;
return _context3.abrupt("break", 30);
case 29:
h = u;
case 30:
f = h.filter(function (d) {
return !s.includes(d.url);
});
r && isFunction(r) && (f = f.filter(r));
o = f.length;
logger.debug("keysNeedToPreload", f);
f.length || t && t(h.length, h.length);
n = Date.now();
_context3.next = 38;
return this._preload(e, f, t);
case 38:
logger.infoAndReportMeasurement({
tag: e,
startTime: n,
metric: "assetsPreload",
extra: {
total: o
}
});
return _context3.abrupt("return");
case 42:
_context3.prev = 42;
_context3.t2 = _context3["catch"](1);
_s = _context3.t2;
return _context3.abrupt("return", ((this.requests[e].stopped || axios.isCancel(_context3.t2)) && (_s = new PreloadCanceledError()), logger.infoAndReportMeasurement({
tag: e,
startTime: n,
metric: "assetsPreload",
extra: {
total: o
},
error: _s,
reportOptions: {
immediate: !0
}
}), Promise.reject(_s)));
case 46:
case "end":
return _context3.stop();
}
}
}, _callee3, this, [[1, 42], [11, 16]]);
}));
function start(_x2, _x3, _x4) {
return _start.apply(this, arguments);
}
return start;
}()
}, {
key: "deleteOldResources",
value: function deleteOldResources(e, t) {
if (!this.oldResourcesDeleted) this.oldResourcesDeleted = !0;else return Promise.resolve();
var r = t.filter(function (n) {
return !e.includes(n);
});
return logger.debug("keysNeedToDelete", r), logger.warn("keysNeedToDelete", r.length), Promise.all(r.map(function (n) {
return modelTable.delete(n);
}));
}
}, {
key: "_preload",
value: function () {
var _preload2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6(e, t, r) {
var _this = this;
var n, o, a;
return regenerator.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
n = t.length;
if (n) {
_context6.next = 3;
break;
}
return _context6.abrupt("return", Promise.resolve());
case 3:
o = 0;
a = window.setInterval(function () {
r && r(o, n), o >= n && window.clearInterval(a);
}, 1e3);
return _context6.abrupt("return", util.mapLimit(t, 10, /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5(s) {
var l, u;
return regenerator.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
l = s.size, u = s.url;
return _context5.abrupt("return", _this.requests[e].stopped ? Promise.reject(new PreloadCanceledError()) : http1.get({
url: u,
timeout: Preload.getTimeoutBySize(l),
responseType: "blob",
retry: 2,
beforeRequest: function beforeRequest() {
_this.requests[e].requests[u] = !0;
}
}).then( /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(c) {
var h, f;
return regenerator.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
h = c.data;
if (h instanceof Blob) {
_context4.next = 3;
break;
}
return _context4.abrupt("return", (logger.error("request blob failed, type:", typeof h, u), Promise.reject("request blob failed " + u)));
case 3:
_context4.next = 5;
return blobToDataURI(h);
case 5:
f = _context4.sent;
_context4.prev = 6;
_context4.next = 9;
return modelTable.put({
url: u,
model: f
});
case 9:
return _context4.abrupt("return");
case 12:
_context4.prev = 12;
_context4.t0 = _context4["catch"](6);
return _context4.abrupt("return", (logger.error("unable to add data to indexedDB", _context4.t0), Promise.reject(new InternalError("preload db error"))));
case 15:
case "end":
return _context4.stop();
}
}
}, _callee4, null, [[6, 12]]);
}));
return function (_x9) {
return _ref2.apply(this, arguments);
};
}()).then(function () {
o++, delete _this.requests[e].requests[u];
}, function (c) {
return delete _this.requests[e].requests[u], window.clearInterval(a), Promise.reject(c);
}));
case 2:
case "end":
return _context5.stop();
}
}
}, _callee5);
}));
return function (_x8) {
return _ref.apply(this, arguments);
};
}()));
case 6:
case "end":
return _context6.stop();
}
}
}, _callee6);
}));
function _preload(_x5, _x6, _x7) {
return _preload2.apply(this, arguments);
}
return _preload;
}()
}], [{
key: "getTimeoutBySize",
value: function getTimeoutBySize(e) {
return e ? e < 500 * 1e3 ? 30 * 1e3 : e < 1e3 * 1e3 ? 60 * 1e3 : 100 * 1e3 : 100 * 1e3;
}
}]);
return Preload;
}();
var RenderType$1 = {
PathVideo: 0,
RotationVideo: 1,
RotationImage: 2,
PanoramaImage: 3,
CGVideo: 4,
ClientRotationPano: 5,
CloudRotationPano: 6
};
var Xverse = /*#__PURE__*/function () {
function Xverse(e) {
_classCallCheck(this, Xverse);
e || (e = {});
var _e = e,
t = _e.onLog,
r = _e.env,
n = _e.appId,
o = _e.releaseId,
a = _e.subPackageVersion;
this.NO_CACHE = !1, this.env = r || "PROD", this.SUB_PACKAGE_VERSION = a, this.debug && Logger.setLevel(LoggerLevels.Debug);
var s = this.pageSession = util.uuid();
reporter$1.updateHeader({
pageSession: s
});
reporter$1.updateReportUrl(REPORT_URL[this.env]);
a && reporter$1.updateBody({
sdkVersion: a
});
logger.infoAndReportMeasurement({
metric: "sdkInit",
startTime: Date.now(),
extra: {
version: a,
enviroment: r,
pageSession: s
}
});
logger.debug("debug mode:", this.debug);
reporter$1.on("report", function (l) {
t && t(l);
});
if (n) {
this.appId = n, this.releaseId = o;
var l = ModelManager.getInstance(n, o);
this.preload = new Preload(l);
}
}
_createClass(Xverse, [{
key: "isSupported",
get: function get() {
return isSupported();
}
}, {
key: "disableLogUpload",
value: function disableLogUpload() {
reporter$1.disable(), logger.debug("logger upload has been disabled");
}
}, {
key: "getSkinList",
value: function () {
var _getSkinList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() {
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
return _context.abrupt("return", []);
case 1:
case "end":
return _context.stop();
}
}
}, _callee);
}));
function getSkinList() {
return _getSkinList.apply(this, arguments);
}
return getSkinList;
}()
}, {
key: "getAvatarList",
value: function () {
var _getAvatarList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2() {
return regenerator.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
return _context2.abrupt("return", []);
case 1:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
function getAvatarList() {
return _getAvatarList.apply(this, arguments);
}
return getAvatarList;
}()
}, {
key: "getGiftList",
value: function () {
var _getGiftList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3() {
return regenerator.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
return _context3.abrupt("return", [{
id: "hack "
}]);
case 1:
case "end":
return _context3.stop();
}
}
}, _callee3);
}));
function getGiftList() {
return _getGiftList.apply(this, arguments);
}
return getGiftList;
}()
}, {
key: "joinRoom",
value: function () {
var _joinRoom = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(e) {
var t, r, n, o;
return regenerator.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
t = e.pathName || "thirdwalk", r = e.rotationRenderType || RenderType$1.RotationVideo, n = e.person || Person$1.Third, o = new XverseRoom(le(oe({}, e), {
appId: e.appId || this.appId,
releaseId: e.releaseId || this.releaseId,
pageSession: this.pageSession,
isAllSync: !0,
rotationRenderType: r,
syncByEvent: !0,
pathName: t,
person: n,
role: e.role || "audience"
}));
return _context4.abrupt("return", o.initRoom().then(function () {
return o;
}));
case 2:
case "end":
return _context4.stop();
}
}
}, _callee4, this);
}));
function joinRoom(_x) {
return _joinRoom.apply(this, arguments);
}
return joinRoom;
}()
}]);
return Xverse;
}();
var xverse = new Xverse({
env: "DEV",
appId: "10016",
releaseId: '2203120033_29769e'
});
var l = /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() {
var R;
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return (R = xverse.preload) == null ? void 0 : R.start('full', function (M, x) {
});
case 3:
_context.next = 12;
break;
case 5:
_context.prev = 5;
_context.t0 = _context["catch"](0);
if (!(console.error(_context.t0), _context.t0.code === Codes.PreloadCanceled)) {
_context.next = 10;
break;
}
toast("\u9884\u52A0\u8F7D\u88AB\u53D6\u6D88");
return _context.abrupt("return");
case 10:
toast("\u8FDB\u5165\u5931\u8D25, \u8BF7\u91CD\u8BD5");
return _context.abrupt("return");
case 12:
_context.prev = 12;
_context.next = 15;
return xverse.joinRoom({
canvas: document.getElementById('canvas'),
skinId: 10092,
avatarId: 'KGe_Boy',
roomId: 'e629ef3e-022d-4e64-8654-703bb96410eb',
userId: '1f7acca1db9d5',
wsServerUrl: 'wss://uat-eks.xverse.cn/ws',
appId: "10016",
token: " ",
nickname: '1f7acca1db9d5',
firends: ["user1"],
viewMode: "full",
resolution: {
width: 1728,
height: 720
},
pathName: 'thirdwalk',
objectFit: null,
hasAvatar: !0,
syncToOthers: !0
});
case 15:
room = _context.sent;
debugger;
u();
c();
window.room = room;
e(!1);
_context.next = 28;
break;
case 23:
_context.prev = 23;
_context.t1 = _context["catch"](12);
console.error(_context.t1);
alert(_context.t1);
return _context.abrupt("return");
case 28:
case "end":
return _context.stop();
}
}
}, _callee, null, [[0, 5], [12, 23]]);
}));
return function l() {
return _ref.apply(this, arguments);
};
}();
var u = function u() {
room.on("_coreClick", function (_ref2) {
var f = _ref2.point;
room._userAvatar.moveTo({
point: f
});
});
};
var c = function c() {
room.on("repeatLogin", function () {
toast("\u8BE5\u7528\u6237\u5DF2\u7ECF\u5728\u5176\u4ED6\u5730\u70B9\u767B\u5F55", {
duration: 1e4
});
}), room.on("reconnecting", function (_ref3) {
var f = _ref3.count;
toast("\u5C1D\u8BD5\u7B2C".concat(f, "\u6B21\u91CD\u8FDE"));
}), room.on("reconnected", function () {
toast("\u91CD\u8FDE\u6210\u529F");
}), room.on("disconnected", function () {
var f = toast("\u8FDE\u63A5\u5931\u8D25\uFF0C\u624B\u52A8\u70B9\u51FB\u91CD\u8BD5", {
duration: 1e5,
onClick() {
f.hideToast(), room.reconnect();
}
});
});
};
l();
}));
//# sourceMappingURL=index.js.map