|
|
@ -0,0 +1,41 @@ |
|
|
|
package operation |
|
|
|
|
|
|
|
import ( |
|
|
|
"errors" |
|
|
|
"strconv" |
|
|
|
"time" |
|
|
|
) |
|
|
|
|
|
|
|
type VidInfo struct { |
|
|
|
Locations []Location |
|
|
|
NextRefreshTime time.Time |
|
|
|
} |
|
|
|
type VidCache struct { |
|
|
|
cache []VidInfo |
|
|
|
} |
|
|
|
|
|
|
|
func (vc *VidCache) Get(vid string) ([]Location, error) { |
|
|
|
id, _ := strconv.Atoi(vid) |
|
|
|
if 0 < id && id <= len(vc.cache) { |
|
|
|
if vc.cache[id-1].Locations == nil { |
|
|
|
return nil, errors.New("Not Set") |
|
|
|
} |
|
|
|
if vc.cache[id-1].NextRefreshTime.Before(time.Now()) { |
|
|
|
return nil, errors.New("Expired") |
|
|
|
} |
|
|
|
return vc.cache[id-1].Locations, nil |
|
|
|
} |
|
|
|
return nil, errors.New("Not Found") |
|
|
|
} |
|
|
|
func (vc *VidCache) Set(vid string, locations []Location, duration time.Duration) { |
|
|
|
id, _ := strconv.Atoi(vid) |
|
|
|
if id >= len(vc.cache) { |
|
|
|
for i := id - len(vc.cache); i > 0; i-- { |
|
|
|
vc.cache = append(vc.cache, VidInfo{}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
vc.cache[id-1].Locations = locations |
|
|
|
vc.cache[id-1].NextRefreshTime = time.Now().Add(duration) |
|
|
|
|
|
|
|
} |