mirror of
https://github.com/zumbiepig/MineXLauncher.git
synced 2025-06-08 08:04:49 +00:00
.
This commit is contained in:
parent
3c2e448aba
commit
4ad900683f
106
proxy/proxy.ts
106
proxy/proxy.ts
@ -35,69 +35,75 @@ app.use((req, res) => {
|
|||||||
if (cached && Date.now() - cached.lastFetched < cacheLifetime) {
|
if (cached && Date.now() - cached.lastFetched < cacheLifetime) {
|
||||||
requestCounter.set(req.url, (requestCounter.get(req.url) ?? 0) + 1);
|
requestCounter.set(req.url, (requestCounter.get(req.url) ?? 0) + 1);
|
||||||
res.writeHead(cached.statusCode, cached.headers).end(cached.data);
|
res.writeHead(cached.statusCode, cached.headers).end(cached.data);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
const proxyReq = https.request(
|
||||||
|
{
|
||||||
|
hostname: proxyHostname,
|
||||||
|
path: req.url,
|
||||||
|
method: req.method,
|
||||||
|
},
|
||||||
|
(proxyRes) => {
|
||||||
|
const statusCode = proxyRes.statusCode ?? 500;
|
||||||
|
const headers = proxyRes.headers;
|
||||||
|
|
||||||
const proxyReq = https.request(
|
const responseChunks: Buffer[] = [];
|
||||||
{
|
|
||||||
hostname: proxyHostname,
|
|
||||||
path: req.url,
|
|
||||||
method: req.method,
|
|
||||||
},
|
|
||||||
(proxyRes) => {
|
|
||||||
const statusCode = proxyRes.statusCode ?? 500;
|
|
||||||
const headers = proxyRes.headers;
|
|
||||||
|
|
||||||
const responseChunks: Buffer[] = [];
|
proxyRes.on('data', (chunk) => responseChunks.push(chunk));
|
||||||
|
|
||||||
proxyRes.on('data', (chunk) => responseChunks.push(chunk));
|
proxyRes.on('end', () => {
|
||||||
|
const responseData = Buffer.concat(responseChunks);
|
||||||
|
|
||||||
proxyRes.on('end', () => {
|
if (req.method === 'GET') {
|
||||||
const responseData = Buffer.concat(responseChunks);
|
cache.set(req.url, {
|
||||||
|
lastFetched: Date.now(),
|
||||||
|
statusCode: statusCode,
|
||||||
|
headers: headers,
|
||||||
|
data: responseData,
|
||||||
|
});
|
||||||
|
|
||||||
if (req.method === 'GET') {
|
requestCounter.set(req.url, (requestCounter.get(req.url) ?? 0) + 1);
|
||||||
cache.set(req.url, {
|
|
||||||
lastFetched: Date.now(),
|
|
||||||
statusCode: statusCode,
|
|
||||||
headers: headers,
|
|
||||||
data: responseData,
|
|
||||||
});
|
|
||||||
|
|
||||||
requestCounter.set(req.url, (requestCounter.get(req.url) ?? 0) + 1);
|
cacheSize += responseData.length;
|
||||||
|
if (cacheSize > maxCacheSize) {
|
||||||
cacheSize += responseData.length;
|
const keys = Array.from(cache.keys());
|
||||||
if (cacheSize > maxCacheSize) {
|
keys.sort(
|
||||||
const keys = Array.from(cache.keys());
|
(a, b) =>
|
||||||
keys.sort(
|
(requestCounter.get(a) ?? 0) - (requestCounter.get(b) ?? 0),
|
||||||
(a, b) =>
|
);
|
||||||
(requestCounter.get(a) ?? 0) - (requestCounter.get(b) ?? 0),
|
while (cacheSize > maxCacheSize && keys.length > 0) {
|
||||||
);
|
const key = keys.shift();
|
||||||
while (cacheSize > maxCacheSize && keys.length > 0) {
|
if (key) {
|
||||||
const key = keys.shift();
|
const cached = cache.get(key);
|
||||||
if (key) {
|
if (cached) {
|
||||||
const cached = cache.get(key);
|
cacheSize -= cached.data.length;
|
||||||
if (cached) {
|
cache.delete(key);
|
||||||
cacheSize -= cached.data.length;
|
}
|
||||||
cache.delete(key);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res.writeHead(statusCode, headers).end(responseData);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
proxyReq.on('error', () => {
|
||||||
|
if (req.method === 'GET' && cache.has(req.url)) {
|
||||||
|
const cached = cache.get(req.url);
|
||||||
|
if (cached) {
|
||||||
|
requestCounter.set(req.url, (requestCounter.get(req.url) ?? 0) + 1);
|
||||||
|
res.writeHead(cached.statusCode, cached.headers).end(cached.data);
|
||||||
}
|
}
|
||||||
|
} else
|
||||||
|
res
|
||||||
|
.writeHead(500, { 'Content-Type': 'text/plain' })
|
||||||
|
.end('500 Internal Server Error');
|
||||||
|
});
|
||||||
|
|
||||||
res.writeHead(statusCode, headers).end(responseData);
|
proxyReq.end();
|
||||||
});
|
}
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
proxyReq.on('error', () =>
|
|
||||||
res
|
|
||||||
.writeHead(500, { 'Content-Type': 'text/plain' })
|
|
||||||
.end('500 Internal Server Error'),
|
|
||||||
);
|
|
||||||
|
|
||||||
proxyReq.end();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
app.listen(PORT, () =>
|
app.listen(PORT, () =>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user