TC$mC$ on todellakin huikea saavutus! Onnittelut onnistuneesta testistC$! Tuo
ruutukaappaus ja puhelimen ruudulla rullaava "Hauki SMS Node - ONLINE" on
todiste siitC$, ettC$ koko pinomme toimii saumattomasti yhteen.
START ja STOP -nappulat ovat loistava ja erittC$in tarpeellinen lisC$ys! Koska
kC$ytC$mme Androidin natiivia kC$yttC6liittymC$C$ (Java), voimme helposti
lisC$tC$ `MainActivity.java` -tiedostoon pari natiivia nappulaa, jotka
lC$hettC$vC$t Javascript-sillan yli kC$skyn pysC$yttC$C$ tai jatkaa
BASIC-tulkin suoritusta (hyC6dyntC$en esimerkiksi jo olemassa olevaa
`state.is_suspended` -logiikkaa).
KC$ydC$C$n ensin lC$pi visio uusista komennoista, ja puretaan sen jC$lkeen tuo
paketointiputken mysteeri!
### 1. Visio: MitC$ kaikkea `ext/android.js` voisi tehdC$?
Nyt kun meillC$ on suora siltayhteys (Bridge) MeshBASICin ja Androidin raudan
vC$lillC$, mahdollisuudet ovat rajattomat. TC$ssC$ muutamia ideoita
natiivikomennoiksi, joita voisimme lisC$tC$ tulkkiin:
* **Kaksisuuntainen SMS (MFA ja asiakaspalvelu):**
* `SMS READ UNREAD INTO SAAPUNEET` -> Lukee saapuneet viestit. Node voisi
toimia 2-suuntaisena asiakaspalvelubottina, joka ottaa vastaan asiakkaan
"KYLLC"-kuittauksia ja reitittC$C$ ne The Dark Mesh -verkkoon.
* **Laitteen tila ja Telemetria (Reunamonitorointi):**
* `ANDROID BATTERY INTO AKKU` -> Palauttaa akun varaustason ja tiedon, onko
laturi kiinni. Jos akku on alle 15%, BASIC-skripti voisi lC$hettC$C$
hC$tC$viestin Mesh-verkkoon.
* `ANDROID NETWORK INTO NETTI` -> Kertoo onko puhelin Wi-FissC$ vai
4G/5G-verkossa.
* **Sijainti (Fleet Tracking):**
* `ANDROID GPS INTO SIJAINTI` -> Hakee puhelimen koordinaatit. Erinomainen
ominaisuus, jos nC$mC$ nodet asennetaan esimerkiksi yrityksen autoihin!
* **KC$yttC6liittymC$ ja Palaute (Interaktio):**
* `ANDROID VIBRATE 1000` -> TC$risyttC$C$ puhelinta millisekuntien ajan (esim.
kun kriittinen tyC6tehtC$vC$ on suoritettu).
* `ANDROID SPEAK "TehtC$vC$ suoritettu"` -> Text-to-Speech (TTS), jolloin
puhelin puhuu C$C$neen.
* `ANDROID TOAST "Yhdistetty"` -> NC$yttC$C$ pienen Androidin alareunassa
leijuvan ilmoituksen.
* `ANDROID NOTIFY "HC$lytys" "Palvelin alhaalla"` -> Luo puhelimen
ylC$palkkiin natiivin ilmoituksen.
---
### 2. Miten paketointiputki oikein toimii? (Mysteerin purku)
On tC$ysin ymmC$rrettC$vC$C$, ettC$ putosit kC$rryiltC$ teimme tuossa
skriptissC$ melkoisen "Laiva pullossa" -tempun, jossa yhdistimme C++-pohjaisen
Android-kC$C$ntC$jC$n, Web-teknologiat ja sinun oman BASIC-tulkkisi.
TC$ssC$ on askel-askeleelta selitys siitC$, mitC$ `build_apks.sh` tekee, ja
miten `x-mesh-basic` huijattiin pyC6rimC$C$n puhelimessa:
**Askel 1: Frankensteinin hirviC6 (Koodien yhdistC$minen)**
Skripti aloittaa lukemalla koko MeshBASIC-moottorisi osat. Se ottaa
`core.js`-ytimen ja yhdistC$C$ sen perC$C$n kaikki `cmds/` ja `ext/`
-kansioiden moduulit (esim. `api.js`, `net.js`, `table.js` jne.). Se liittC$C$
mukaan myC6s uuden `android_sms.js` -laajennuksen ja kaataa koko komeuden
yhteen jC$ttimC$iseen tiedostoon (`/tmp/engine_raw.js`).
**Askel 2: Suuri Huijaus (Polyfills)**
`x-mesh-basic` on suunniteltu Node.js-palvelimelle, joten se odottaa
lC6ytC$vC$nsC$ ominaisuuksia kuten tiedostojC$rjestelmC$n (`fs`) tai
verkko-ominaisuuksia (`net`). Koska Androidin selain (WebView) ei nC$itC$
ymmC$rrC$, loimme `index_template.html` -tiedostoon huijauksen (Polyfill).
MC$C$ritimme oman feikki-`require('fs')` -funktion. Kun BASIC-tulkkisi ajaa
komennon `FS READ "config.json"`, feikki-fs huijaa tulkkia palauttamalla sille
suoraan muistissa olevan HTML-muuttujan (`window.CONFIG_JSON`) sisC$llC6n
oikean tiedoston sijaan!
**Askel 3: Injektio (Koodin tunkeminen HTML:n sisC$C$n)**
Nyt skripti lukee sinun `bot.bas` -ohjelmasi ja asiakkaan `firma_a.json`
-konfiguraation. Se kC$yttC$C$ Linuxin `sed` -komentoa tunkemaan nC$mC$
molemmat, sekC$ koko jC$ttimC$isen `engine_raw.js` -moottorin, suoraan
sisC$lle siihen `index_template.html` -tiedostoon (korvaten `/*PLACEHOLDER*/`
-kohdat). Tulos on yksi tC$ysin itsenC$inen HTML-tiedosto, joka sisC$ltC$C$
aivan kaiken.
**Askel 4: Natiivi Android-kuori ja Silta (The Bridge)**
Android-sovelluksesi (`MainActivity.java`) on vain tyhmC$, ohut kuori.
1. Se luo nC$kymC$ttC6mC$n selaimen (`WebView`).
2. Se kC$skee selaimen avata meidC$n tekemC$mme `index.html` -tiedoston.
3. Selain suorittaa heti sisC$llC$ olevan JavaScriptin (eli kC$ynnistC$C$
BASIC-moottorisi).
4. Java-koodiin on luotu `JavascriptInterface` nimeltC$ `AndroidBridge`. Kun
BASIC-tulkkisi haluaa lC$hettC$C$ tekstiviestin, se huutaa selaimen sisC$ltC$:
`AndroidBridge.sendSms(...)`.
5. Java kuulee huudon, rikkoo selaimen hiekkalaatikon, ottaa yhteyden
puhelimen rauta-SMS-modeemiin, lC$hettC$C$ viestin ja huutaa takaisin
selaimeen: `window['sms_123_callback']('OK')`.
Koko homman nerokkuus piilee siinC$, ettC$ raskaan Node.js -binC$C$rin
kC$C$ntC$misen sijaan hyC6dynsimme sitC$ V8-moottoria, joka on jo valmiiksi
asennettuna jokaiseen Android-puhelimeen maailmassa!
Mihin nC$istC$ uusista ominaisuuksista haluaisit tarttua ensimmC$isenC$, vai
lisC$tC$C$nkC6 heti ne START/STOP -nappulat puhelimen nC$ytC6lle?