mirror of
https://github.com/permissionlesstech/bitchat-android.git
synced 2026-07-25 05:45:19 +00:00
refactor ack
This commit is contained in:
@@ -262,6 +262,10 @@ class BluetoothMeshService(private val context: Context) {
|
|||||||
return delegate?.decryptChannelMessage(encryptedContent, channel)
|
return delegate?.decryptChannelMessage(encryptedContent, channel)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun sendDeliveryAck(message: BitchatMessage, senderPeerID: String) {
|
||||||
|
this@BluetoothMeshService.sendDeliveryAck(message, senderPeerID)
|
||||||
|
}
|
||||||
|
|
||||||
// Callbacks
|
// Callbacks
|
||||||
override fun onMessageReceived(message: BitchatMessage) {
|
override fun onMessageReceived(message: BitchatMessage) {
|
||||||
delegate?.didReceiveMessage(message)
|
delegate?.didReceiveMessage(message)
|
||||||
@@ -520,6 +524,42 @@ class BluetoothMeshService(private val context: Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send delivery acknowledgment for a received private message
|
||||||
|
*/
|
||||||
|
fun sendDeliveryAck(message: BitchatMessage, senderPeerID: String) {
|
||||||
|
serviceScope.launch {
|
||||||
|
val nickname = delegate?.getNickname() ?: myPeerID
|
||||||
|
val ack = DeliveryAck(
|
||||||
|
originalMessageID = message.id,
|
||||||
|
recipientID = myPeerID,
|
||||||
|
recipientNickname = nickname,
|
||||||
|
hopCount = 0u // Will be calculated during relay
|
||||||
|
)
|
||||||
|
|
||||||
|
try {
|
||||||
|
val ackData = ack.encode() ?: return@launch
|
||||||
|
val encryptedPayload = securityManager.encryptForPeer(ackData, senderPeerID)
|
||||||
|
if (encryptedPayload != null) {
|
||||||
|
val packet = BitchatPacket(
|
||||||
|
type = MessageType.DELIVERY_ACK.value,
|
||||||
|
senderID = hexStringToByteArray(myPeerID),
|
||||||
|
recipientID = hexStringToByteArray(senderPeerID),
|
||||||
|
timestamp = System.currentTimeMillis().toULong(),
|
||||||
|
payload = encryptedPayload,
|
||||||
|
signature = null,
|
||||||
|
ttl = 3u
|
||||||
|
)
|
||||||
|
|
||||||
|
connectionManager.broadcastPacket(RoutedPacket(packet))
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Failed to send delivery ACK: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send broadcast announce
|
* Send broadcast announce
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ class MessageHandler(private val myPeerID: String) {
|
|||||||
delegate?.onMessageReceived(message)
|
delegate?.onMessageReceived(message)
|
||||||
|
|
||||||
// Send delivery ACK
|
// Send delivery ACK
|
||||||
sendDeliveryAck(message, peerID)
|
delegate?.sendDeliveryAck(message, peerID)
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
@@ -394,42 +394,6 @@ class MessageHandler(private val myPeerID: String) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Send delivery acknowledgment for a received private message
|
|
||||||
*/
|
|
||||||
private fun sendDeliveryAck(message: BitchatMessage, senderPeerID: String) {
|
|
||||||
handlerScope.launch {
|
|
||||||
val nickname = delegate?.getMyNickname() ?: myPeerID
|
|
||||||
val ack = DeliveryAck(
|
|
||||||
originalMessageID = message.id,
|
|
||||||
recipientID = myPeerID,
|
|
||||||
recipientNickname = nickname,
|
|
||||||
hopCount = 0u // Will be calculated during relay
|
|
||||||
)
|
|
||||||
|
|
||||||
try {
|
|
||||||
val ackData = ack.encode() ?: return@launch
|
|
||||||
val encryptedPayload = delegate?.encryptForPeer(ackData, senderPeerID)
|
|
||||||
if (encryptedPayload != null) {
|
|
||||||
val packet = BitchatPacket(
|
|
||||||
type = MessageType.DELIVERY_ACK.value,
|
|
||||||
senderID = hexStringToByteArray(myPeerID),
|
|
||||||
recipientID = hexStringToByteArray(senderPeerID),
|
|
||||||
timestamp = System.currentTimeMillis().toULong(),
|
|
||||||
payload = encryptedPayload,
|
|
||||||
signature = null,
|
|
||||||
ttl = 3u
|
|
||||||
)
|
|
||||||
|
|
||||||
delegate?.sendPacket(packet)
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e(TAG, "Failed to send delivery ACK: ${e.message}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get debug information
|
* Get debug information
|
||||||
*/
|
*/
|
||||||
@@ -580,6 +544,7 @@ interface MessageHandlerDelegate {
|
|||||||
|
|
||||||
// Message operations
|
// Message operations
|
||||||
fun decryptChannelMessage(encryptedContent: ByteArray, channel: String): String?
|
fun decryptChannelMessage(encryptedContent: ByteArray, channel: String): String?
|
||||||
|
fun sendDeliveryAck(message: BitchatMessage, senderPeerID: String)
|
||||||
|
|
||||||
// Callbacks
|
// Callbacks
|
||||||
fun onMessageReceived(message: BitchatMessage)
|
fun onMessageReceived(message: BitchatMessage)
|
||||||
|
|||||||
Reference in New Issue
Block a user