This repository has been archived by the owner on Dec 20, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 773
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: allen.wq <[email protected]>
- Loading branch information
1 parent
19f1613
commit e52d6c2
Showing
3 changed files
with
151 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
/* | ||
* Copyright The Dragonfly Authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package seed | ||
|
||
import "time" | ||
|
||
// SeedManager is an interface which manages the seeds. | ||
type SeedManager interface { | ||
// Register a seed. | ||
Register(key string, info BaseInfo) (Seed, error) | ||
|
||
// UnRegister seed by key. | ||
UnRegister(key string) error | ||
|
||
// RefreshExpireTime refreshes expire time of seed. | ||
RefreshExpireTime(key string, expireTimeDur time.Duration) error | ||
|
||
// NotifyExpired get the expired chan of seed, it will be notified if seed expired. | ||
NotifyExpired(key string) (<-chan struct{}, error) | ||
|
||
// Prefetch will add seed to the prefetch list, and then prefetch by the concurrent limit. | ||
Prefetch(key string, perDownloadSize int64) (<-chan struct{}, error) | ||
|
||
// GetPrefetchResult should be called after notify by prefetch chan. | ||
GetPrefetchResult(key string) (PreFetchResult, error) | ||
|
||
// SetPrefetchLimit limits the concurrency of prefetching seed. | ||
// Default is defaultDownloadConcurrency. | ||
SetConcurrentLimit(limit int) (validLimit int) | ||
|
||
// Get gets the seed by key. | ||
Get(key string) (Seed, error) | ||
|
||
// List lists the seeds. | ||
List() ([]Seed, error) | ||
|
||
// Stop stops the SeedManager. | ||
Stop() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
/* | ||
* Copyright The Dragonfly Authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package seed | ||
|
||
import "io" | ||
|
||
// Seed describes the seed file which represents the resource file defined by taskUrl. | ||
type Seed interface { | ||
// Prefetch will start to download seed file to local cache. | ||
Prefetch(perDownloadSize int64) (<-chan struct{}, error) | ||
|
||
// GetPrefetchResult should be called after notify by prefetch chan. | ||
GetPrefetchResult() (PreFetchResult, error) | ||
|
||
// Delete will delete the local cache and release the resource. | ||
Delete() error | ||
|
||
// Download providers the range download, if local cache of seed do not include the range, | ||
// it will download the range data from rss and reply to request. | ||
Download(off int64, size int64) (io.ReadCloser, error) | ||
|
||
// stop the internal loop and release execution resource. | ||
Stop() | ||
|
||
// GetFullSize gets the full size of seed file. | ||
GetFullSize() int64 | ||
|
||
// GetStatus gets the status of seed file. | ||
GetStatus() string | ||
|
||
// URL gets the url of seed file. | ||
URL() string | ||
|
||
// Headers get the headers of seed file. | ||
Headers() map[string][]string | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
/* | ||
* Copyright The Dragonfly Authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package seed | ||
|
||
import ( | ||
"time" | ||
) | ||
|
||
// BaseInfo describes the base info of seed. | ||
type BaseInfo struct { | ||
// the url of seed file. | ||
URL string | ||
|
||
// the header of seed file. | ||
Header map[string][]string | ||
|
||
// the full length of seed file. | ||
FullLength int64 | ||
|
||
// Seed will download data from rss which is divided by blocks. | ||
// And block size is defined by BlockOrder. It should be limited [10, 31]. | ||
BlockOrder uint32 | ||
|
||
// expire time duration of seed file. | ||
ExpireTimeDur time.Duration | ||
} | ||
|
||
// PreFetchResult shows the result of prefetch. | ||
type PreFetchResult struct { | ||
Success bool | ||
Err error | ||
// if canceled, caller need not to do other. | ||
Canceled bool | ||
} |