fcr-core 3.8.2 → 3.9.0-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/chat-connector/type.d.ts +40 -0
- package/lib/{chat-connection → chat-connector}/type.js +1 -1
- package/lib/engine/index.d.ts +10 -11
- package/lib/engine/index.js +63 -72
- package/lib/engine/type.d.ts +96 -0
- package/lib/engine/type.js +5 -0
- package/lib/imports.d.ts +7 -4
- package/lib/imports.js +30 -4
- package/lib/index.d.ts +3 -2
- package/lib/index.js +21 -2
- package/lib/media-control/desktop.js +12 -12
- package/lib/media-control/mobile.js +4 -0
- package/lib/media-control/type.d.ts +32 -33
- package/lib/monitor-control/index.js +3 -3
- package/lib/peer-session/index.js +14 -14
- package/lib/peer-session/type.d.ts +1 -1
- package/lib/plugins/chat/chatroom.js +417 -0
- package/lib/{chat-connection → plugins/chat}/config.d.ts +1 -0
- package/lib/{chat-connection → plugins/chat}/config.js +2 -1
- package/lib/plugins/chat/connector.d.ts +38 -0
- package/lib/{chat-connection/index.js → plugins/chat/connector.js} +181 -61
- package/lib/room-control/ability-control/index.js +5 -4
- package/lib/room-control/ability-control/type.d.ts +5 -1
- package/lib/room-control/ability-control/type.js +4 -0
- package/lib/room-control/chatroom-control/type.d.ts +44 -35
- package/lib/room-control/group-control/index.js +9 -9
- package/lib/room-control/index.js +37 -22
- package/lib/room-control/interpreter-control/index.js +7 -4
- package/lib/room-control/interpreter-control/room.js +3 -3
- package/lib/room-control/interpreter-control/types.d.ts +2 -2
- package/lib/room-control/join-before-host-waitingroom-control/index.js +3 -3
- package/lib/room-control/mainroom-control/index.js +15 -13
- package/lib/room-control/privilege-control/index.js +39 -24
- package/lib/room-control/privilege-control/type.d.ts +15 -15
- package/lib/room-control/room-connector-control/index.js +7 -5
- package/lib/room-control/room-connector-control/type.d.ts +1 -1
- package/lib/room-control/room-control-factory.d.ts +3 -3
- package/lib/room-control/room-control-factory.js +7 -7
- package/lib/room-control/room-session/index.js +17 -15
- package/lib/room-control/room-session/type.d.ts +3 -3
- package/lib/room-control/sharing-control/index.js +13 -7
- package/lib/room-control/stream-control/index.js +18 -16
- package/lib/room-control/stream-control/type.d.ts +5 -5
- package/lib/room-control/stt-control/index.js +38 -31
- package/lib/room-control/type.d.ts +19 -19
- package/lib/room-control/user-control/index.js +20 -22
- package/lib/room-control/user-control/type.d.ts +1 -1
- package/lib/room-control/waitingroom-control/index.js +11 -11
- package/lib/room-control/whiteboard-control-v1/board-window.d.ts +21 -20
- package/lib/room-control/whiteboard-control-v1/board-window.js +27 -8
- package/lib/room-control/whiteboard-control-v1/factory.js +1 -1
- package/lib/room-control/whiteboard-control-v1/index.js +26 -18
- package/lib/room-control/whiteboard-control-v1/type.d.ts +26 -25
- package/lib/room-control/whiteboard-control-v1/type.js +1 -0
- package/lib/room-control/whiteboard-control-v2/annotation-control/control.d.ts +15 -6
- package/lib/room-control/whiteboard-control-v2/annotation-control/control.js +39 -5
- package/lib/room-control/whiteboard-control-v2/annotation-control/factory.d.ts +4 -5
- package/lib/room-control/whiteboard-control-v2/annotation-control/factory.js +6 -5
- package/lib/room-control/whiteboard-control-v2/annotation-control/type.d.ts +7 -1
- package/lib/room-control/whiteboard-control-v2/base/index.d.ts +9 -8
- package/lib/room-control/whiteboard-control-v2/base/index.js +84 -42
- package/lib/room-control/whiteboard-control-v2/base/main-window.d.ts +16 -15
- package/lib/room-control/whiteboard-control-v2/base/main-window.js +23 -4
- package/lib/room-control/whiteboard-control-v2/type.d.ts +17 -17
- package/lib/room-control/whiteboard-control-v2/whiteboard-control/control.d.ts +12 -6
- package/lib/room-control/whiteboard-control-v2/whiteboard-control/control.js +64 -18
- package/lib/room-control/whiteboard-control-v2/whiteboard-control/factory.d.ts +2 -2
- package/lib/room-control/whiteboard-control-v2/whiteboard-control/factory.js +10 -10
- package/lib/room-control/whiteboard-control-v2/whiteboard-control/type.d.ts +1 -1
- package/lib/room-router/index.js +10 -7
- package/lib/room-router/type.d.ts +1 -1
- package/lib/schema.d.ts +24 -46
- package/lib/schema.js +1 -2
- package/lib/service/api.d.ts +5 -3
- package/lib/service/api.js +17 -12
- package/lib/type.d.ts +64 -45
- package/lib/type.js +76 -11
- package/lib/utilities/abortable-retry.d.ts +38 -0
- package/lib/utilities/abortable-retry.js +61 -0
- package/lib/utilities/dual-video-stream-config.d.ts +6 -0
- package/lib/utilities/dual-video-stream-config.js +25 -0
- package/lib/utilities/error-helpers.d.ts +10 -9
- package/lib/utilities/error-helpers.js +12 -11
- package/lib/utilities/error.d.ts +4 -40
- package/lib/utilities/error.js +20 -77
- package/lib/utilities/join-helper.js +2 -2
- package/lib/utilities/logger.d.ts +2 -2
- package/lib/utilities/logger.js +6 -25
- package/lib/utilities/package-info.d.ts +1 -2
- package/lib/utilities/package-info.js +4 -8
- package/lib/utilities/parameters.js +88 -15
- package/lib/utilities/validate-params.js +1 -1
- package/lib/utilities/video-encoder-config.d.ts +9 -0
- package/lib/utilities/video-encoder-config.js +109 -0
- package/lib-es/{chat-connection → chat-connector}/type.js +1 -1
- package/lib-es/engine/index.js +46 -56
- package/lib-es/engine/type.js +1 -0
- package/lib-es/imports.js +5 -3
- package/lib-es/index.js +2 -1
- package/lib-es/media-control/desktop.js +12 -12
- package/lib-es/media-control/mobile.js +4 -0
- package/lib-es/monitor-control/index.js +3 -3
- package/lib-es/peer-session/index.js +16 -15
- package/lib-es/plugins/chat/chatroom.js +409 -0
- package/lib-es/{chat-connection → plugins/chat}/config.js +2 -1
- package/lib-es/{chat-connection/index.js → plugins/chat/connector.js} +178 -58
- package/lib-es/room-control/ability-control/index.js +5 -4
- package/lib-es/room-control/ability-control/type.js +4 -0
- package/lib-es/room-control/group-control/index.js +11 -10
- package/lib-es/room-control/index.js +40 -26
- package/lib-es/room-control/interpreter-control/index.js +10 -5
- package/lib-es/room-control/interpreter-control/room.js +3 -3
- package/lib-es/room-control/join-before-host-waitingroom-control/index.js +4 -3
- package/lib-es/room-control/mainroom-control/index.js +16 -17
- package/lib-es/room-control/privilege-control/index.js +43 -29
- package/lib-es/room-control/room-connector-control/index.js +9 -6
- package/lib-es/room-control/room-control-factory.js +6 -6
- package/lib-es/room-control/room-session/index.js +21 -22
- package/lib-es/room-control/sharing-control/index.js +13 -7
- package/lib-es/room-control/stream-control/index.js +21 -18
- package/lib-es/room-control/stt-control/index.js +23 -15
- package/lib-es/room-control/user-control/index.js +23 -23
- package/lib-es/room-control/waitingroom-control/index.js +10 -9
- package/lib-es/room-control/whiteboard-control-v1/board-window.js +27 -8
- package/lib-es/room-control/whiteboard-control-v1/factory.js +1 -1
- package/lib-es/room-control/whiteboard-control-v1/index.js +26 -17
- package/lib-es/room-control/whiteboard-control-v1/type.js +1 -0
- package/lib-es/room-control/whiteboard-control-v2/annotation-control/control.js +39 -5
- package/lib-es/room-control/whiteboard-control-v2/annotation-control/factory.js +7 -6
- package/lib-es/room-control/whiteboard-control-v2/base/index.js +86 -42
- package/lib-es/room-control/whiteboard-control-v2/base/main-window.js +23 -4
- package/lib-es/room-control/whiteboard-control-v2/whiteboard-control/control.js +60 -13
- package/lib-es/room-control/whiteboard-control-v2/whiteboard-control/factory.js +10 -10
- package/lib-es/room-router/index.js +10 -6
- package/lib-es/schema.js +1 -2
- package/lib-es/service/api.js +17 -12
- package/lib-es/type.js +70 -18
- package/lib-es/utilities/abortable-retry.js +54 -0
- package/lib-es/utilities/dual-video-stream-config.js +19 -0
- package/lib-es/utilities/error-helpers.js +13 -12
- package/lib-es/utilities/error.js +9 -75
- package/lib-es/utilities/join-helper.js +4 -3
- package/lib-es/utilities/logger.js +7 -23
- package/lib-es/utilities/package-info.js +4 -6
- package/lib-es/utilities/parameters.js +88 -15
- package/lib-es/utilities/validate-params.js +3 -2
- package/lib-es/utilities/video-encoder-config.js +103 -0
- package/package.json +7 -7
- package/lib/chat-connection/index.d.ts +0 -24
- package/lib/chat-connection/type.d.ts +0 -17
- package/lib/plugins/chatroom.js +0 -454
- package/lib/room-control/chatroom-control/config.d.ts +0 -51
- package/lib/room-control/chatroom-control/config.js +0 -105
- package/lib/utilities/storage.d.ts +0 -8
- package/lib/utilities/storage.js +0 -33
- package/lib-es/plugins/chatroom.js +0 -446
- package/lib-es/room-control/chatroom-control/config.js +0 -100
- package/lib-es/utilities/storage.js +0 -27
- /package/lib/plugins/{chatroom.d.ts → chat/chatroom.d.ts} +0 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.array.push.js");
|
|
4
|
+
require("core-js/modules/esnext.function.metadata.js");
|
|
5
|
+
require("core-js/modules/esnext.map.delete-all.js");
|
|
6
|
+
require("core-js/modules/esnext.map.emplace.js");
|
|
7
|
+
require("core-js/modules/esnext.map.every.js");
|
|
8
|
+
require("core-js/modules/esnext.map.filter.js");
|
|
9
|
+
require("core-js/modules/esnext.map.find.js");
|
|
10
|
+
require("core-js/modules/esnext.map.find-key.js");
|
|
11
|
+
require("core-js/modules/esnext.map.includes.js");
|
|
12
|
+
require("core-js/modules/esnext.map.key-of.js");
|
|
13
|
+
require("core-js/modules/esnext.map.map-keys.js");
|
|
14
|
+
require("core-js/modules/esnext.map.map-values.js");
|
|
15
|
+
require("core-js/modules/esnext.map.merge.js");
|
|
16
|
+
require("core-js/modules/esnext.map.reduce.js");
|
|
17
|
+
require("core-js/modules/esnext.map.some.js");
|
|
18
|
+
require("core-js/modules/esnext.map.update.js");
|
|
19
|
+
require("core-js/modules/esnext.symbol.metadata.js");
|
|
20
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
21
|
+
Object.defineProperty(exports, "__esModule", {
|
|
22
|
+
value: true
|
|
23
|
+
});
|
|
24
|
+
exports.FcrChatRoomControlImpl = void 0;
|
|
25
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
26
|
+
require("core-js/modules/esnext.iterator.map.js");
|
|
27
|
+
var _decorator = require("agora-foundation/lib/decorator");
|
|
28
|
+
var _raceCondition = require("agora-foundation/lib/utilities/race-condition");
|
|
29
|
+
var _observable = require("agora-foundation/lib/utilities/observable");
|
|
30
|
+
var _easemobWebsdk = _interopRequireDefault(require("easemob-websdk"));
|
|
31
|
+
var _get = _interopRequireDefault(require("lodash/get"));
|
|
32
|
+
var _type = require("../../chat-connector/type");
|
|
33
|
+
var _imports = require("../../imports");
|
|
34
|
+
var _type2 = require("../../room-control/chatroom-control/type");
|
|
35
|
+
var _schema = require("../../schema");
|
|
36
|
+
var _type3 = require("../../type");
|
|
37
|
+
var _abortableRetry = require("../../utilities/abortable-retry");
|
|
38
|
+
var _error = require("../../utilities/error");
|
|
39
|
+
var _logger = require("../../utilities/logger");
|
|
40
|
+
var _user = require("../../utilities/user");
|
|
41
|
+
var _validateParams = _interopRequireDefault(require("../../utilities/validate-params"));
|
|
42
|
+
let _initProto, _sendMessageDecs, _addObserverDecs, _removeObserverDecs;
|
|
43
|
+
function _applyDecs(e, t, r, n, o, a) { function i(e, t, r) { return function (n, o) { return r && r(n), e[t].call(n, o); }; } function c(e, t) { for (var r = 0; r < e.length; r++) e[r].call(t); return t; } function s(e, t, r, n) { if ("function" != typeof e && (n || void 0 !== e)) throw new TypeError(t + " must " + (r || "be") + " a function" + (n ? "" : " or undefined")); return e; } function applyDec(e, t, r, n, o, a, c, u, l, f, p, d, h) { function m(e) { if (!h(e)) throw new TypeError("Attempted to access private element on non-instance"); } var y, v = t[0], g = t[3], b = !u; if (!b) { r || Array.isArray(v) || (v = [v]); var w = {}, S = [], A = 3 === o ? "get" : 4 === o || d ? "set" : "value"; f ? (p || d ? w = { get: _setFunctionName(function () { return g(this); }, n, "get"), set: function (e) { t[4](this, e); } } : w[A] = g, p || _setFunctionName(w[A], n, 2 === o ? "" : A)) : p || (w = Object.getOwnPropertyDescriptor(e, n)); } for (var P = e, j = v.length - 1; j >= 0; j -= r ? 2 : 1) { var D = v[j], E = r ? v[j - 1] : void 0, I = {}, O = { kind: ["field", "accessor", "method", "getter", "setter", "class"][o], name: n, metadata: a, addInitializer: function (e, t) { if (e.v) throw Error("attempted to call addInitializer after decoration was finished"); s(t, "An initializer", "be", !0), c.push(t); }.bind(null, I) }; try { if (b) (y = s(D.call(E, P, O), "class decorators", "return")) && (P = y);else { var k, F; O.static = l, O.private = f, f ? 2 === o ? k = function (e) { return m(e), w.value; } : (o < 4 && (k = i(w, "get", m)), 3 !== o && (F = i(w, "set", m))) : (k = function (e) { return e[n]; }, (o < 2 || 4 === o) && (F = function (e, t) { e[n] = t; })); var N = O.access = { has: f ? h.bind() : function (e) { return n in e; } }; if (k && (N.get = k), F && (N.set = F), P = D.call(E, d ? { get: w.get, set: w.set } : w[A], O), d) { if ("object" == typeof P && P) (y = s(P.get, "accessor.get")) && (w.get = y), (y = s(P.set, "accessor.set")) && (w.set = y), (y = s(P.init, "accessor.init")) && S.push(y);else if (void 0 !== P) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0"); } else s(P, (p ? "field" : "method") + " decorators", "return") && (p ? S.push(P) : w[A] = P); } } finally { I.v = !0; } } return (p || d) && u.push(function (e, t) { for (var r = S.length - 1; r >= 0; r--) t = S[r].call(e, t); return t; }), p || b || (f ? d ? u.push(i(w, "get"), i(w, "set")) : u.push(2 === o ? w[A] : i.call.bind(w[A])) : Object.defineProperty(e, n, w)), P; } function u(e, t) { return Object.defineProperty(e, Symbol.metadata || Symbol.for("Symbol.metadata"), { configurable: !0, enumerable: !0, value: t }); } if (arguments.length >= 6) var l = a[Symbol.metadata || Symbol.for("Symbol.metadata")]; var f = Object.create(null == l ? null : l), p = function (e, t, r, n) { var o, a, i = [], s = function (t) { return _checkInRHS(t) === e; }, u = new Map(); function l(e) { e && i.push(c.bind(null, e)); } for (var f = 0; f < t.length; f++) { var p = t[f]; if (Array.isArray(p)) { var d = p[1], h = p[2], m = p.length > 3, y = 16 & d, v = !!(8 & d), g = 0 == (d &= 7), b = h + "/" + v; if (!g && !m) { var w = u.get(b); if (!0 === w || 3 === w && 4 !== d || 4 === w && 3 !== d) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + h); u.set(b, !(d > 2) || d); } applyDec(v ? e : e.prototype, p, y, m ? "#" + h : _toPropertyKey(h), d, n, v ? a = a || [] : o = o || [], i, v, m, g, 1 === d, v && m ? s : r); } } return l(o), l(a), i; }(e, t, o, f); return r.length || u(e, f), { e: p, get c() { var t = []; return r.length && [u(applyDec(e, [r], n, e.name, 5, f, t), f), c.bind(null, t, e)]; } }; }
|
|
44
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
45
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
46
|
+
function _setFunctionName(e, t, n) { "symbol" == typeof t && (t = (t = t.description) ? "[" + t + "]" : ""); try { Object.defineProperty(e, "name", { configurable: !0, value: n ? n + " " + t : t }); } catch (e) {} return e; }
|
|
47
|
+
function _checkInRHS(e) { if (Object(e) !== e) throw TypeError("right-hand side of 'in' should be an object, got " + (null !== e ? typeof e : "null")); return e; }
|
|
48
|
+
const CHATROOM_ID_KEY_PATH = 'widgets.easemobIM.extra.chatRoomId';
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
class FcrChatRoomControlImpl {
|
|
54
|
+
static {
|
|
55
|
+
[_initProto] = _applyDecs(this, [[_decorator.trace, 2, "getConnectionState"], [_sendMessageDecs, 2, "sendMessage"], [_addObserverDecs, 2, "addObserver"], [_removeObserverDecs, 2, "removeObserver"], [_decorator.bound, 2, "_handleJoinSceneSuccess"], [_decorator.bound, 2, "_handleJoinSceneFailure"], [_decorator.trace, 2, "leave"], [_decorator.trace, 2, "join"], [_decorator.bound, 2, "_handleScenePropertiesUpdated"]], []).e;
|
|
56
|
+
}
|
|
57
|
+
[(_sendMessageDecs = [(0, _decorator.trace)(['message', 'progress']), (0, _validateParams.default)(_schema.messageSchema, _schema.progressSchema.optional())], _addObserverDecs = (0, _decorator.trace)(['observer']), _removeObserverDecs = (0, _decorator.trace)(['observer']), "logger")] = (_initProto(this), (0, _logger.createLogger)({
|
|
58
|
+
prefix: 'FcrChatRoomControlImpl'
|
|
59
|
+
}));
|
|
60
|
+
_observable = new _observable.AgoraObservable();
|
|
61
|
+
_connectionState = _type2.FcrChatRoomConnectionState.Disconnected;
|
|
62
|
+
_joinPromise = null;
|
|
63
|
+
_joinTimeoutMs = 30000;
|
|
64
|
+
_joinAttemptId = 0;
|
|
65
|
+
_abortJoinChatRoom = null;
|
|
66
|
+
_sceneObserver = {
|
|
67
|
+
onJoinSceneSuccess: this._handleJoinSceneSuccess,
|
|
68
|
+
onJoinSceneFailure: this._handleJoinSceneFailure,
|
|
69
|
+
onScenePropertiesUpdated: this._handleScenePropertiesUpdated
|
|
70
|
+
};
|
|
71
|
+
chatRoomConnectionHandler = {
|
|
72
|
+
onTextMessage: msg => {
|
|
73
|
+
if (msg.to !== this.chatRoomId) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const message = this._convertAgoraChatMessageToFcrChatRoomReceiveMessage(msg);
|
|
77
|
+
this._observable.notifyObservers('onTextMessageReceived', this._scene.sceneId, message);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
_chatConnectionObserver = {
|
|
81
|
+
onConnectionStateUpdated: async connectorState => {
|
|
82
|
+
const chatRoomConnectionState = this.getConnectionState();
|
|
83
|
+
if (connectorState === _type.FcrChatConnectionState.DISCONNECTED) {
|
|
84
|
+
this._setConnectionState(_type2.FcrChatRoomConnectionState.Disconnected);
|
|
85
|
+
} else if (connectorState === _type.FcrChatConnectionState.CONNECTED && chatRoomConnectionState !== _type2.FcrChatRoomConnectionState.Connected) {
|
|
86
|
+
this.logger.info('chat connector connected, try to join chat room');
|
|
87
|
+
this._tryJoinChatRoom();
|
|
88
|
+
} else if (connectorState === _type.FcrChatConnectionState.CONNECTED) {
|
|
89
|
+
this.logger.info('chat connector reconnected, try to rejoin chat room');
|
|
90
|
+
this._tryJoinChatRoom(true);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
get conn() {
|
|
95
|
+
if (!this._chatConnection.getConnectionInstance()) {
|
|
96
|
+
throw (0, _error.generateFcrCoreClientError)(_imports.ErrorModuleCode.FCR_ROOM_CHATROOM, _imports.DetailErrorCode.UNDEFINED_ERROR, 'chat room connection not initialized, please get chat room token first');
|
|
97
|
+
}
|
|
98
|
+
return this._chatConnection.getConnectionInstance();
|
|
99
|
+
}
|
|
100
|
+
get chatRoomId() {
|
|
101
|
+
if (!this._joinSceneSuccess) {
|
|
102
|
+
return '';
|
|
103
|
+
}
|
|
104
|
+
return this._scene.getScenePropertiesByKeyPath(CHATROOM_ID_KEY_PATH);
|
|
105
|
+
}
|
|
106
|
+
get connectionEventHandlerKey() {
|
|
107
|
+
return `chatroom${this._scene.sceneId}`;
|
|
108
|
+
}
|
|
109
|
+
constructor(_scene, _chatConnection, sharedCache, joinSceneSuccess) {
|
|
110
|
+
this._scene = _scene;
|
|
111
|
+
this._chatConnection = _chatConnection;
|
|
112
|
+
this._roomCache = sharedCache.getRoomCache(_scene.sceneId);
|
|
113
|
+
this._joinSceneSuccess = joinSceneSuccess;
|
|
114
|
+
this._addLogObserver();
|
|
115
|
+
this._scene.addObserver(this._sceneObserver);
|
|
116
|
+
if (this._chatConnection.getConnectionInstance() && this._chatConnection.getConnectionState() === _type.FcrChatConnectionState.CONNECTED) {
|
|
117
|
+
this.logger.info('chat connection already connected, try to join chat room');
|
|
118
|
+
this._tryJoinChatRoom();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
getConnectionState() {
|
|
122
|
+
return this._connectionState;
|
|
123
|
+
}
|
|
124
|
+
async sendMessage(message, progress) {
|
|
125
|
+
const msg = this._convertFcrChatRoomSendBaseMessageToAgoraChatMessage(message, progress);
|
|
126
|
+
const sendMsgRes = await this.conn.send(msg);
|
|
127
|
+
const localUserInfo = this._scene.getUser(this._scene.getLocalUser().getLocalUserId());
|
|
128
|
+
const res = {
|
|
129
|
+
...(message.type === _type2.FcrChatRoomMessageType.Text ? {
|
|
130
|
+
content: message.content
|
|
131
|
+
} :
|
|
132
|
+
// @ts-ignore
|
|
133
|
+
{
|
|
134
|
+
url: sendMsgRes.message.url
|
|
135
|
+
}),
|
|
136
|
+
from: (0, _user.convertRteUserToFcrUser)(localUserInfo, this._roomCache),
|
|
137
|
+
id: sendMsgRes.serverMsgId,
|
|
138
|
+
type: message.type,
|
|
139
|
+
properties: message.properties,
|
|
140
|
+
timestamp: Date.now(),
|
|
141
|
+
isPrivate: !!message.to?.length
|
|
142
|
+
};
|
|
143
|
+
return res;
|
|
144
|
+
}
|
|
145
|
+
addObserver(observer) {
|
|
146
|
+
this._observable.addObserver(observer);
|
|
147
|
+
return _type3.FcrReturnCode.SUCCESS;
|
|
148
|
+
}
|
|
149
|
+
removeObserver(observer) {
|
|
150
|
+
this._observable.removeObserver(observer);
|
|
151
|
+
return _type3.FcrReturnCode.SUCCESS;
|
|
152
|
+
}
|
|
153
|
+
_setConnectionState(state) {
|
|
154
|
+
if (this._connectionState === state) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
this._connectionState = state;
|
|
158
|
+
this._observable.notifyObservers('onConnectionStateUpdated', this._scene.sceneId, state);
|
|
159
|
+
}
|
|
160
|
+
_tryJoinChatRoom(force = false) {
|
|
161
|
+
if (this._chatConnection.getConnectionState() !== _type.FcrChatConnectionState.CONNECTED) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (!this.chatRoomId) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
if (this._joinPromise) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (!force && (this._connectionState === _type2.FcrChatRoomConnectionState.Connected || this._connectionState === _type2.FcrChatRoomConnectionState.Connecting)) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
this.join(force);
|
|
174
|
+
}
|
|
175
|
+
_addLogObserver() {
|
|
176
|
+
this.addObserver((0, _logger.generateLogObserver)(this.logger, [['onConnectionStateUpdated', ['roomId', 'state']], ['onErrorOccurred', ['roomId', 'error']]
|
|
177
|
+
// 'onTextMessageReceived'
|
|
178
|
+
]));
|
|
179
|
+
}
|
|
180
|
+
async getHistoryMessageList(pageSize, startedMessageId) {
|
|
181
|
+
if (pageSize > 50) {
|
|
182
|
+
throw (0, _error.generateFcrCoreClientError)(_imports.ErrorModuleCode.FCR_ROOM_CHATROOM, _imports.DetailErrorCode.UNDEFINED_ERROR, 'pageSize should be less than 50');
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
const assembleRet = await this.conn.fetchHistoryMessages({
|
|
186
|
+
queue: this.chatRoomId,
|
|
187
|
+
count: pageSize,
|
|
188
|
+
start: startedMessageId,
|
|
189
|
+
isGroup: true
|
|
190
|
+
});
|
|
191
|
+
return assembleRet.map(msgBody => this._convertAgoraChatHistoryMessageToFcrChatRoomReceiveMessage(msgBody));
|
|
192
|
+
} catch (error) {
|
|
193
|
+
throw (0, _error.generateFcrCoreClientError)(_error.FcrErrorModuleCode.FCR_ROOM_CHATROOM, _error.FcrErrorCode.UNDEFINED_ERROR, error.message);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
_handleJoinSceneSuccess() {
|
|
197
|
+
this._joinSceneSuccess = true;
|
|
198
|
+
this._tryJoinChatRoom();
|
|
199
|
+
}
|
|
200
|
+
_handleJoinSceneFailure() {
|
|
201
|
+
this._joinSceneSuccess = false;
|
|
202
|
+
}
|
|
203
|
+
leave() {
|
|
204
|
+
this._chatConnection.removeObserver(this._chatConnectionObserver);
|
|
205
|
+
if (this._connectionState === _type2.FcrChatRoomConnectionState.Disconnected && !this._abortJoinChatRoom) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
if (this._abortJoinChatRoom) {
|
|
209
|
+
this._abortJoinChatRoom();
|
|
210
|
+
this._abortJoinChatRoom = null;
|
|
211
|
+
this._joinPromise = null;
|
|
212
|
+
}
|
|
213
|
+
if (!this._chatConnection.getConnectionInstance()) {
|
|
214
|
+
this._setConnectionState(_type2.FcrChatRoomConnectionState.Disconnected);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
this._removeEventListener();
|
|
218
|
+
if (this.chatRoomId) {
|
|
219
|
+
this.conn.leaveChatRoom({
|
|
220
|
+
roomId: this.chatRoomId,
|
|
221
|
+
success: () => {
|
|
222
|
+
this.logger.info(`leave chat room success, room id: ${this.chatRoomId}, scene id: ${this._scene.sceneId}`);
|
|
223
|
+
},
|
|
224
|
+
error: e => {
|
|
225
|
+
this.logger.error('leave chat room failed', e.message);
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
this._setConnectionState(_type2.FcrChatRoomConnectionState.Disconnected);
|
|
230
|
+
}
|
|
231
|
+
async join(force = false) {
|
|
232
|
+
this._chatConnection.addObserver(this._chatConnectionObserver);
|
|
233
|
+
const connectorState = this._chatConnection.getConnectionState();
|
|
234
|
+
if (connectorState !== _type.FcrChatConnectionState.CONNECTED) {
|
|
235
|
+
return _type3.FcrReturnCode.SUCCESS;
|
|
236
|
+
}
|
|
237
|
+
if (!this.chatRoomId) {
|
|
238
|
+
this.logger.warn(`chat room id is empty, scene id: ${this._scene.sceneId}`);
|
|
239
|
+
return _type3.FcrReturnCode.SUCCESS;
|
|
240
|
+
}
|
|
241
|
+
if (!this._chatConnection.getConnectionInstance()) {
|
|
242
|
+
this.logger.warn(`chat connection instance is null, scene id: ${this._scene.sceneId}`);
|
|
243
|
+
return _type3.FcrReturnCode.SUCCESS;
|
|
244
|
+
}
|
|
245
|
+
const chatRoomId = this.chatRoomId;
|
|
246
|
+
if (this._joinPromise) {
|
|
247
|
+
return this._joinPromise;
|
|
248
|
+
}
|
|
249
|
+
const chatRoomConnectionState = this.getConnectionState();
|
|
250
|
+
if (!force && (chatRoomConnectionState === _type2.FcrChatRoomConnectionState.Connected || chatRoomConnectionState === _type2.FcrChatRoomConnectionState.Connecting)) {
|
|
251
|
+
return _type3.FcrReturnCode.SUCCESS;
|
|
252
|
+
}
|
|
253
|
+
if (force || chatRoomConnectionState === _type2.FcrChatRoomConnectionState.Disconnected) {
|
|
254
|
+
if (chatRoomConnectionState !== _type2.FcrChatRoomConnectionState.Connecting) {
|
|
255
|
+
this._setConnectionState(_type2.FcrChatRoomConnectionState.Connecting);
|
|
256
|
+
}
|
|
257
|
+
this.logger.info(`start join chat room, room id: ${chatRoomId}, scene id: ${this._scene.sceneId}`);
|
|
258
|
+
this._addEventListener();
|
|
259
|
+
const attemptId = ++this._joinAttemptId;
|
|
260
|
+
this._joinPromise = (async () => {
|
|
261
|
+
let error = null;
|
|
262
|
+
if (force && chatRoomConnectionState === _type2.FcrChatRoomConnectionState.Connected) {
|
|
263
|
+
await this._leaveChatRoomForRejoin(chatRoomId);
|
|
264
|
+
}
|
|
265
|
+
const [abort, promise] = (0, _abortableRetry.abortableRetry)(async () => {
|
|
266
|
+
await this.conn.joinChatRoom({
|
|
267
|
+
roomId: chatRoomId
|
|
268
|
+
});
|
|
269
|
+
this.logger.info(`join chat room success, room id: ${chatRoomId}, scene id: ${this._scene.sceneId}`);
|
|
270
|
+
}, {
|
|
271
|
+
retriesMax: Infinity
|
|
272
|
+
});
|
|
273
|
+
this._abortJoinChatRoom = abort;
|
|
274
|
+
try {
|
|
275
|
+
[error] = await (0, _raceCondition.timeout)(promise, this._joinTimeoutMs);
|
|
276
|
+
} catch (joinError) {
|
|
277
|
+
if (attemptId !== this._joinAttemptId) {
|
|
278
|
+
return _type3.FcrReturnCode.SUCCESS;
|
|
279
|
+
}
|
|
280
|
+
if (this._abortJoinChatRoom) {
|
|
281
|
+
this._abortJoinChatRoom();
|
|
282
|
+
this._abortJoinChatRoom = null;
|
|
283
|
+
}
|
|
284
|
+
this.leave();
|
|
285
|
+
throw joinError;
|
|
286
|
+
}
|
|
287
|
+
this._abortJoinChatRoom = null;
|
|
288
|
+
if (attemptId !== this._joinAttemptId) {
|
|
289
|
+
if (!error && this._chatConnection.getConnectionInstance()) {
|
|
290
|
+
this.conn.leaveChatRoom({
|
|
291
|
+
roomId: chatRoomId,
|
|
292
|
+
success: () => {
|
|
293
|
+
this.logger.info(`leave stale chat room success, room id: ${chatRoomId}, scene id: ${this._scene.sceneId}`);
|
|
294
|
+
},
|
|
295
|
+
error: leaveError => {
|
|
296
|
+
this.logger.error('leave stale chat room failed', leaveError.message);
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
return _type3.FcrReturnCode.SUCCESS;
|
|
301
|
+
}
|
|
302
|
+
if (error) {
|
|
303
|
+
this.logger.error(`join chat room failed, room id: ${chatRoomId}, scene id: ${this._scene.sceneId}`, error.message);
|
|
304
|
+
this._setConnectionState(_type2.FcrChatRoomConnectionState.Disconnected);
|
|
305
|
+
throw (0, _error.generateFcrCoreClientError)(_error.FcrErrorModuleCode.FCR_ROOM_CHATROOM, _error.FcrErrorCode.UNDEFINED_ERROR, `join chat room failed: ${error.message}`);
|
|
306
|
+
} else {
|
|
307
|
+
this._setConnectionState(_type2.FcrChatRoomConnectionState.Connected);
|
|
308
|
+
}
|
|
309
|
+
return _type3.FcrReturnCode.SUCCESS;
|
|
310
|
+
})();
|
|
311
|
+
try {
|
|
312
|
+
return await this._joinPromise;
|
|
313
|
+
} finally {
|
|
314
|
+
this._joinPromise = null;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return _type3.FcrReturnCode.SUCCESS;
|
|
318
|
+
}
|
|
319
|
+
_leaveChatRoomForRejoin(chatRoomId) {
|
|
320
|
+
return new Promise(resolve => {
|
|
321
|
+
if (!this._chatConnection.getConnectionInstance()) {
|
|
322
|
+
resolve();
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
this.conn.leaveChatRoom({
|
|
326
|
+
roomId: chatRoomId,
|
|
327
|
+
success: () => resolve(),
|
|
328
|
+
error: () => resolve()
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
_removeEventListener() {
|
|
333
|
+
const connection = this._chatConnection.getConnectionInstance();
|
|
334
|
+
if (connection) {
|
|
335
|
+
this.conn.removeEventHandler(this.connectionEventHandlerKey);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
_addEventListener() {
|
|
339
|
+
this._removeEventListener();
|
|
340
|
+
this.conn.addEventHandler(this.connectionEventHandlerKey, this.chatRoomConnectionHandler);
|
|
341
|
+
}
|
|
342
|
+
_convertAgoraChatMessageToFcrChatRoomReceiveMessage = msg => {
|
|
343
|
+
switch (msg.type) {
|
|
344
|
+
case 'txt':
|
|
345
|
+
{
|
|
346
|
+
const message = {
|
|
347
|
+
id: msg.id,
|
|
348
|
+
from: msg.ext?.sender,
|
|
349
|
+
type: _type2.FcrChatRoomMessageType.Text,
|
|
350
|
+
timestamp: parseInt(`${msg.time}`),
|
|
351
|
+
content: msg.msg,
|
|
352
|
+
isPrivate: msg.ext?.isPrivate,
|
|
353
|
+
properties: msg.ext?.properties
|
|
354
|
+
};
|
|
355
|
+
return message;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
throw (0, _error.generateFcrCoreClientError)(_error.FcrErrorModuleCode.FCR_ROOM_CHATROOM, _error.FcrErrorCode.UNDEFINED_ERROR, 'unknown remote message type');
|
|
359
|
+
};
|
|
360
|
+
_convertAgoraChatHistoryMessageToFcrChatRoomReceiveMessage(msg) {
|
|
361
|
+
//@ts-ignore
|
|
362
|
+
switch (msg.contentsType) {
|
|
363
|
+
case 'TEXT':
|
|
364
|
+
{
|
|
365
|
+
const message = {
|
|
366
|
+
id: msg.id,
|
|
367
|
+
//@ts-ignore
|
|
368
|
+
from: msg.ext?.sender,
|
|
369
|
+
type: _type2.FcrChatRoomMessageType.Text,
|
|
370
|
+
//@ts-ignore
|
|
371
|
+
timestamp: parseInt(`${msg.time}`),
|
|
372
|
+
//@ts-ignore
|
|
373
|
+
content: msg.data,
|
|
374
|
+
//@ts-ignore
|
|
375
|
+
isPrivate: msg.ext?.isPrivate,
|
|
376
|
+
//@ts-ignore
|
|
377
|
+
properties: msg.ext?.properties
|
|
378
|
+
};
|
|
379
|
+
return message;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
throw (0, _error.generateFcrCoreClientError)(_error.FcrErrorModuleCode.FCR_ROOM_CHATROOM, _error.FcrErrorCode.UNDEFINED_ERROR, 'unknown remote message type');
|
|
383
|
+
}
|
|
384
|
+
_convertFcrChatRoomSendBaseMessageToAgoraChatMessage(msg, progress) {
|
|
385
|
+
switch (msg.type) {
|
|
386
|
+
case _type2.FcrChatRoomMessageType.Text:
|
|
387
|
+
{
|
|
388
|
+
const message = msg;
|
|
389
|
+
const isPrivate = !!message.to?.length;
|
|
390
|
+
const localUserId = this._scene.getLocalUser().getLocalUserId();
|
|
391
|
+
const localUserInfo = this._scene.getUser(localUserId);
|
|
392
|
+
return _easemobWebsdk.default.message.create({
|
|
393
|
+
to: this.chatRoomId,
|
|
394
|
+
msg: message.content,
|
|
395
|
+
type: 'txt',
|
|
396
|
+
chatType: 'chatRoom',
|
|
397
|
+
ext: {
|
|
398
|
+
sender: (0, _user.convertRteUserToFcrUser)(localUserInfo, this._roomCache),
|
|
399
|
+
roomUuid: this._scene.sceneId,
|
|
400
|
+
isPrivate,
|
|
401
|
+
properties: msg.properties
|
|
402
|
+
},
|
|
403
|
+
receiverList: message.to
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
throw (0, _error.generateFcrCoreClientError)(_error.FcrErrorModuleCode.FCR_ROOM_CHATROOM, _error.FcrErrorCode.UNDEFINED_ERROR, 'unknown local message type');
|
|
408
|
+
}
|
|
409
|
+
_handleScenePropertiesUpdated(sceneId, properties) {
|
|
410
|
+
const chatRoomId = (0, _get.default)(properties.changedProperties, CHATROOM_ID_KEY_PATH);
|
|
411
|
+
if (chatRoomId) {
|
|
412
|
+
this.logger.info(`received chat room id change, chat room id: ${chatRoomId}, scene id: ${sceneId}`);
|
|
413
|
+
this.join();
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
exports.FcrChatRoomControlImpl = FcrChatRoomControlImpl;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { EasemobChat } from '../../imports';
|
|
2
|
+
import { FcrCoreServiceApi } from '../../service/api';
|
|
3
|
+
import { FcrChatConnectionObserver, FcrChatConnectionState, FcrChatConnector } from '../../chat-connector/type';
|
|
4
|
+
export declare class FcrChatConnectorImpl implements FcrChatConnector {
|
|
5
|
+
private _userId;
|
|
6
|
+
private _api;
|
|
7
|
+
private _chatIpList?;
|
|
8
|
+
private _restIpList?;
|
|
9
|
+
protected logger: import("agora-foundation/lib/logger/type").Logger;
|
|
10
|
+
private _observable;
|
|
11
|
+
private _initConfig?;
|
|
12
|
+
private _loginPromise;
|
|
13
|
+
private _logoutPromise;
|
|
14
|
+
private _isLogoutRequested;
|
|
15
|
+
private _abortLogin;
|
|
16
|
+
private _conn;
|
|
17
|
+
private _connectionState;
|
|
18
|
+
private _reconnectionTimer;
|
|
19
|
+
private _reconnectPromise;
|
|
20
|
+
constructor(_userId: string, _api: FcrCoreServiceApi, _chatIpList?: string[] | undefined, _restIpList?: string[] | undefined);
|
|
21
|
+
login(): Promise<void>;
|
|
22
|
+
logout(): number;
|
|
23
|
+
getConnectionState(): FcrChatConnectionState;
|
|
24
|
+
getConnectionInstance(): EasemobChat.Connection;
|
|
25
|
+
addObserver(observer: FcrChatConnectionObserver): void;
|
|
26
|
+
removeObserver(observer: FcrChatConnectionObserver): void;
|
|
27
|
+
private _performLogin;
|
|
28
|
+
private _addEventListeners;
|
|
29
|
+
private _performLogout;
|
|
30
|
+
private _waitForLoginComplete;
|
|
31
|
+
private _closeConnection;
|
|
32
|
+
private _setConnectionState;
|
|
33
|
+
private _getPrivateConfig;
|
|
34
|
+
private _handleConnected;
|
|
35
|
+
private _handleDisconnected;
|
|
36
|
+
private _reconnect;
|
|
37
|
+
private _addLogObserver;
|
|
38
|
+
}
|