UNPKG

@pubby/sdk

Version:
107 lines (104 loc) 4.29 kB
import { __extends, __read, __values, __spread } from 'tslib'; import { PubbyModule } from '../../module.js'; import '../../websocket/incoming/index.js'; import '../../websocket/outgoing/index.js'; import { RoomModule } from '../room/index.js'; import { QueueUpdateResponse } from '../../websocket/incoming/queue-update.event.js'; import { QueueAddResponse } from '../../websocket/incoming/queue-add.event.js'; import { QueueJoinRequest } from '../../websocket/outgoing/queue-join.event.js'; import { QueueRemoveRequest } from '../../websocket/outgoing/queue-remove.event.js'; import { QueueMoveRequest } from '../../websocket/outgoing/queue-move.event.js'; var QueueModule = /** @class */ (function (_super) { __extends(QueueModule, _super); function QueueModule(client) { var _this = _super.call(this, client) || this; _this.state = new Set(); // Importa websocket client.use(RoomModule); client.queue = _this; _this.update$ = client.ws.listen(QueueUpdateResponse); _this.add$ = client.ws.listen(QueueAddResponse); return _this; } Object.defineProperty(QueueModule.prototype, "usersId", { get: function () { return Array.from(this.state); }, enumerable: false, configurable: true }); Object.defineProperty(QueueModule.prototype, "users", { get: function () { var _this = this; return this.usersId.map(function (userId) { return _this.pubby.room.state.users.get(userId); }); }, enumerable: false, configurable: true }); Object.defineProperty(QueueModule.prototype, "next", { get: function () { var _a = __read(this.usersId, 1), userId = _a[0]; return this.pubby.room.state.users.get(userId); }, enumerable: false, configurable: true }); QueueModule.prototype.init = function () { var _this = this; this.update$.subscribe(function (_a) { var e_1, _b; var queue = _a.queue; var old = new Set(_this.state); _this.state = new Set(queue); _this.emit("update", _this.users, old); try { for (var old_1 = __values(old), old_1_1 = old_1.next(); !old_1_1.done; old_1_1 = old_1.next()) { var userId = old_1_1.value; if (!_this.state.has(userId)) { _this.emit("user-leave", userId); } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (old_1_1 && !old_1_1.done && (_b = old_1.return)) _b.call(old_1); } finally { if (e_1) throw e_1.error; } } }); this.add$.subscribe(function (_a) { var userId = _a.userId, addedUserId = _a.addedUserId; _this.state.add(addedUserId); var addedUser = _this.pubby.room.state.users.get(addedUserId); var user = userId ? _this.pubby.room.state.users.get(userId) : null; _this.emit("user-join", addedUser, user); }); }; QueueModule.prototype.join = function (userId) { return this.pubby.ws.addAsync(new QueueJoinRequest(userId)); }; QueueModule.prototype.leave = function (userId) { return this.pubby.ws.addAsync(new QueueRemoveRequest(userId)); }; QueueModule.prototype.move = function (userId, position) { var user = this.users[position - 1]; if (user !== undefined && user.id !== userId) { this.pubby.ws.add(new QueueMoveRequest(userId, user.id)); } }; QueueModule.prototype.has = function (userId) { return this.state.has(userId); }; QueueModule.prototype.on = function (event) { var listeners = []; for (var _i = 1; _i < arguments.length; _i++) { listeners[_i - 1] = arguments[_i]; } return _super.prototype.on.apply(this, __spread([event], listeners)); }; return QueueModule; }(PubbyModule)); export { QueueModule };