delay.ts 852 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import { getProxyDelay } from "./api";
  2. const hashKey = (name: string, group: string) => `${group ?? ""}::${name}`;
  3. class DelayManager {
  4. private cache = new Map<string, [number, number]>();
  5. setDelay(name: string, group: string, delay: number) {
  6. this.cache.set(hashKey(name, group), [Date.now(), delay]);
  7. }
  8. getDelay(name: string, group: string) {
  9. if (!name) return -1;
  10. const result = this.cache.get(hashKey(name, group));
  11. if (result && Date.now() - result[0] <= 18e5) {
  12. return result[1];
  13. }
  14. return -1;
  15. }
  16. async checkDelay(name: string, group: string) {
  17. let delay = -1;
  18. try {
  19. const result = await getProxyDelay(name);
  20. delay = result.delay;
  21. } catch {
  22. delay = 1e6; // error
  23. }
  24. this.setDelay(name, group, delay);
  25. return delay;
  26. }
  27. }
  28. export default new DelayManager();