Well, I quite enjoyed writing this anyway ? plus it might be a useful starting point for others, so:
If you use this packet parsing routine:
[CODE lang="b4x" highlight="7"]Sub Process_Globals
Dim StartOfPacket As String = "$$@"
Dim EndOfPacket As String = "!#" & CRLF
Dim PacketBuffer As String
End Sub
Sub HandleIncomingData(Chunk As String)
LogColor("In = " & Chunk.Replace(CRLF, "CRLF"), 0xFFc0c0c0)
PacketBuffer = PacketBuffer & Chunk
Do While True
Dim P As Int = PacketBuffer.IndexOf(EndOfPacket) 'check for packet in PacketBuffer
If P < 0 Then Exit 'exit if not
P = P + EndOfPacket.Length 'point to end of packet, not start of EndOfPacket marker
Dim Packet As String = PacketBuffer.SubString2(0, P) 'cut off front bit
PacketBuffer = PacketBuffer.SubString(P) 'keep the rest
P = Packet.LastIndexOf(StartOfPacket)
If P > -1 Then 'if packet present
If P <> 0 Then 'if guff before StartOfPacket
Packet = Packet.SubString(P) 'then chop it off
End If
HandlePacket(Packet)
End If
Loop
End Sub[/CODE]
and test it in B4J with:
[CODE lang="b4x" highlight="26,30"]Sub AppStart (Args() As String)
Dim sb As StringBuilder
sb.Initialize
DateTime.DateFormat = "dd/MMM/yyyy HH:mm:ss"
Dim NumSamplePackets As Int = 6 'whatever
For I = 1 To NumSamplePackets
sb.Append("noise")
sb.Append(StartOfPacket)
sb.Append(Round2(Rnd(0, 5000) / 1000, 2))
sb.Append("@")
sb.Append(DateTime.Date(DateTime.now + I * 1000 + Rnd(-100, 100)))
sb.Append(EndOfPacket)
Next
DateTime.DateFormat = DateTime.DeviceDefaultDateFormat
Dim SampleData As String = sb.ToString
Log(SampleData)
Log(SampleData.Length)
Dim ChunkSize As Int = 19 'whatever
For I = 0 To SampleData.Length - 1 Step ChunkSize
HandleIncomingData(SampleData.SubString2(I, Min(I + ChunkSize, SampleData.Length)))
Next
End Sub
Sub HandlePacket(Packet As String)
LogColor("Packet = " & Packet.Replace(CRLF, "CRLF"), 0xFF008000)
End Sub[/CODE]
then with luck you'll get Log output something like: