@pubby/sdk
Version:
Pubby Development Kit
107 lines (104 loc) • 4.29 kB
JavaScript
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 };