AeroToss: исправлена отмена передачи

- Добавлен activeSockets для хранения сокетов при передаче
- cancelTransfer закрывает сокет + отменяет корутину + обновляет состояние
- Исправлено на обеих платформах (Desktop + Android)
This commit is contained in:
2026-08-20 00:24:42 +03:00
parent 12ceb58868
commit ce59cc5e1b
2 changed files with 8 additions and 0 deletions
@@ -37,6 +37,7 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager
private var serverThread: Thread? = null
private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
private val activeJobs = ConcurrentHashMap<String, Job>()
private val activeSockets = ConcurrentHashMap<String, Socket>()
private val running = AtomicBoolean(false)
private val connectionLimiter = Semaphore(10)
@@ -220,6 +221,7 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager
val job = scope.launch {
try {
val socket = Socket(targetHost, targetPort)
activeSockets[requestId] = socket
socket.use { sock ->
sock.soTimeout = 30_000
val input = DataInputStream(sock.getInputStream())
@@ -300,6 +302,8 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager
override fun cancelTransfer(requestId: String) {
activeJobs[requestId]?.cancel()
activeJobs.remove(requestId)
activeSockets[requestId]?.let { try { it.close() } catch (_: Exception) {} }
activeSockets.remove(requestId)
updateOutgoingById(requestId, _outgoingTransfers.value.find { it.id == requestId }?.copy(
state = TransferState.CANCELLED
) ?: return)