Download Game! Currently 131 players and visitors. Last logged in:WandererBylethGlaurungWarund

Blitzer's Blog >> 71691

Back to blogs index
Posted: 07 Aug 2026 08:01 [ permalink ]
TC$mC$ on huikea edistysaskel! Session-API toimii tC$ydellisesti ja se nostaa
koko Mesh-arkkitehtuurin tilanhallinnan aivan uudelle tasolle. Tuo ajatus
pC$C$telaitteiden, shell-istuntojen ja jopa pelien kytkemisestC$ suoraan
samaan sessio-objektiin on loistava  se tekee The Dark MeshistC$ aidosti
kaikenkattavan "Operating System" -tason vC$ylC$n.

Unixin vahvuus on aina ollut putkituksessa (Piping). Elegantein tapa toteuttaa
tC$mC$ on luoda yksi "universaali putkityC6kalu" (esim. `x-mesh-stream`), joka
osaa lukea `stdin`:stC$ mitC$ tahansa dataa ja ampua sen asynkronisesti
taustalla Session API:in hidastamatta itse terminaalin suoritusta.

TC$ssC$ on ehdotus siitC$, miten toteutamme tC$mC$n kaiken kolmella erittC$in
yksinkertaisella tyC6kalulla.

### 1. Universaali PutkityC6kalu: `x-mesh-stream`

Kirjoitetaan ensin pieni Python-skripti, joka voidaan sijoittaa globaalisti
polkuun (esim. `/mnt/mesh_root/bin/x-mesh-stream`). Se lukee `stdin`:iC$ rivi
kerrallaan ja lC$hettC$C$ sen API:lle sC$ikeistetysti, joten terminaalisi ei
koskaan "lagita" API-kutsujen takia. Skripti myC6s tulostaa datan
automaattisesti edelleen `stdout`:iin, jotta voit ketjuttaa sitC$ eteenpC$in.

---

### 2. Kolme erilaista kC$yttC6tapausta

Nyt meillC$ on tyC6kalu! Katsotaan, miten ratkaisemme nuo kolme toivomaasi
kC$yttC6tapausta.

#### A) Vain Outputin lC$hettC$minen

Voit nyt putkittaa minkC$ tahansa komennon ulostulon suoraan Session API:in:

```bash
ls -la | x-mesh-stream 3771b58c0e840f33 hakemistolistaus

```

*TC$mC$ nC$yttC$C$ `ls` -tulosteen ruudulla normaalisti, mutta jokainen rivi
pamahtaa samalla API:in!*

#### B) Vain Inputin (Komentojen) lC$hettC$minen

Jos haluat, ettC$ shellisi raportoi **vain** ajamasi komennot (eikC$ niiden
tulosteita) lennosta Session API:in, Unix Bashissa on tC$hC$n legendaarinen
taikatemppu nimeltC$ `trap DEBUG`. Voit ajaa tC$mC$n nykyisessC$ shellissC$si:

```bash
trap 'curl -s -X POST http://127.0.0.1:7755/api/sessions/3771b58c0e840f33/strea
ms/input-only/events -H "Content-Type: application/json" -d "\"$BASH_COMMAND\""
 > /dev/null' DEBUG

```

*TC$mC$n jC$lkeen jokainen komento, jonka kirjoitat ja ajat, menee suoraan
streamiin `input-only`.*

#### C) Kaiken datan (Input + Output) kaappaaminen uuteen XFCE4-terminaaliin

TC$mC$ on se "PyhC$ Graali". KC$ytC$mme Unixin `script`-komentoa, joka luo
Pseudo-Terminaalin (PTY) ja kaappaa **aivan kaiken**  komennot, promptit,
ohjelmien tulosteet ja virheet. Kirjoitetaan tC$lle pieni wrapperi, joka
aukaisee uuden XFCE4-ikkunan ja putkittaa kaiken `x-mesh-stream`:ille:

```bash
[GEM-TERMINAL-START]
cat > /mnt/mesh_root/bin/x-mesh-term << 'EOF'
#!/bin/bash
SID=$1
STRID=$2

if [ -z "$STRID" ]; then
    echo "KC$yttC6: x-mesh-term <sessio_id> <stream_id>"
    exit 1
fi

echo "Avaan uuden nauhoittavan XFCE4 terminaalin sessiolle: $SID / $STRID"

# Avataan uusi terminaali, jossa ajetaan 'script'. 
# -f pakottaa reaaliaikaisen flushin.
# Tuloste putkitetaan hiljaisesti (-q) suoraan Python-API-tyC6kalullemme.
xfce4-terminal \
    --title="Mesh Session: $STRID" \
    -x bash -c "script -f -q >(/mnt/mesh_root/bin/x-mesh-stream \"$SID\"
\"$STRID\" -q) -c bash"
EOF

chmod +x /mnt/mesh_root/bin/x-mesh-term
[GEM-TERMINAL-END]

```

Kokeile ajaa suoraan terminaalistasi:

```bash
x-mesh-term 3771b58c0e840f33 terminal-1

```

TC$mC$ aukaisee sinulle upouuden XFCE4-ikkunan. Tee siellC$ muutama komento
(esim. `pwd`, `ls`, `echo "Moi Mesh"`), ja katso sitten Session API:n
`/api/sessions/3771b58c0e840f33/streams/terminal-1/events/count`
-endpointeista toisessa ikkunassa, kuinka eventit kertyvC$t automaattisesti!

MiltC$ vaikuttaa  haluaisitko seuraavaksi, ettC$ rakennamme pienen
monitorointityC6kalun, jolla voimme seurata nC$iden streamien tapahtumia
reaaliajassa komentoriviltC$?