Italian [B4A] Inviare file via Mqtt - come 'passare' il nome del file?

amorosik

Expert
Licensed User
Vorrei passare su pc un file di testo che si trova nella memoria Android
Smartphone e pc comunicano via mqtt
L'invio e la ricezione avvengono correttamente
Ma, lato ricezione, uso questo codice:

B4X:
Private Sub mqtt_MessageArrived (Topic As String, Payload() As Byte)
    Dim out As OutputStream = File.OpenOutput(dir_log,"file_di_log.txt", False)
    out.WriteBytes(Payload, 0, Payload.Length)
    out.Close
    End Sub

Dove:
- Topic e' l'argomento sottoscritto dal client
- Payload e' il contenuto del file

La domanda e': volendo passare anche il nome del file, come fare?
Inzomma, Topic e Payload non bastano, come fare per passare da app verso pc anche il nome del file (che nell'esempio sopra e' rigidamente cablato) ?
 

LucaMs

Expert
Licensed User
Longtime User
Crea un tipo personalizzato, ad esempio:
B4X:
Type tFile(Nome As String, Contenuto() As Byte)

Poi usa B4XSerializator (fa parte della libreria RandomAccessFile) per convertire l'oggetto (di tipo tFile) in byte da passare come Payload.
B4X:
    Dim MioFile As tFile
    MioFile.Initialize
    MioFile.Nome = "MainPage.bil"
    MioFile.Contenuto = File.ReadBytes(File.DirAssets, "MainPage.bjl")

    Dim serializator As B4XSerializator
    Dim Payload() As Byte = serializator.ConvertObjectToBytes(MioFile)

Viceversa nella ricezione:
B4X:
Private Sub mqtt_MessageArrived (Topic As String, Payload() As Byte)
    Dim MioFile As tFile = serializator.ConvertBytesToObject(Payload)
    ' Qui avrai disponibili:
    ' MioFile.Nome
    ' MioFile.Contenuto (array di byte)
End Sub


Dimenticavo: per poter serializzare un tale oggetto, la dichiarazione del Type deve stare nell'Activity Main (o nella B4XMainPage)
 
Last edited:

amorosik

Expert
Licensed User
Per quanto ne so MQTT non è l'ideale per inviare file - di solito di grandi dimensioni.

Why ?
Dal mio punto di vista, avendo gia' uno scambio messaggi basato su mqtt, vorrei usare questo anche per i file
Anche se non e' l'ideale fa niente, mi basta che sia sufficiente
Piuttosto sarebbe da capire se possa essere 'insufficiente' per lo scambio di file particolari come ad esempio contenenti caratteri non comuni o di dimensioni realmente elevate
Ma se, il 'non ideale' si riferisce solamente a prestazioni velocistiche inferiori ad altri sistemi, allora tengo questo e bon
 

udg

Expert
Licensed User
Longtime User
Le dimensioni contano..eheh
Qui trovi utili indicazioni.
 
Top