I pulsanti delle due pagine sono tra loro collegati? Dalla descrizione sembra di no, dall'esempio sembra di sì...
Dall'esempio sembra che:
- i pulsanti 1 e 2 possono essere verdi o rossi
- se uno è verde, l'altro è rosso, in maniera esclusiva
- solo il pulsante rosso è cliccabile
- il click su un pulsante (rosso) inverte i colori (e quindi il comportamento) di entrambi i pulsanti
Gli ostacoli più ovvi sono mettere in comunicazione i due pulsanti, lo stato condiviso, l'accesso a risorsa condivisa (lo stato, appunto), e le conseguenti
race conditions. Non sono problemi da poco, se possibile cerca un sistema alternativo.
Innanzitutto, non serve a nulla memorizzare la doppia informazione "0-1" per
entrambi i pulsanti, dato che i loro colori sono sempre mutualmente esclusivi è sufficiente indicare quale tra i due è rosso (o verde). Evita i file di testo, salva l'informazione in una base di dati, anche con
sqlite.
Hai poi bisogno di una pagina (php, chiamiamola
controller.php) che gestisca lo stato condiviso. Questa pagina riceverà delle richieste (probabilmente tramite AJAX) nelle quali si indica quale pulsante è stato cliccato. Questa pagina interrogherà la base di dati per stabilire se il click ricevuto deve modificare lo stato condiviso e, in caso positivo, lo modificherà. In ogni caso invierà una risposta alla pagina richiedente, indicandole il nuovo stato dei pulsanti.
Oltre a questo, la pagina dovrebbe anche prevedere un meccanismo di
lock per evitare
race conditions, ma lo farei in un secondo momento...
Le pagine richiedenti, quelle contenenti i pulsanti 1 e 2 rispettivamente, dovranno effettuare una richiesta AJAX verso la pagina
controller.php alla pressione del rispettivo pulsante. Le richieste indicheranno quale pulsante è stato premuto. La pagina richiedente riceverà quindi una risposta (sempre tramite AJAX), la quale riporterà lo stato dei pulsanti dopo l'azione (tale stato potrebbe essere uguale al precedente, oppure invertito); usando l'informazione ricevuta nella risposta, la pagina richiedente modificherà eventualmente il colore (e quindi la reazione al click) del pulsante.
Ci sono comunque dei potenziali problemi.
Supponi di avere aperte 1 pagina di amministrazione e 10 pagine utenti. All'inizio il pulsante nella pagina di amministrazione è rosso, quindi cliccabile, mentre quelli nelle 10 pagine utenti sono, di conseguenza, verdi.
Il click sul pulsante rosso
dovrebbe informare le 10 pagine utenti di modificare il colore dei loro pulsanti, ma implementare questo via web è... complicato.
È più semplice effettuare un
polling in cui ciascuna pagina richiede periodicamente lo stato dei pulsanti. Ad esempio ogni 0.5 secondi. A questo scopo è possibile modificare
controller.php in modo che gestisca sia le richieste di lettura dello stato che quelle di modifica.
I sistemi concorrenti non sono mai facili!