Download Game! Currently 77 players and visitors. Last logged in:KalaharWarundFloppyWhisperluna

Blitzer's Blog >> 72117

Back to blogs index
Posted: 05 Sep 2026 23:17 [ permalink ]
TC$mC$ on erinomainen kysymys! Nyt kun Mesh OS on paketoitu siistiksi
kokonaisuudeksi, sen integroiminen osaksi muita web-sovelluksia tai
ulkopuolisia JS-rutiineita on elintC$rkeC$C$.
Mesh OS suunniteltiin alusta asti rajapinnoiltaan avoimeksi. Koska kyseessC$
on puhtaasti selaimessa pyC6rivC$ JS-moottori, virtuaalilevy ja komentotulkki
voidaan altistaa muulle selaimen koodille muutamalla yksinkertaisella
"koukulla".
TC$ssC$ on tC$ydellinen dokumentaatio ja ohjeet siihen, miten ohjaat Mesh
OS:C$C$ ohjelmallisesti ulkopuolelta!
1. VFS:n (Virtuaalilevyn) ohjelmallinen hallinta
Virtuaalilevy rekisterC6itiin ytimen alustuksessa globaaliin muuttujaan
nimeltC$ window.fs. TC$mC$ tarkoittaa, ettC$ mikC$ tahansa muu
JavaScript-koodi sivullasi (tai selaimesi DevTools-konsoli) voi kC$yttC$C$
sitC$ suoraan!
Kaikki VFS:n funktiot ovat asynkronisia (palauttavat Promisen), joten kC$ytC$
niissC$ aina await -avainsanaa.
YksittC$isen tiedoston kirjoittaminen ja lukeminen:
/ Kirjoitetaan tiedosto ohjelmallisesti (esim. JS-sovelluksesi datan vienti)
await window.fs.writeFile('/home/uusi_data.json', JSON.stringify({ avain:
"arvo" }));

/ Luetaan tiedosto toisesta JS-rutiinista
const sisalto = await window.fs.readFile('/home/uusi_data.json');
console.log(sisalto);

Usean tiedoston siirtC$minen kerralla VFS:C$C$n (Massatuonti):
Jos JS-rutiinisi haluaa ladata useita tiedostoja kerralla nopeasti,
Promise.all on tehokkain tapa ajaa VFS-kirjoitukset rinnakkain:
const tiedostot = [
    { polku: '/home/file1.csv', data: '1;2;3' },
    { polku: '/home/file2.csv', data: '4;5;6' },
    { polku: '/bin/mikro.js', data: 'async function main() { return 0; }' }
];

/ Tallennetaan kaikki yhtC$ aikaa virtuaalilevylle
await Promise.all(tiedostot.map(t => window.fs.writeFile(t.polku, t.data)));
console.log("Massatuonti valmis!");

2. REPL-tulkin ja komentojen ohjelmallinen ajo
Jotta JS-koodisi tai konsoli voi syC6ttC$C$ komentoja komentoriville  ja saada
niiden tulokset ulos muuttujiin  meidC$n pitC$C$ vain avata Mesh OS:n
index.html:n kC$yttC6liittymC$stC$ pieni "silta" ulkomaailmaan.
Avaa alkuperC$inen index.html (tai C$sken rakentamasi build.js -skriptin
generointivaihe), ja lisC$C$ sen <script> -lohkon alaosaan (heti const session
= new ShellSession("tty1"); jC$lkeen) nC$mC$ "API-koukut":
            // 1. REKISTERCI PCCSESSIO IKKUNAAN (jotta voit antaa komentoja
suoraan terminaaliin)
            window.meshREPL = session;

            // 2. HEADLESS-SUORITTAJA (TC$mC$ on kultaa JS-integraatioissa!)
            // TC$mC$ funktio ajaa bash-komennon taustalla, eikC$ tulosta
sitC$ UI-terminaaliin,
            // vaan palauttaa tuloksen suoraan JS-muuttujaan!
            window.meshExec = async (cmdString) => {
                let output = [];
                // Luodaan hiljainen "haamusessio" (jakaa saman I/O:n ja
tiedostojC$rjestelmC$n)
                const headlessSession = new ShellSession("headless");
                headlessSession.env = session.env; // Jaetaan samat
ympC$ristC6muuttujat (esim. PATH)
                headlessSession._defaultOut = (msg) => output.push(msg); //
KerC$tC$C$n stdout talteen
                headlessSession._defaultErr = (msg) => console.error("Mesh OS
Error:", msg);
                
                await headlessSession.executeRaw(cmdString);
                return output.join('
'); // Palautetaan valmis tulostevirta!
            };

3. Integraation kC$yttC6esimerkkejC$ (Konsolista tai muusta JS-koodista)
Kun yllC$ olevat sillat on lisC$tty, voit hallita koko kC$yttC6jC$rjestelmC$C$
ulkopuolelta uskomattoman elegantisti!
Esimerkki A: Komennon ajaminen GUI-terminaaliin (Kuin kC$yttC$jC$ olisi
kirjoittanut sen)
/ TC$mC$ tulostaa tuloksen suoraan kC$yttC$jC$n mustaan terminaaliruutuun
await window.meshREPL.executeRaw('echo "Tervehdys ulkoisesta JS-rutiinista!"');

Esimerkki B: Tulosten hakeminen JS-muuttujaan (meshExec -haamusessio)
TC$mC$ on tehokkain tapa integroida Mesh OS osaksi esim. rakenteilla olevaa
visuaalista kC$yttC6liittymC$C$si. Ohjelmasi voi pyytC$C$ Mesh OS:C$C$
prosessoimaan dataa ja palauttamaan sen puhtaana JSONina:
async function haeSuodatetutAsiakkaat() {
    // Annetaan Mesh OS:n hoitaa raskas ETL-putkitus taustalla!
    const cmd = `cat /home/ladattu.csv | sed 's/;;;/;/g' | csv2json | validate
Puhelinnumero "^400"`;
    
    // Suoritetaan komento headless-tilassa. UI ei vC$lC$hdC$, mutta saamme
tuloksen!
    const rawNdjson = await window.meshExec(cmd);
    
    // Parsitaan NDJSON takaisin natiiviksi JS-taulukoksi!
    const asiakkaat = rawNdjson.split('
').filter(Boolean).map(JSON.parse);
    
    console.log("Saimme Mesh OS:ltC$ datan taulukkoon:", asiakkaat);
    return asiakkaat;
}

TC$llC$ meshExec -funktiolla rakennat tC$ydellisen sillan Mesh OS:n
backend-moottorin ja tulevan, tC$ysin erillisen visuaalisen kC$yttC6liittymC$si
 vC$lille. Front-endisi (GUI) voi kC$yttC$C$ Mesh OS:C$C$ tietokantana,
prosessorina ja P2P-reitittimenC$ vain antamalla sille merkkijonomuotoisia
komentoja!