La mia app riceve ogni secondo da un sensore dei dati di varia natura; fra questi dati c'è anche l'ora esatta. L'app scrive questi dati su un file, dal nome sempre diverso. Ogni 5 minuti trasferisce questo file nel mio sito.
Essenzialmente
Se il trasferimento ha avuto successo l'app cancella il file locale, ormai inutile.
Sinteticamente :
Se il trasferimento non avviene con successo (assenza di rete ad esempio) il contatore N non viene incrementato e la scrittura del file locale avviene sempre sul medesimo file che è sempre lì, pronto ad essere inviato non appena le condizioni ridiventano valide. Il meccanismo, per quanto complicato, sembra essere funzionante (non ne ho trovato uno migliore, per la verità).
Lo script nel web "ricevi.asp" non fa altro che scrivere alla fine del'unico file "Totale.txt" quanto viene ricevuto.
In pratica su internet si ha contezza (o meglio si dovrebbe averla) dell'output del sensore, con i suoi valori attuali e anche con quelli passati; con qualche minuto di ritardo ma questo è accettabile.
Sembrerebbe tutto OK ma (c'è sempre un ma) l'ordine delle "spedizioni" non è purtroppo progressivo (1, 2, 3, 4, ecc.) ma (esempio 3, 4, 5, 8, 6, 7, ecc.)
Ne consegue che il file Totale. txt non rispecchia i valori reali nel tempo.
Io credo che dipenda da meccanismi interni con cui viene effettuato l'invio, meccanismi che procedono paralleli; ossia se ne possono innescare più di uno e magari qualcuno (bontà sua) termina prima di un altro (magari perchè ha meno byte da processare, cosa possibile).
Forse potrei agire dal lato web effettuando un controllo prima di scrivere sul file Totale.txt ma vorrei vedere se c'è una possibilità di "riordinare le spedizioni" fin dalla loro origine (lato B4A quindi).
Come potrei agire per correggere questi errori ?
Grazie per l'attenzione.
Essenzialmente
B4X:
NomeFile=N & ".txt"
size = File.Size(File.DirRootExternal, NomeFile)
InputStream1 = File.OpenInput(File.DirRootExternal, NomeFile)
req.InitializePost("http:// ... /ricevi.asp?Numero=" & N, InputStream1, size)
HttpClient1.Execute(req, N)
Se il trasferimento ha avuto successo l'app cancella il file locale, ormai inutile.
Sinteticamente :
B4X:
Sub HttpClient1_ResponseSuccess (Response As HttpResponse, N As Int)
InputStream1.Close
File.delete(File.DirRootExternal,N & ".txt")
N=N+1
end sub
Lo script nel web "ricevi.asp" non fa altro che scrivere alla fine del'unico file "Totale.txt" quanto viene ricevuto.
B4X:
BinaryStream.SaveToFile server.MapPath("/Cartella") & "/" & strFileBase , 2
BinaryStream.close
set BinaryStream = nothing
Sembrerebbe tutto OK ma (c'è sempre un ma) l'ordine delle "spedizioni" non è purtroppo progressivo (1, 2, 3, 4, ecc.) ma (esempio 3, 4, 5, 8, 6, 7, ecc.)
Ne consegue che il file Totale. txt non rispecchia i valori reali nel tempo.
Io credo che dipenda da meccanismi interni con cui viene effettuato l'invio, meccanismi che procedono paralleli; ossia se ne possono innescare più di uno e magari qualcuno (bontà sua) termina prima di un altro (magari perchè ha meno byte da processare, cosa possibile).
Forse potrei agire dal lato web effettuando un controllo prima di scrivere sul file Totale.txt ma vorrei vedere se c'è una possibilità di "riordinare le spedizioni" fin dalla loro origine (lato B4A quindi).
Come potrei agire per correggere questi errori ?
Grazie per l'attenzione.