65 lines
1.8 KiB
Dart
Executable File
65 lines
1.8 KiB
Dart
Executable File
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,
|
|
);
|
|
}
|
|
}
|