feat(rede): placa em carinha.local e app que acha a placa sozinho
- sistema/rede: a placa vira "carinha" na rede (avahi), http://carinha.local na porta 80 (nftables redireciona para a 8100, sem tocar no 192.168.4.1 do portal Carinha-Config) e anúncio "_carinha._tcp" na 8100; - app 0.9.1: quando o endereço salvo não responde, procura o anúncio na rede (NsdManager), testa o endereço achado e passa a usar e guardar. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -108,6 +108,7 @@ public class MainActivity extends Activity {
|
||||
private String servidor;
|
||||
private String token = ""; // CARINHA_TOKEN do servidor; vazio = servidor aberto
|
||||
private final CerebroLocal cerebroLocal = new CerebroLocal();
|
||||
private Descoberta descoberta; // acha a placa na rede quando o endereço salvo não responde
|
||||
private boolean jaCaiuParaLocal = false;
|
||||
private boolean jaRecarregou = false;
|
||||
private boolean usandoLocal = false; // servidor caiu: ficamos na copia do APK
|
||||
@@ -191,6 +192,7 @@ public class MainActivity extends Activity {
|
||||
usarServidorDoPedido(getIntent()); // permite apontar o servidor ao lancar
|
||||
cerebroLocal.chave = token;
|
||||
cerebroLocal.iniciar(this, servidor);
|
||||
descoberta = new Descoberta(this);
|
||||
remoto = new ControleRemoto(new Runnable() {
|
||||
@Override public void run() {
|
||||
runOnUiThread(new Runnable() {
|
||||
@@ -582,7 +584,7 @@ public class MainActivity extends Activity {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override public void run() {
|
||||
if (!usandoLocal || !alvo.equals(servidor)) return;
|
||||
if (!voltou) { procurarServidor(); return; }
|
||||
if (!voltou) { procurarNaRede(); return; }
|
||||
Log.i(TAG, "servidor voltou: " + servidor);
|
||||
usandoLocal = false;
|
||||
jaCaiuParaLocal = false;
|
||||
@@ -594,6 +596,36 @@ public class MainActivity extends Activity {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* O endereço salvo não respondeu: procura a placa pelo anúncio na rede (carinha.local).
|
||||
* Achou em outro endereço que responde, passa a usar esse e guarda; senão tenta de novo daqui a pouco.
|
||||
*/
|
||||
private void procurarNaRede() {
|
||||
if (descoberta.procurando()) { procurarServidor(); return; }
|
||||
descoberta.procurar(new Descoberta.Resposta() {
|
||||
@Override public void achou(final String endereco) {
|
||||
if (!usandoLocal || endereco == null || endereco.equals(servidor)) { procurarServidor(); return; }
|
||||
new Thread(new Runnable() {
|
||||
@Override public void run() {
|
||||
final boolean responde = servidorResponde(endereco);
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override public void run() {
|
||||
if (!responde || !usandoLocal) { procurarServidor(); return; }
|
||||
Log.i(TAG, "placa achada na rede: " + servidor + " -> " + endereco);
|
||||
servidor = endereco;
|
||||
getSharedPreferences(PREFS, MODE_PRIVATE).edit().putString(CHAVE, servidor).apply();
|
||||
cerebroLocal.iniciar(MainActivity.this, servidor);
|
||||
usandoLocal = false;
|
||||
jaCaiuParaLocal = false;
|
||||
abrirRosto();
|
||||
}
|
||||
});
|
||||
}
|
||||
}, "testa-placa-achada").start();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** Qualquer resposta HTTP (até 401 de token) quer dizer que o servidor está no ar. */
|
||||
private static boolean servidorResponde(String endereco) {
|
||||
java.net.HttpURLConnection c = null;
|
||||
|
||||
Reference in New Issue
Block a user