UNPKG

@tf2pickup-org/mumble-client

Version:
53 lines 1.77 kB
import { UserRemove, UserState } from '@tf2pickup-org/mumble-protocol'; import { filterPacket } from './rxjs-operators/filter-packet.js'; import { User } from './user.js'; export class UserManager { client; _users = new Map(); constructor(client) { this.client = client; this.client.on('socketConnect', (socket) => { this._users.clear(); socket.packet.pipe(filterPacket(UserState)).subscribe(userState => { this.syncUser(userState); }); socket.packet.pipe(filterPacket(UserRemove)).subscribe(userRemove => { this.removeUser(userRemove); }); }); } bySession(session) { return this._users.get(session); } byName(name) { return Array.from(this._users.values()).find(u => u.name === name); } findAll(predicate) { return Array.from(this._users.values()).filter(predicate); } syncUser(userState) { if (userState.session === undefined) { return; } let user = this.bySession(userState.session); if (!user) { user = new User(this.client, userState); this._users.set(user.session, user); this.client.emit('userCreate', user); } else { const changes = user.syncState(userState); if (Object.keys(changes).length > 0) { this.client.emit('userUpdate', user, changes); } } } removeUser(userRemove) { const user = this.bySession(userRemove.session); if (user) { this._users.delete(userRemove.session); this.client.emit('userRemove', user); } } } //# sourceMappingURL=user-manager.js.map