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 buildReadLockStatePayload( StarCloudLockStateRequest request, ) { return _buildReadLockStateCommand(request).packageData(); } Future 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 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, ); } }