fix write function being cancelled on disconnect

This commit is contained in:
David Lechner
2021-01-22 20:25:01 -06:00
parent bf6d64c211
commit 783f7e2337
+10 -3
View File
@@ -1,10 +1,10 @@
// SPDX-License-Identifier: MIT
// Copyright (c) 2020 The Pybricks Authors
// Copyright (c) 2020-2021 The Pybricks Authors
// File: sagas/lwp3-bootloader-ble.ts
// Handles Bluetooth Low Energy connection to LEGO Wireless Protocol v3 Bootloader service.
import { END, eventChannel } from 'redux-saga';
import { call, cancel, put, takeEvery, takeMaybe } from 'redux-saga/effects';
import { call, cancel, put, spawn, takeEvery, takeMaybe } from 'redux-saga/effects';
import {
BootloaderConnectionAction,
BootloaderConnectionActionType,
@@ -141,8 +141,15 @@ function* connect(_action: BootloaderConnectionAction): Generator {
return;
}
// Spawning write so that it can't be canceled. This is important because
// other sagas always expect it to complete with success action or error
// action.
function* spawnWrite(action: BootloaderConnectionSendAction): Generator {
yield spawn(write, characteristic, action);
}
yield takeEvery(notificationChannel, handleNotify);
yield takeEvery(BootloaderConnectionActionType.Send, write, characteristic);
yield takeEvery(BootloaderConnectionActionType.Send, spawnWrite);
yield takeEvery(
BootloaderConnectionActionType.Disconnect,
server.disconnect.bind(server),