石墨仪设备 前端仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.6 KiB

6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
5 months ago
6 months ago
5 months ago
5 months ago
  1. import type { OperationCmd } from "./globalCmd/globalCmd";
  2. let _lastTimestamp = 0;
  3. export function generateTxnNo() {
  4. const txnNo = Date.now();
  5. // 确保前后两条指令的txn 不一样
  6. if (txnNo !== _lastTimestamp) {
  7. if (txnNo < _lastTimestamp) {
  8. _lastTimestamp++;
  9. } else {
  10. _lastTimestamp = txnNo;
  11. }
  12. } else {
  13. _lastTimestamp = txnNo + 1;
  14. }
  15. return _lastTimestamp;
  16. }
  17. type DebugCmdRecord = {
  18. category: "debug";
  19. command: OperationCmd;
  20. params: Record<string, any>;
  21. };
  22. type TaskCmdRecord = {
  23. category: "task";
  24. command: OperationCmd;
  25. params: Record<string, any>;
  26. }
  27. type TaskCmdInjectFluidsRecord = {
  28. category: "task";
  29. command: OperationCmd,
  30. injectFluids: [];
  31. }
  32. type TxnRecord = DebugCmdRecord | TaskCmdRecord | TaskCmdInjectFluidsRecord
  33. const txnCmdMap: Record<string, TxnRecord> = {};
  34. export function addTxnRecord(val: TxnRecord) {
  35. const txn = generateTxnNo().toString();
  36. txnCmdMap[txn] = val;
  37. return txn;
  38. }
  39. export function injectFluidsRecord(val: TaskCmdInjectFluidsRecord){
  40. const txn = generateTxnNo().toString();
  41. txnCmdMap[txn] = val;
  42. return txn;
  43. }
  44. export function getTxnRecord(txn: string, category: TxnRecord["category"]) {
  45. const record = txnCmdMap[txn];
  46. // 只有属于指定category时,才返回,且返回后删除记录,节约内存
  47. if (record && record.category === category) {
  48. delete txnCmdMap[txn];
  49. return record;
  50. }
  51. return undefined;
  52. }
  53. export function peekTxnRecord(txn: string, category: TxnRecord["category"]) {
  54. const record = txnCmdMap[txn];
  55. // 只有属于指定category时,才返回,且返回后删除记录,节约内存
  56. if (record && record.category === category) {
  57. return record;
  58. }
  59. return undefined;
  60. }