@eleven-am/pondsocket 0.1.55 → 0.1.56
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/channel/channel.js +5 -7
- package/lobby/joinResponse.js +2 -2
- package/package.json +1 -1
- package/presence/presence.js +16 -18
- package/server/pondSocket.js +1 -1
- package/subjects/subject.js +44 -0
package/channel/channel.js
CHANGED
|
@@ -123,11 +123,12 @@ class ChannelEngine {
|
|
|
123
123
|
* @param userId - The id of the user to get
|
|
124
124
|
*/
|
|
125
125
|
getUserData(userId) {
|
|
126
|
+
const assigns = __classPrivateFieldGet(this, _ChannelEngine_users, "f").get(userId);
|
|
126
127
|
const presence = __classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f") ? __classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f").getUserPresence(userId) : {};
|
|
127
|
-
if (
|
|
128
|
+
if (assigns) {
|
|
128
129
|
return {
|
|
130
|
+
assigns,
|
|
129
131
|
id: userId,
|
|
130
|
-
assigns: __classPrivateFieldGet(this, _ChannelEngine_users, "f").get(userId),
|
|
131
132
|
presence: presence || {},
|
|
132
133
|
};
|
|
133
134
|
}
|
|
@@ -201,11 +202,8 @@ class ChannelEngine {
|
|
|
201
202
|
if (!__classPrivateFieldGet(this, _ChannelEngine_users, "f").has(userId)) {
|
|
202
203
|
throw new pondError_1.ChannelError(`ChannelEngine: User with id ${userId} does not exist in channel ${this.name}`, 404, this.name);
|
|
203
204
|
}
|
|
204
|
-
__classPrivateFieldSet(this, _ChannelEngine_presenceEngine, (_a = __classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f")) !== null && _a !== void 0 ? _a : new presence_1.PresenceEngine(this
|
|
205
|
-
__classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f").trackPresence(userId, presence
|
|
206
|
-
const { type } = change, rest = __rest(change, ["type"]);
|
|
207
|
-
this.sendMessage(enums_1.SystemSender.CHANNEL, [userId], enums_1.ServerActions.PRESENCE, type, rest);
|
|
208
|
-
});
|
|
205
|
+
__classPrivateFieldSet(this, _ChannelEngine_presenceEngine, (_a = __classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f")) !== null && _a !== void 0 ? _a : new presence_1.PresenceEngine(this), "f");
|
|
206
|
+
__classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f").trackPresence(userId, presence);
|
|
209
207
|
}
|
|
210
208
|
/**
|
|
211
209
|
* @desc Gets the presence engine for the channel
|
package/lobby/joinResponse.js
CHANGED
|
@@ -33,7 +33,7 @@ class JoinResponse extends abstractResponse_1.PondResponse {
|
|
|
33
33
|
*/
|
|
34
34
|
accept(assigns) {
|
|
35
35
|
__classPrivateFieldGet(this, _JoinResponse_instances, "m", _JoinResponse_performChecks).call(this);
|
|
36
|
-
|
|
36
|
+
const newAssigns = Object.assign(Object.assign({}, assigns || {}), __classPrivateFieldGet(this, _JoinResponse_user, "f").assigns);
|
|
37
37
|
const acknowledgement = {
|
|
38
38
|
action: enums_1.ServerActions.SYSTEM,
|
|
39
39
|
channelName: __classPrivateFieldGet(this, _JoinResponse_engine, "f").name,
|
|
@@ -41,7 +41,7 @@ class JoinResponse extends abstractResponse_1.PondResponse {
|
|
|
41
41
|
payload: {},
|
|
42
42
|
};
|
|
43
43
|
__classPrivateFieldGet(this, _JoinResponse_user, "f").socket.send(JSON.stringify(acknowledgement));
|
|
44
|
-
__classPrivateFieldGet(this, _JoinResponse_engine, "f").addUser(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId,
|
|
44
|
+
__classPrivateFieldGet(this, _JoinResponse_engine, "f").addUser(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, newAssigns, (event) => {
|
|
45
45
|
__classPrivateFieldGet(this, _JoinResponse_user, "f").socket.send(JSON.stringify(event));
|
|
46
46
|
});
|
|
47
47
|
return this;
|
package/package.json
CHANGED
package/presence/presence.js
CHANGED
|
@@ -10,19 +10,17 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
12
|
};
|
|
13
|
-
var
|
|
13
|
+
var _PresenceEngine_instances, _PresenceEngine_presenceMap, _PresenceEngine_channel, _PresenceEngine_publish;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.PresenceEngine = void 0;
|
|
16
16
|
const enums_1 = require("../enums");
|
|
17
17
|
const pondError_1 = require("../errors/pondError");
|
|
18
|
-
const subject_1 = require("../subjects/subject");
|
|
19
18
|
class PresenceEngine {
|
|
20
19
|
constructor(channel) {
|
|
21
|
-
|
|
20
|
+
_PresenceEngine_instances.add(this);
|
|
22
21
|
_PresenceEngine_presenceMap.set(this, void 0);
|
|
23
22
|
_PresenceEngine_channel.set(this, void 0);
|
|
24
23
|
__classPrivateFieldSet(this, _PresenceEngine_channel, channel, "f");
|
|
25
|
-
__classPrivateFieldSet(this, _PresenceEngine_engine, new subject_1.BehaviorSubject(), "f");
|
|
26
24
|
__classPrivateFieldSet(this, _PresenceEngine_presenceMap, new Map(), "f");
|
|
27
25
|
}
|
|
28
26
|
/**
|
|
@@ -46,13 +44,11 @@ class PresenceEngine {
|
|
|
46
44
|
* @desc Tracks a presence
|
|
47
45
|
* @param presenceKey - The key of the presence
|
|
48
46
|
* @param presence - The presence
|
|
49
|
-
* @param onPresenceChange - The callback to be called when the presence changes
|
|
50
47
|
*/
|
|
51
|
-
trackPresence(presenceKey, presence
|
|
48
|
+
trackPresence(presenceKey, presence) {
|
|
52
49
|
if (!__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").has(presenceKey)) {
|
|
53
50
|
__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").set(presenceKey, presence);
|
|
54
|
-
__classPrivateFieldGet(this,
|
|
55
|
-
type: enums_1.PresenceEventTypes.JOIN,
|
|
51
|
+
__classPrivateFieldGet(this, _PresenceEngine_instances, "m", _PresenceEngine_publish).call(this, enums_1.PresenceEventTypes.JOIN, {
|
|
56
52
|
changed: presence,
|
|
57
53
|
presence: Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").values()),
|
|
58
54
|
});
|
|
@@ -60,9 +56,8 @@ class PresenceEngine {
|
|
|
60
56
|
else {
|
|
61
57
|
const code = 400;
|
|
62
58
|
const message = `PresenceEngine: Presence with key ${presenceKey} already exists`;
|
|
63
|
-
throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f"), enums_1.PresenceEventTypes.JOIN);
|
|
59
|
+
throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f").name, enums_1.PresenceEventTypes.JOIN);
|
|
64
60
|
}
|
|
65
|
-
return __classPrivateFieldGet(this, _PresenceEngine_engine, "f").subscribeWith(presenceKey, onPresenceChange);
|
|
66
61
|
}
|
|
67
62
|
/**
|
|
68
63
|
* @desc Removes a presence from the presence engine
|
|
@@ -72,10 +67,8 @@ class PresenceEngine {
|
|
|
72
67
|
removePresence(presenceKey, graceful = false) {
|
|
73
68
|
const presence = __classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").get(presenceKey);
|
|
74
69
|
if (presence) {
|
|
75
|
-
__classPrivateFieldGet(this, _PresenceEngine_engine, "f").unsubscribe(presenceKey);
|
|
76
70
|
__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").delete(presenceKey);
|
|
77
|
-
__classPrivateFieldGet(this,
|
|
78
|
-
type: enums_1.PresenceEventTypes.LEAVE,
|
|
71
|
+
__classPrivateFieldGet(this, _PresenceEngine_instances, "m", _PresenceEngine_publish).call(this, enums_1.PresenceEventTypes.LEAVE, {
|
|
79
72
|
changed: presence,
|
|
80
73
|
presence: Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").values()),
|
|
81
74
|
});
|
|
@@ -83,7 +76,7 @@ class PresenceEngine {
|
|
|
83
76
|
else if (!graceful) {
|
|
84
77
|
const code = 404;
|
|
85
78
|
const message = `PresenceEngine: Presence with key ${presenceKey} does not exist`;
|
|
86
|
-
throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f"), enums_1.PresenceEventTypes.LEAVE);
|
|
79
|
+
throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f").name, enums_1.PresenceEventTypes.LEAVE);
|
|
87
80
|
}
|
|
88
81
|
}
|
|
89
82
|
/**
|
|
@@ -96,8 +89,7 @@ class PresenceEngine {
|
|
|
96
89
|
if (oldPresence) {
|
|
97
90
|
const newPresence = Object.assign(Object.assign({}, oldPresence), presence);
|
|
98
91
|
__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").set(presenceKey, newPresence);
|
|
99
|
-
__classPrivateFieldGet(this,
|
|
100
|
-
type: enums_1.PresenceEventTypes.UPDATE,
|
|
92
|
+
__classPrivateFieldGet(this, _PresenceEngine_instances, "m", _PresenceEngine_publish).call(this, enums_1.PresenceEventTypes.UPDATE, {
|
|
101
93
|
changed: newPresence,
|
|
102
94
|
presence: Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").values()),
|
|
103
95
|
});
|
|
@@ -105,9 +97,15 @@ class PresenceEngine {
|
|
|
105
97
|
else {
|
|
106
98
|
const code = 404;
|
|
107
99
|
const message = `PresenceEngine: Presence with key ${presenceKey} does not exist`;
|
|
108
|
-
throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f"), enums_1.PresenceEventTypes.UPDATE);
|
|
100
|
+
throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f").name, enums_1.PresenceEventTypes.UPDATE);
|
|
109
101
|
}
|
|
110
102
|
}
|
|
111
103
|
}
|
|
112
104
|
exports.PresenceEngine = PresenceEngine;
|
|
113
|
-
|
|
105
|
+
_PresenceEngine_presenceMap = new WeakMap(), _PresenceEngine_channel = new WeakMap(), _PresenceEngine_instances = new WeakSet(), _PresenceEngine_publish = function _PresenceEngine_publish(event, payload) {
|
|
106
|
+
const recipients = Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").keys());
|
|
107
|
+
if (recipients.length === 0) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
__classPrivateFieldGet(this, _PresenceEngine_channel, "f").sendMessage(enums_1.SystemSender.CHANNEL, recipients, enums_1.ServerActions.PRESENCE, event, payload);
|
|
111
|
+
};
|
package/server/pondSocket.js
CHANGED
|
@@ -88,7 +88,7 @@ _PondSocket_server = new WeakMap(), _PondSocket_socketServer = new WeakMap(), _P
|
|
|
88
88
|
return socket.terminate();
|
|
89
89
|
}
|
|
90
90
|
socket.isAlive = false;
|
|
91
|
-
socket.ping(
|
|
91
|
+
socket.ping();
|
|
92
92
|
});
|
|
93
93
|
}, 30000);
|
|
94
94
|
__classPrivateFieldGet(this, _PondSocket_socketServer, "f").on('close', () => clearInterval(interval));
|
package/subjects/subject.js
CHANGED
|
@@ -18,13 +18,24 @@ class SimpleSubject {
|
|
|
18
18
|
_SimpleSubject_observers.set(this, void 0);
|
|
19
19
|
__classPrivateFieldSet(this, _SimpleSubject_observers, new Set(), "f");
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* @desc Subscribes to a subject
|
|
23
|
+
* @param observer - The observer to subscribe
|
|
24
|
+
*/
|
|
21
25
|
subscribe(observer) {
|
|
22
26
|
__classPrivateFieldGet(this, _SimpleSubject_observers, "f").add(observer);
|
|
23
27
|
return () => __classPrivateFieldGet(this, _SimpleSubject_observers, "f").delete(observer);
|
|
24
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* @desc Publishes a message to all subscribers
|
|
31
|
+
* @param message - The message to publish
|
|
32
|
+
*/
|
|
25
33
|
publish(message) {
|
|
26
34
|
__classPrivateFieldGet(this, _SimpleSubject_observers, "f").forEach((observer) => observer(message));
|
|
27
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* @desc Returns the number of subscribers
|
|
38
|
+
*/
|
|
28
39
|
get size() {
|
|
29
40
|
return __classPrivateFieldGet(this, _SimpleSubject_observers, "f").size;
|
|
30
41
|
}
|
|
@@ -37,13 +48,24 @@ class SimpleBehaviorSubject extends SimpleSubject {
|
|
|
37
48
|
_SimpleBehaviorSubject_lastMessage.set(this, void 0);
|
|
38
49
|
__classPrivateFieldSet(this, _SimpleBehaviorSubject_lastMessage, initialValue, "f");
|
|
39
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* @desc Returns the last message published
|
|
53
|
+
*/
|
|
40
54
|
get value() {
|
|
41
55
|
return __classPrivateFieldGet(this, _SimpleBehaviorSubject_lastMessage, "f");
|
|
42
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* @desc Publishes a message to all subscribers
|
|
59
|
+
* @param message - The message to publish
|
|
60
|
+
*/
|
|
43
61
|
publish(message) {
|
|
44
62
|
__classPrivateFieldSet(this, _SimpleBehaviorSubject_lastMessage, message, "f");
|
|
45
63
|
super.publish(message);
|
|
46
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* @desc Subscribes to a subject
|
|
67
|
+
* @param observer - The observer to subscribe
|
|
68
|
+
*/
|
|
47
69
|
subscribe(observer) {
|
|
48
70
|
if (__classPrivateFieldGet(this, _SimpleBehaviorSubject_lastMessage, "f")) {
|
|
49
71
|
observer(__classPrivateFieldGet(this, _SimpleBehaviorSubject_lastMessage, "f"));
|
|
@@ -58,14 +80,27 @@ class Subject extends SimpleSubject {
|
|
|
58
80
|
super(...arguments);
|
|
59
81
|
_Subject_subscriptions.set(this, {});
|
|
60
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* @desc Subscribes to a subject
|
|
85
|
+
* @param identifier - The identifier of the subscription
|
|
86
|
+
* @param observer - The observer to subscribe
|
|
87
|
+
*/
|
|
61
88
|
subscribeWith(identifier, observer) {
|
|
62
89
|
__classPrivateFieldGet(this, _Subject_subscriptions, "f")[identifier] = super.subscribe(observer);
|
|
63
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* @desc Unsubscribes from a subject
|
|
93
|
+
* @param identifier - The identifier of the subscription
|
|
94
|
+
*/
|
|
64
95
|
unsubscribe(identifier) {
|
|
65
96
|
var _a, _b;
|
|
66
97
|
(_b = (_a = __classPrivateFieldGet(this, _Subject_subscriptions, "f"))[identifier]) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
67
98
|
delete __classPrivateFieldGet(this, _Subject_subscriptions, "f")[identifier];
|
|
68
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* @desc Checks if a subscription exists
|
|
102
|
+
* @param identifier - The identifier of the subscription
|
|
103
|
+
*/
|
|
69
104
|
has(identifier) {
|
|
70
105
|
return Boolean(__classPrivateFieldGet(this, _Subject_subscriptions, "f")[identifier]);
|
|
71
106
|
}
|
|
@@ -78,12 +113,21 @@ class BehaviorSubject extends Subject {
|
|
|
78
113
|
_BehaviorSubject_lastMessage.set(this, void 0);
|
|
79
114
|
__classPrivateFieldSet(this, _BehaviorSubject_lastMessage, initialValue, "f");
|
|
80
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* @desc Subscribes to a subject
|
|
118
|
+
* @param identifier - The identifier of the subscription
|
|
119
|
+
* @param observer - The observer to subscribe
|
|
120
|
+
*/
|
|
81
121
|
subscribeWith(identifier, observer) {
|
|
82
122
|
if (__classPrivateFieldGet(this, _BehaviorSubject_lastMessage, "f")) {
|
|
83
123
|
observer(__classPrivateFieldGet(this, _BehaviorSubject_lastMessage, "f"));
|
|
84
124
|
}
|
|
85
125
|
super.subscribeWith(identifier, observer);
|
|
86
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* @desc Publishes a message to all subscribers
|
|
129
|
+
* @param message - The message to publish
|
|
130
|
+
*/
|
|
87
131
|
publish(message) {
|
|
88
132
|
__classPrivateFieldSet(this, _BehaviorSubject_lastMessage, message, "f");
|
|
89
133
|
super.publish(message);
|