You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

fromto.go 2.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package ioswitchlrc
  2. import (
  3. "gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec"
  4. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  5. )
  6. type From interface {
  7. GetDataIndex() int
  8. }
  9. type To interface {
  10. // To所需要的文件流的范围。具体含义与DataIndex有关系:
  11. // 如果DataIndex == -1,则表示在整个文件的范围。
  12. // 如果DataIndex >= 0,则表示在文件的某个分片的范围。
  13. GetRange() exec.Range
  14. GetDataIndex() int
  15. }
  16. type FromDriver struct {
  17. Handle *exec.DriverWriteStream
  18. DataIndex int
  19. }
  20. func NewFromDriver(dataIndex int) (*FromDriver, *exec.DriverWriteStream) {
  21. handle := &exec.DriverWriteStream{
  22. RangeHint: &exec.Range{},
  23. }
  24. return &FromDriver{
  25. Handle: handle,
  26. DataIndex: dataIndex,
  27. }, handle
  28. }
  29. func (f *FromDriver) GetDataIndex() int {
  30. return f.DataIndex
  31. }
  32. type FromNode struct {
  33. FileHash string
  34. Node *cdssdk.Node
  35. DataIndex int
  36. }
  37. func NewFromNode(fileHash string, node *cdssdk.Node, dataIndex int) *FromNode {
  38. return &FromNode{
  39. FileHash: fileHash,
  40. Node: node,
  41. DataIndex: dataIndex,
  42. }
  43. }
  44. func (f *FromNode) GetDataIndex() int {
  45. return f.DataIndex
  46. }
  47. type ToDriver struct {
  48. Handle *exec.DriverReadStream
  49. DataIndex int
  50. Range exec.Range
  51. }
  52. func NewToDriver(dataIndex int) (*ToDriver, *exec.DriverReadStream) {
  53. str := exec.DriverReadStream{}
  54. return &ToDriver{
  55. Handle: &str,
  56. DataIndex: dataIndex,
  57. }, &str
  58. }
  59. func NewToDriverWithRange(dataIndex int, rng exec.Range) (*ToDriver, *exec.DriverReadStream) {
  60. str := exec.DriverReadStream{}
  61. return &ToDriver{
  62. Handle: &str,
  63. DataIndex: dataIndex,
  64. Range: rng,
  65. }, &str
  66. }
  67. func (t *ToDriver) GetDataIndex() int {
  68. return t.DataIndex
  69. }
  70. func (t *ToDriver) GetRange() exec.Range {
  71. return t.Range
  72. }
  73. type ToNode struct {
  74. Node cdssdk.Node
  75. DataIndex int
  76. Range exec.Range
  77. FileHashStoreKey string
  78. }
  79. func NewToNode(node cdssdk.Node, dataIndex int, fileHashStoreKey string) *ToNode {
  80. return &ToNode{
  81. Node: node,
  82. DataIndex: dataIndex,
  83. FileHashStoreKey: fileHashStoreKey,
  84. }
  85. }
  86. func NewToNodeWithRange(node cdssdk.Node, dataIndex int, fileHashStoreKey string, rng exec.Range) *ToNode {
  87. return &ToNode{
  88. Node: node,
  89. DataIndex: dataIndex,
  90. FileHashStoreKey: fileHashStoreKey,
  91. Range: rng,
  92. }
  93. }
  94. func (t *ToNode) GetDataIndex() int {
  95. return t.DataIndex
  96. }
  97. func (t *ToNode) GetRange() exec.Range {
  98. return t.Range
  99. }
  100. // type ToStorage struct {
  101. // Storage cdssdk.Storage
  102. // DataIndex int
  103. // }
  104. // func NewToStorage(storage cdssdk.Storage, dataIndex int) *ToStorage {
  105. // return &ToStorage{
  106. // Storage: storage,
  107. // DataIndex: dataIndex,
  108. // }
  109. // }
  110. // func (t *ToStorage) GetDataIndex() int {
  111. // return t.DataIndex
  112. // }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。