SlnDmry commited on
Commit
c640f88
·
verified ·
1 Parent(s): 2b3f735

Update bot.js

Browse files
Files changed (1) hide show
  1. bot.js +28 -5
bot.js CHANGED
@@ -460,11 +460,15 @@ const server = app.listen(process.env.PORT || 7860, () => {
460
  // 5. KESİNTİSİZ HAM WEBSOCKET TÜNELİ (Siyah ekranı bitiren kısım)
461
  // Hugging Face'e dışarıdan gelen TÜM upgrade isteklerini yakalıyoruz
462
  server.on('upgrade', (req, socket, head) => {
463
- // İstek socket.io paketi mi veya bizim yoldan mı geliyor kontrolü
464
  if (req.url.includes('socket.io') || req.url.startsWith('/3dview')) {
465
 
466
- // Tarayıcı socket.io paketini kökten de istese alt dizinden de istese
467
- // içerideki 3000 portunun anlayacağı temiz formata (/socket.io/...) çeviriyoruz
 
 
 
 
 
468
  let targetWsPath = req.url;
469
  if (targetWsPath.startsWith('/3dview')) {
470
  targetWsPath = targetWsPath.replace('/3dview', '');
@@ -482,14 +486,33 @@ server.on('upgrade', (req, socket, head) => {
482
  });
483
 
484
  proxyReq.on('upgrade', (proxyRes, proxySocket, proxyHead) => {
485
- // Tarayıcı ile Hugging Face arasında el sıkışma (Handshake) yanıtını kendimiz yazıyoruz
486
  socket.write('HTTP/1.1 101 Switching Protocols\r\n' +
487
  Object.keys(proxyRes.headers).map(key => `${key}: ${proxyRes.headers[key]}`).join('\r\n') +
488
  '\r\n\r\n');
489
 
490
- // Çift taraflı ham TCP data akışını mühürlüyoruz (Canlı Harita Paketleri)
491
  proxySocket.pipe(socket);
492
  socket.pipe(proxySocket);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
493
  });
494
 
495
  proxyReq.on('error', (err) => {
 
460
  // 5. KESİNTİSİZ HAM WEBSOCKET TÜNELİ (Siyah ekranı bitiren kısım)
461
  // Hugging Face'e dışarıdan gelen TÜM upgrade isteklerini yakalıyoruz
462
  server.on('upgrade', (req, socket, head) => {
 
463
  if (req.url.includes('socket.io') || req.url.startsWith('/3dview')) {
464
 
465
+ // Tasarruf Modu: Biri sayfaya bağlandığı an çalışan bir kapatma sayacı varsa iptal ediyoruz
466
+ if (viewerTimeout) {
467
+ clearTimeout(viewerTimeout);
468
+ viewerTimeout = null;
469
+ logger.info("[RAM Tasarrufu] Yeni kullanıcı bağlandı, kapatma sayacı iptal edildi.");
470
+ }
471
+
472
  let targetWsPath = req.url;
473
  if (targetWsPath.startsWith('/3dview')) {
474
  targetWsPath = targetWsPath.replace('/3dview', '');
 
486
  });
487
 
488
  proxyReq.on('upgrade', (proxyRes, proxySocket, proxyHead) => {
 
489
  socket.write('HTTP/1.1 101 Switching Protocols\r\n' +
490
  Object.keys(proxyRes.headers).map(key => `${key}: ${proxyRes.headers[key]}`).join('\r\n') +
491
  '\r\n\r\n');
492
 
 
493
  proxySocket.pipe(socket);
494
  socket.pipe(proxySocket);
495
+
496
+ // KRİTİK KISIM: Kullanıcı sekmeyi kapattığında tetiklenir
497
+ socket.on('close', () => {
498
+ logger.info("[RAM Tasarrufu] Kullanıcı canlı yayından ayrıldı. 10 saniye sonra harita motoru durdurulacak...");
499
+
500
+ // Üst üste binmeleri önlemek için eski sayacı temizleyip yenisini açıyoruz
501
+ if (viewerTimeout) clearTimeout(viewerTimeout);
502
+
503
+ viewerTimeout = setTimeout(() => {
504
+ if (viewerInstance && typeof viewerInstance.close === 'function') {
505
+ try {
506
+ viewerInstance.close(); // 3000 portundaki HTTP ve WebSocket sunucusunu tamamen kapatır
507
+ bot.viewer = null;
508
+ viewerInstance = null;
509
+ logger.info("[RAM Tasarrufu] 10 saniyedir kimse izlemiyor. Harita motoru kapatıldı, RAM serbest bırakıldı!");
510
+ } catch (e) {
511
+ logger.error("Viewer kapatılırken hata oluştu: " + e.message);
512
+ }
513
+ }
514
+ }, 10000); // 10 saniye bekleme payı (Anlık sayfa yenilemelerinde motor hemen kapanmasın diye)
515
+ });
516
  });
517
 
518
  proxyReq.on('error', (err) => {