File size: 4,301 Bytes
3616790
cf039ba
3616790
 
 
cf039ba
 
 
 
 
 
3616790
 
 
 
 
 
 
5827406
3616790
 
cf039ba
 
 
 
 
3616790
 
 
cf039ba
3616790
11d936d
cf039ba
 
 
 
3616790
 
 
 
cf039ba
1343021
3616790
 
cf039ba
 
11d936d
cf039ba
 
 
 
 
3616790
cf039ba
 
 
 
 
 
 
 
 
 
 
 
 
11d936d
cf039ba
11d936d
cf039ba
 
 
 
 
 
3616790
cf039ba
 
 
 
3616790
cf039ba
 
 
11d936d
cf039ba
 
 
 
 
11d936d
cf039ba
 
 
11d936d
cf039ba
 
11d936d
cf039ba
 
 
 
 
 
 
 
 
 
 
 
 
 
11d936d
cf039ba
 
3616790
 
cf039ba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>llamameta/glm4.5-free-unlimited-chatbot</title>
    
    <!-- Meta tags untuk mencegah caching halaman HTML -->
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">
    
    <style>
        html, body {
            margin: 0;
            padding: 0;
            width: 100%;
            height: 100%;
        }
        #loading {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(255, 255, 255, 0.8);
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 24px;
            z-index: 1000;
        }
        iframe {
            width: 100%;
            height: 100vh;
            border: none;
        }
    </style>
</head>
<body>
    <div id="loading">Please wait Memilih server optimal...</div>
    <iframe id="streamlit-frame" allow="clipboard-write"></iframe>

    <script>
    // Ganti ini dengan versi baru setiap kali Anda update link SERVERS (misalnya "v2", "v3", dll.)
    const VERSION = "v1";  // Ubah ini ke nilai baru untuk memaksa update (contoh: "v2" saat link berubah)

    // Array server dengan link baru Anda (ganti sesuai kebutuhan)
    const SERVERS = [
        "https://glm45.balianone.workers.dev/?embed=true",  // Ganti dengan link baru
        "https://glm45.balianone.workers.dev/?embed=true"   // Ganti dengan link baru
    ];

    // Fungsi untuk mengecek kecepatan respons server (sama seperti sebelumnya, tapi tambah timeout)
    async function checkServerSpeed(url) {
        const start = performance.now();
        try {
            const response = await Promise.race([
                fetch(url, { method: 'HEAD', mode: 'no-cors' }),
                new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), 5000))  // Timeout 5 detik
            ]);
            const end = performance.now();
            return end - start;
        } catch (error) {
            console.error(`Error checking ${url}:`, error);
            return Infinity;
        }
    }

    // Fungsi untuk memilih server berdasarkan kecepatan respons
    async function chooseServer() {
        const speeds = await Promise.all(SERVERS.map(checkServerSpeed));
        const fastestIndex = speeds.indexOf(Math.min(...speeds));
        return SERVERS[fastestIndex];
    }

    // Fungsi untuk memuat Streamlit
    async function loadStreamlit() {
        const loadingElement = document.getElementById('loading');
        const iframe = document.getElementById('streamlit-frame');

        // Gunakan key sessionStorage dengan VERSION untuk cache busting
        const storageKey = `streamlitUrl_${VERSION}`;
        let chosenUrl = sessionStorage.getItem(storageKey);

        if (!chosenUrl) {
            // Jika belum ada atau version berubah, pilih server baru dan simpan
            chosenUrl = await chooseServer();
            sessionStorage.setItem(storageKey, chosenUrl);
        }

        // Tambahkan cache busting ke URL iframe (timestamp unik)
        const cacheBuster = new Date().getTime();  // Timestamp untuk memaksa no-cache
        const iframeSrc = `${chosenUrl}&cb=${cacheBuster}`;  // Append ?cb=timestamp jika URL sudah punya query

        // Set src iframe
        iframe.src = iframeSrc;

        // Event onload untuk sembunyikan loading
        iframe.onload = () => {
            loadingElement.style.display = 'none';
        };

        // Fallback: Jika iframe gagal load (misalnya URL lama invalid), pilih ulang
        iframe.onerror = async () => {
            console.warn('Iframe load failed, rechoosing server...');
            sessionStorage.removeItem(storageKey);  // Hapus storage lama
            chosenUrl = await chooseServer();
            sessionStorage.setItem(storageKey, chosenUrl);
            iframe.src = `${chosenUrl}&cb=${new Date().getTime()}`;
        };
    }

    // Jalankan loadStreamlit saat halaman dimuat
    window.onload = loadStreamlit;
    </script>
</body>
</html>