Spaces:
Paused
Paused
Update bot.js
Browse files
bot.js
CHANGED
|
@@ -418,40 +418,40 @@ const checkAndStartViewer = (req, res, next) => {
|
|
| 418 |
};
|
| 419 |
|
| 420 |
// Geliştirilmiş Proxy Katmanı
|
| 421 |
-
|
| 422 |
target: 'http://localhost:3000',
|
| 423 |
changeOrigin: true,
|
| 424 |
-
ws: true,
|
| 425 |
pathRewrite: {
|
| 426 |
-
'^/3dview': '',
|
| 427 |
},
|
| 428 |
-
//
|
| 429 |
onError: (err, req, res) => {
|
| 430 |
logger.error("[Proxy Hatası] 3000 portuna bağlanılamadı: " + err.message);
|
| 431 |
if (res.writeHead && !res.headersSent) {
|
| 432 |
res.writeHead(502, { 'Content-Type': 'text/plain; charset=utf-8' });
|
| 433 |
res.end('3D Görüntüleyici yükleniyor veya bot hazır değil. Lütfen sayfayı yenileyiniz.');
|
| 434 |
}
|
| 435 |
-
},
|
| 436 |
-
onProxyReqWs: (proxyReq, req, socket, options, head) => {
|
| 437 |
-
socket.on('close', () => {
|
| 438 |
-
logger.info("[RAM Tasarrufu] Kullanıcı yayından ayrıldı. 10 saniye sonra viewer kapatılacak...");
|
| 439 |
-
|
| 440 |
-
viewerTimeout = setTimeout(() => {
|
| 441 |
-
if (viewerInstance && typeof viewerInstance.close === 'function') {
|
| 442 |
-
try {
|
| 443 |
-
viewerInstance.close();
|
| 444 |
-
bot.viewer = null;
|
| 445 |
-
viewerInstance = null;
|
| 446 |
-
logger.info("[RAM Tasarrufu] Viewer kapatıldı, RAM serbest bırakıldı.");
|
| 447 |
-
} catch (e) {
|
| 448 |
-
logger.error("Viewer kapatılırken hata: " + e);
|
| 449 |
-
}
|
| 450 |
-
}
|
| 451 |
-
}, 10000);
|
| 452 |
-
});
|
| 453 |
}
|
| 454 |
-
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 455 |
|
| 456 |
app.listen(process.env.PORT || 7860);
|
| 457 |
|
|
|
|
| 418 |
};
|
| 419 |
|
| 420 |
// Geliştirilmiş Proxy Katmanı
|
| 421 |
+
const proxyMiddleware = createProxyMiddleware({
|
| 422 |
target: 'http://localhost:3000',
|
| 423 |
changeOrigin: true,
|
| 424 |
+
ws: true, // Websocket desteği aktif
|
| 425 |
pathRewrite: {
|
| 426 |
+
'^/3dview': '', // /3dview ile gelen istekleri içeride temizle
|
| 427 |
},
|
| 428 |
+
logLevel: 'debug', // Konsolda ne olup bittiğini, hatanın nereden geldiğini net görmek için
|
| 429 |
onError: (err, req, res) => {
|
| 430 |
logger.error("[Proxy Hatası] 3000 portuna bağlanılamadı: " + err.message);
|
| 431 |
if (res.writeHead && !res.headersSent) {
|
| 432 |
res.writeHead(502, { 'Content-Type': 'text/plain; charset=utf-8' });
|
| 433 |
res.end('3D Görüntüleyici yükleniyor veya bot hazır değil. Lütfen sayfayı yenileyiniz.');
|
| 434 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 435 |
}
|
| 436 |
+
});
|
| 437 |
+
|
| 438 |
+
// Standart HTTP istekleri için middleware'i bağlıyoruz
|
| 439 |
+
app.use('/3dview', checkAndStartViewer, proxyMiddleware);
|
| 440 |
+
|
| 441 |
+
// --- CRITICAL HUGGING FACE WEBSOCKET FIX ---
|
| 442 |
+
// Hugging Face üzerindeki Express sunucumuzu ayağa kaldırıyoruz
|
| 443 |
+
const server = app.listen(process.env.PORT || 7860, () => {
|
| 444 |
+
logger.info("Ana Express sunucusu aktif.");
|
| 445 |
+
});
|
| 446 |
+
|
| 447 |
+
// Hugging Face'den gelen ham Websocket isteklerini yakalayıp
|
| 448 |
+
// doğrudan http-proxy-middleware'in tüneline elden teslim ediyoruz.
|
| 449 |
+
server.on('upgrade', (req, socket, head) => {
|
| 450 |
+
if (req.url.startsWith('/3dview')) {
|
| 451 |
+
logger.info("[Proxy Websocket] Yakalanan WS bağlantısı 3000 portuna aktarılıyor: " + req.url);
|
| 452 |
+
proxyMiddleware.upgrade(req, socket, head);
|
| 453 |
+
}
|
| 454 |
+
});
|
| 455 |
|
| 456 |
app.listen(process.env.PORT || 7860);
|
| 457 |
|