flutter_sdk/lib/src/advanced/starcloud_lock_state_service.dart

65 lines
1.8 KiB
Dart
Raw Normal View History

2026-08-20 09:25:05 +08:00
import 'package:starcloud/blue/blue_read_write.dart';
import 'package:starcloud/device/ble/protocol/public/lock_status_info.dart';
import '../core/starcloud_exception.dart';
import '../core/starcloud_lock_context.dart';
import 'models/lock_state_models.dart';
class StarCloudLockStateService {
StarCloudLockStateService();
LockStatusInfoCommand _buildReadLockStateCommand(
StarCloudLockStateRequest request,
) {
return LockStatusInfoCommand(
lockID: request.lockId,
userID: request.userId,
utcTimeStamp: request.utcTimeStamp,
unixTimeStamp: request.unixTimeStamp,
privateKey: request.privateKey,
);
}
List<int> buildReadLockStatePayload(
StarCloudLockStateRequest request,
) {
return _buildReadLockStateCommand(request).packageData();
}
Future<GetStarLockStatusInfoReply> readLockState(
StarCloudLockStateRequest request, {
Duration timeout = const Duration(seconds: 15),
}) async {
final command = _buildReadLockStateCommand(request);
try {
final reply = await BlueReadWrite.shareManager()!.writeAndReturn(
command,
getPrivateKey: () => request.privateKey,
);
return reply as GetStarLockStatusInfoReply;
} catch (e) {
throw StarCloudException(
'Read lock state failed',
raw: e,
);
}
}
Future<GetStarLockStatusInfoReply> readLockStateByContext(
StarCloudLockContext context, {
Duration timeout = const Duration(seconds: 15),
}) {
final now = DateTime.now();
return readLockState(
StarCloudLockStateRequest(
lockId: context.lockId.toString(),
userId: context.userId,
utcTimeStamp: now.toUtc().millisecondsSinceEpoch ~/ 1000,
unixTimeStamp: now.millisecondsSinceEpoch ~/ 1000,
privateKey: context.privateKey,
),
timeout: timeout,
);
}
}