kopia lustrzana https://github.com/meshtastic/Meshtastic-Android
fix: replace duplicate packet IDs before sending queue (#646)
rodzic
9970ced53b
commit
bb3b1eaa85
|
@ -34,6 +34,10 @@ class PacketRepository @Inject constructor(private val packetDaoLazy: dagger.Laz
|
||||||
packetDao.updateMessageStatus(d, m)
|
packetDao.updateMessageStatus(d, m)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun updateMessageId(d: DataPacket, id: Int) = withContext(Dispatchers.IO) {
|
||||||
|
packetDao.updateMessageId(d, id)
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun getDataPacketById(requestId: Int) = withContext(Dispatchers.IO) {
|
suspend fun getDataPacketById(requestId: Int) = withContext(Dispatchers.IO) {
|
||||||
packetDao.getDataPacketById(requestId)
|
packetDao.getDataPacketById(requestId)
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,12 @@ interface PacketDao {
|
||||||
findDataPacket(data)?.let { update(it.copy(data = new)) }
|
findDataPacket(data)?.let { update(it.copy(data = new)) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transaction
|
||||||
|
fun updateMessageId(data: DataPacket, id: Int) {
|
||||||
|
val new = data.copy(id = id)
|
||||||
|
findDataPacket(data)?.let { update(it.copy(data = new)) }
|
||||||
|
}
|
||||||
|
|
||||||
@Query("Select data from packet order by received_time asc")
|
@Query("Select data from packet order by received_time asc")
|
||||||
fun getDataPackets(): List<DataPacket>
|
fun getDataPackets(): List<DataPacket>
|
||||||
|
|
||||||
|
|
|
@ -850,6 +850,13 @@ class MeshService : Service(), Logging {
|
||||||
|
|
||||||
private fun processQueuedPackets() = serviceScope.handledLaunch {
|
private fun processQueuedPackets() = serviceScope.handledLaunch {
|
||||||
packetRepository.get().getQueuedPackets()?.forEach { p ->
|
packetRepository.get().getQueuedPackets()?.forEach { p ->
|
||||||
|
// check for duplicate packet IDs before sending (so ACK/NAK updates can work)
|
||||||
|
if (getDataPacketById(p.id)?.time != p.time) {
|
||||||
|
val newId = generatePacketId()
|
||||||
|
debug("Replaced duplicate packet ID in queue: ${p.id}, with: $newId")
|
||||||
|
packetRepository.get().updateMessageId(p, newId)
|
||||||
|
p.id = newId
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
sendNow(p)
|
sendNow(p)
|
||||||
} catch (ex: Exception) {
|
} catch (ex: Exception) {
|
||||||
|
|
Ładowanie…
Reference in New Issue