fork from scoresaber-reloaded
This commit is contained in:
55
src/network/queues/queues.js
Normal file
55
src/network/queues/queues.js
Normal file
@ -0,0 +1,55 @@
|
||||
import {writable} from 'svelte/store'
|
||||
import {PRIORITY} from './http-queue'
|
||||
import createScoreSaberApiQueue from './scoresaber/api-queue'
|
||||
import createScoreSaberPageQueue from './scoresaber/page-queue'
|
||||
import createBeatMapsApiQueue from './beatmaps/api-queue'
|
||||
import createBeatSaviorApiQueue from './beatsavior/api-queue'
|
||||
import createTwitchApiQueue from './twitch/api-queue'
|
||||
import createAccSaberApiQueue from './accsaber/api-queue'
|
||||
|
||||
export const getResponseBody = response => response ? response.body : null;
|
||||
export const isResponseCached = response => !!(response && response.cached)
|
||||
export const updateResponseBody = (response, body) => response ? {...response, body} : null;
|
||||
|
||||
const initQueue = queue => {
|
||||
let queueState = {
|
||||
size: 0,
|
||||
pending: 0,
|
||||
rateLimit: {waiting: 0, remaining: null, limit: null, resetAt: null},
|
||||
progress: {num: 0, count: 0, progress: 1},
|
||||
};
|
||||
|
||||
const {subscribe, set} = writable(queueState);
|
||||
|
||||
queue.on('change', ({size, pending}) => {
|
||||
const {rateLimit: {waiting}} = queueState;
|
||||
const {remaining, limit, resetAt} = queue.getRateLimit();
|
||||
queueState = {...queueState, size, pending, rateLimit: {waiting, remaining, limit, resetAt}};
|
||||
set(queueState);
|
||||
});
|
||||
queue.on('progress', ({progress, num, count}) => {
|
||||
const {rateLimit: {waiting}} = queueState;
|
||||
const {remaining, limit, resetAt} = queue.getRateLimit();
|
||||
queueState = {...queueState, progress: {num, count, progress}, rateLimit: {waiting, remaining, limit, resetAt}}
|
||||
set(queueState);
|
||||
});
|
||||
queue.on('waiting', ({waiting, remaining, limit, resetAt}) => {
|
||||
queueState = {...queueState, rateLimit: {waiting, remaining, limit, resetAt}}
|
||||
set(queueState);
|
||||
})
|
||||
|
||||
return {
|
||||
subscribe,
|
||||
...queue,
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
SCORESABER_API: initQueue(createScoreSaberApiQueue({concurrency: 3, timeout: 95000})),
|
||||
SCORESABER_PAGE: initQueue(createScoreSaberPageQueue({concurrency: 3, timeout: 30000})),
|
||||
BEATMAPS: initQueue(createBeatMapsApiQueue({concurrency: 1, timeout: 10000, intervalCap: 10, interval: 1000})),
|
||||
BEATSAVIOR: initQueue(createBeatSaviorApiQueue({concurrency: 1, timeout: 10000, intervalCap: 60, interval: 60000})),
|
||||
TWITCH: initQueue(createTwitchApiQueue({concurrency: 8, timeout: 8000, intervalCap: 800, interval: 60000})),
|
||||
ACCSABER: initQueue(createAccSaberApiQueue({concurrency: 2, timeout: 10000})),
|
||||
PRIORITY,
|
||||
}
|
Reference in New Issue
Block a user