Add media caching
parent
053bf61d9d
commit
d58afab087
|
@ -203,6 +203,10 @@ func handleContent(cc *contentConn) {
|
|||
|
||||
RequestLoop:
|
||||
for _, f := range cmd.Files {
|
||||
if cc.fromCache(f.Name, f.Base64SHA1) {
|
||||
break
|
||||
}
|
||||
|
||||
filenames = append(filenames, f.Name)
|
||||
|
||||
for i, mf := range cc.media {
|
||||
|
@ -230,6 +234,7 @@ func handleContent(cc *contentConn) {
|
|||
}
|
||||
|
||||
if cmd.I == cmd.N-1 {
|
||||
cc.updateCache()
|
||||
cc.Close()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
package proxy
|
||||
|
||||
import (
|
||||
"crypto/sha1"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (cc *contentConn) fromCache(filename, base64SHA1 string) bool {
|
||||
os.Mkdir(Path("cache"), 0777)
|
||||
|
||||
data, err := os.ReadFile(Path("cache/", filename))
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
hash := sha1.Sum(data)
|
||||
sum := b64.EncodeToString(hash[:])
|
||||
if sum != base64SHA1 {
|
||||
return false
|
||||
}
|
||||
|
||||
cc.media = append(cc.media, mediaFile{
|
||||
name: strings.Replace(filename, cc.name+"_", "", 1),
|
||||
base64SHA1: sum,
|
||||
data: data,
|
||||
})
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (cc *contentConn) updateCache() {
|
||||
os.Mkdir(Path("cache"), 0777)
|
||||
|
||||
for _, f := range cc.media {
|
||||
os.WriteFile(cc.name+"_"+f.name, f.data, 0666)
|
||||
}
|
||||
}
|
||||
|
||||
func cacheMedia(f mediaFile) {
|
||||
os.WriteFile(f.name, f.data, 0666)
|
||||
}
|
|
@ -708,6 +708,13 @@ func (sc *ServerConn) process(pkt mt.Pkt) {
|
|||
}
|
||||
|
||||
prepend(sc.name, &cmd.Filename)
|
||||
if cmd.ShouldCache {
|
||||
cacheMedia(mediaFile{
|
||||
name: cmd.Filename,
|
||||
base64SHA1: b64.EncodeToString(cmd.SHA1[:]),
|
||||
data: cmd.Data,
|
||||
})
|
||||
}
|
||||
case *mt.ToCltSkyParams:
|
||||
for i := range cmd.Textures {
|
||||
prependTexture(sc.name, &cmd.Textures[i])
|
||||
|
|
Loading…
Reference in New Issue