PeerTube/server/core/lib/live/live-quota-store.ts

49 lines
1.2 KiB
TypeScript
Raw Normal View History

2021-06-16 08:14:41 -05:00
class LiveQuotaStore {
private static instance: LiveQuotaStore
private readonly livesPerUser = new Map<number, { sessionId: string, size: number }[]>()
2021-06-16 08:14:41 -05:00
private constructor () {
}
addNewLive (userId: number, sessionId: string) {
2021-06-16 08:14:41 -05:00
if (!this.livesPerUser.has(userId)) {
this.livesPerUser.set(userId, [])
}
const currentUserLive = { sessionId, size: 0 }
2021-06-16 08:14:41 -05:00
const livesOfUser = this.livesPerUser.get(userId)
livesOfUser.push(currentUserLive)
}
removeLive (userId: number, sessionId: string) {
2021-06-16 08:14:41 -05:00
const newLivesPerUser = this.livesPerUser.get(userId)
.filter(o => o.sessionId !== sessionId)
2021-06-16 08:14:41 -05:00
this.livesPerUser.set(userId, newLivesPerUser)
}
addQuotaTo (userId: number, sessionId: string, size: number) {
2021-06-16 08:14:41 -05:00
const lives = this.livesPerUser.get(userId)
const live = lives.find(l => l.sessionId === sessionId)
2021-06-16 08:14:41 -05:00
live.size += size
}
getLiveQuotaOfUser (userId: number) {
2021-06-16 08:14:41 -05:00
const currentLives = this.livesPerUser.get(userId)
if (!currentLives) return 0
return currentLives.reduce((sum, obj) => sum + obj.size, 0)
}
static get Instance () {
return this.instance || (this.instance = new this())
}
}
export {
LiveQuotaStore
}